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
など)をコミットするにはどうすればよいですか?
回避策は、/ srv/www/projectfilesを/ home/me/code/project/staticへのシンボリックリンクにして、gitがシンボリックリンクを認識しないようにすることです。
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"
このエイリアスを使用すると、透過的なリンクの逆参照が可能になります。
マウントポイントを使用して、目的のフォルダー(現在シンボリックリンク先)をマウントして、gitプロジェクトの下の目的の場所に表示することを検討してください。私はこのアプローチをうまく使いました。
別の回避策-ディレクトリでも機能する唯一の方法は、特定のアクションの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/
ファイルをフォルダーに移動し、シンボリックリンクを削除します。 Gitはシンボリックリンクをトラバースしません。
それは(そして私は)バージョン管理する必要がないので、あなたが制御していないか変更したくない一連のファイルにシンボリックリンクしていると仮定します。
同じ問題がありました...公開リリースのために、シンボリックリンクされたファイルを含むディレクトリをGITリポジトリにアップロードしています。
GITリポジトリはファイルのプライマリソースではなくセカンダリソースです。そのため、ローカルマシンのシンボリックリンクを置き換えたくありません。ハードリンクは壊れてしまうのでよくありません。ハードリンクはリンクであるかどうかはわかりません。
私のソリューションスクリプトはここに投稿されました... https://stackoverflow.com/a/60330575/701532