web-dev-qa-db-ja.com

シンボリックリンクされたフォルダにgit commitファイルを作成するにはどうすればよいですか

2つのフォルダーがあります。

  • /home/me/code/project/
  • /srv/www/projectfiles/

/home/me/code/projectフォルダーで、static/srv/www/projectfiles/にシンボリックリンクしました

つまり、/home/me/code/project/static/-> /srv/www/projectfiles/

ここでコミットしようとすると、シンボリックリンクの背後にあるファイルが表示されず、シンボリックリンク自体をファイルとしてコミットしようとします。

シンボリックリンクの背後にあるファイル(/srv/www/projectfiles/style.cssなど)をコミットするにはどうすればよいですか?

21
Macha

回避策は、/ srv/www/projectfilesを/ home/me/code/project/staticへのシンボリックリンクにして、gitがシンボリックリンクを認識しないようにすることです。

13
user151019

Linuxを使用している場合、特に GitBLSR によって提供されるソリューションが好きです。これは、LD_PRELOADを介して読み込まれるライブラリであり、シンボリックリンクをリポジトリ外のファイルやフォルダに透過的に逆参照します。

ローカルユーザーアカウントにインストールするのは簡単です:

git clone https://github.com/Alcaro/GitBSLR.git
cd GitBSLR
./install.sh

これにより、ライブラリがコンパイルされ、~/.bashrcに次のようなエイリアスが作成されます。

alias git="LD_PRELOAD=/path/to/gitbslr.so git"

このエイリアスを使用すると、透過的なリンクの逆参照が可能になります。

4
Mark

マウントポイントを使用して、目的のフォルダー(現在シンボリックリンク先)をマウントして、gitプロジェクトの下の目的の場所に表示することを検討してください。私はこのアプローチをうまく使いました。

2
Tony Garland

別の回避策-ディレクトリでも機能する唯一の方法は、特定のアクションのgit作業ツリーを変更することです。

git --work-tree=/home/me/code/project/ add /home/me/code/project/static/
git --work-tree=/home/me/code/project/ commit /home/me/code/project/static/
1
Ohad Cohen

ファイルをフォルダーに移動し、シンボリックリンクを削除します。 Gitはシンボリックリンクをトラバースしません。

それは(そして私は)バージョン管理する必要がないので、あなたが制御していないか変更したくない一連のファイルにシンボリックリンクしていると仮定します。

1
Josh K

同じ問題がありました...公開リリースのために、シンボリックリンクされたファイルを含むディレクトリをGITリポジトリにアップロードしています。

GITリポジトリはファイルのプライマリソースではなくセカンダリソースです。そのため、ローカルマシンのシンボリックリンクを置き換えたくありません。ハードリンクは壊れてしまうのでよくありません。ハードリンクはリンクであるかどうかはわかりません。

私のソリューションスクリプトはここに投稿されました... https://stackoverflow.com/a/60330575/701532

0
anthony