1

私は現在、Jon Loeliger による本Version Control with Git を読んでいます。

ハードリンクと の 2 つの微妙な違いについて説明しfile://ます。

これまで見てきたように、Git URL の最も単純な形式は、ローカル ファイル システム上のリポジトリを参照します。これは、実際の物理ファイル システムでも、ネットワーク ファイル システム (NFS) 経由でローカルにマウントされた仮想ファイル システムでもかまいません。次の 2 つの順列があります。

/path/to/repo.git

file:///path/to/repo.git

これら 2 つの形式は本質的に同じですが、微妙ではありますが重要な違いがあります。前者は、ファイルシステム内のハード リンクを使用して、現在のリポジトリとリモート リポジトリ間でまったく同じオブジェクトを直接共有します。後者は、オブジェクトを直接共有する代わりにコピーします。共有リポジトリに関連する問題を回避するには、file://フォームを使用することをお勧めします。

./git/object最初は、複製したレポフォルダーがリモートへのリンクだと思っていましたが、そうではないと思います.git/object

誰かがこれを説明できますか?

4

1 に答える 1

1

git cloneどちらの場合も、ターゲット リポジトリの新しいコピー (同一のクローン) を作成し、古いリポジトリをリモートとして追加します。それらは 2 つの別個のリポジトリです。

違いは、構文を使用する場合

git clone /path/to/repo.git

git は、1. 両方のリポジトリと同一であり、2. 変更が予想されないファイルに対して、ファイル システム内のハード リンクを使用してスペースを節約しようとします。同一で変更されないことが期待される唯一のファイル (オブジェクトを再パックする場合を除く) は、クローン作成時の .git/objects 内のファイルです。

ハードリンクはファイルのコンテンツを異なる場所で複数回参照することを意味するため、これによりスペースが節約されますが、実際のコンテンツは一度だけ保存されます。(実際には、Git 自体がオブジェクト データベースで同様のメカニズムを使用しており、一意のファイルのコンテンツを複数回保存することはありません。)

.git/objects 内のファイルの新しいコピーも git に強制的に作成させたい場合は、次の構文を使用します。

git clone file:///path/to/repo.git

それを実現します。

于 2014-02-12T23:58:31.643 に答える