インデックスにファイルを追加したときにGitが何をするかを確認することで、Gitがファイルをどのように処理するかを確認できます。インデックスはプリコミットのようなものです。インデックスがコミットされると、を使用git checkoutして、インデックス内にあったすべてのものを作業ディレクトリに戻すことができます。では、シンボリックリンクをインデックスに追加すると、Gitは何をしますか?
調べるには、まずシンボリックリンクを作成します。
$ ln -s /path/referenced/by/symlink symlink
Gitはこのファイルをまだ認識していません。git ls-filesインデックスを検査できます(-s出力のstatような出力):
$ git ls-files -s ./symlink
[nothing]
次に、シンボリックリンクのコンテンツをインデックスに追加して、Gitオブジェクトストアに追加します。ファイルをインデックスに追加すると、Gitはその内容をGitオブジェクトストアに保存します。
$ git add ./symlink
それで、何が追加されましたか?
$ git ls-files -s ./symlink
120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0       symlink
ハッシュは、Gitオブジェクトストアで作成されたパックされたオブジェクトへの参照です。.git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15cリポジトリのルートを調べれば、このオブジェクトを調べることができます。これはGitがリポジトリに保存するファイルで、後でチェックアウトできます。このファイルを調べると、非常に小さいことがわかります。リンクされたファイルの内容は保存されません。
(出力に120000リストされているモードです。通常のファイルのls-filesよう100644になります。)
しかし、リポジトリからファイルシステムにチェックアウトすると、Gitはこのオブジェクトをどのように処理しますか?core.symlinks設定によって異なります。からman git-config:
  core.symlinks
  
  falseの場合、シンボリックリンクは、リンクテキストを含む小さなプレーンファイルとしてチェックアウトされます。
そのため、リポジトリにシンボリックリンクがある場合、チェックアウト時に、構成の値に応じて、完全なファイルシステムパスへの参照を含むテキストファイル、または適切なシンボリックリンクを取得しますcore.symlinks。
どちらの方法でも、symlinkによって参照されるデータはリポジトリに保存されません。
               
              
.gitignoreシンボリックリンクをフォルダーではなくファイルとして認識します。