1. ホーム
  2. git

[解決済み] Git はシンボリックリンクをどのように扱うのですか?

2022-03-18 04:24:03

質問

シンボリックリンクのファイルやディレクトリを Git リポジトリにコミットした場合、そのファイルやディレクトリはどうなりますか?

ファイルが削除されるまでシンボリックリンクのままにしておき、古いバージョンからファイルを引き出すと、通常のファイルが作成されるだけだと思われます。

参照しているファイルを削除すると、どうなるのでしょうか?ダングリングリンクをコミットするだけなのでしょうか?

解決方法は?

から Linux symlink マニュアル (Linuxを想定しています)。

<ブロッククオート

シンボリックリンクは、他のファイルのパス名である文字列をコンテンツとする特殊なタイプのファイルです。 (シンボリックリンクの内容は readlink(2) を使って読み取ることができます)。

つまり、シンボリックリンクはもう1つのファイルであり、ちょうど README.md または Makefile . Gitは、他のファイルと同じように、リンクの内容(すなわち、リンク先のファイルシステムオブジェクトの前述のパス)を「blob」に格納するだけです。そして、名前、モード、タイプ(シンボリックリンクであるという事実を含む)を、それを含むディレクトリを表すツリー・オブジェクトに格納します。

リンクを含むツリーをチェックアウトすると、対象のファイルシステムオブジェクトが存在するかどうかに関係なく、オブジェクトをシンボリックリンクとしてリストアします。

シンボリックリンクが参照しているファイルを削除しても、Git が管理しているシンボリックリンクには何の影響もありません。ダングリングリファレンスが発生することになります。必要であれば、リンクを削除するか、有効なものを指すように変更するかはユーザー次第です。