5

シンボリック リンクを配置して、git リポジトリの外部にファイルをプッシュする方法はありますか。

たとえば、ファイルをプッシュして、git リポジトリに/root/my_fileシンボリック リンクを作成したいとします。my_symbolic_link

# ls -lA                                                                                                                    
drwxr-xr-x 7 root root 4096 Oct  8 07:55 .git/
lrwxrwxrwx 1 root root   26 Oct  8 7:58 my_symbolic_link -> /root/my_file
4

2 に答える 2

12

シンボリック リンクは、ファイル システム内の別のファイルへの参照を含むファイルです。リポジトリにシンボリックリンクを追加できますが、それを行うと、他のファイルへの参照を追加するだけで、他のファイルには追加されません。

シンボリックリンクの代わりにハードリンクを作成することで、目的を達成できます。ハード リンクとは、ファイル システム レベルでのファイル名とそのコンテンツ (およびメタデータ) の関連付けです。ファイルへのハード リンクを作成してリポジトリに追加することで、そのリンクされたファイルを追加します。POSIX 準拠のオペレーティング システム (すべての Linux など) では、次のようなハード リンクを作成できます。

ln /root/my_file my_hard_link

さまざまな種類のリンクの詳細については、この質問とその回答を参照してください。

更新: git はハード リンクについて何も知らないことに注意してください。git リポジトリにハード リンクを追加するということは、そのリンクされたファイルのコンテンツを追加していることを意味します。Git は、追加したばかりのファイルがハード リンクであることを認識していません。レポにハード リンクを追加しても壊れませんが、レポからチェックアウトすると、そのファイルの新しいコピーが作成され、そのハード リンクは再作成されません。「チェックアウト」とはgit checkout、コマンドだけを意味するのではなくclone、レポの新しいコピーを作成する、ハードリンクを削除しgit resetて再作成する、pullリモートレポからこのハードリンクされたファイルの新しいバージョンを作成するなどの操作も意味します。

要約すると、次の 2 つのオプションがあります。

  • リポジトリにシンボリック リンクを追加 - これにより、リンクに関する情報のみが追加され、リンクされたファイルのコンテンツは追加されません。
  • リポジトリにハード リンクを追加 - これにより、リンクされたファイルのコンテンツが追加されます。リンクに関する情報は追加されませんが、次にハード リンクされたファイルをレポからチェックアウトするまで、リンクは解除されません。
于 2016-10-08T17:29:12.313 に答える