2012-10-23 15 views
5

ローカルファイルシステムからクローンが要求された場合、おそらくクローンのスピードアップとディスク容量の節約のために、Gitは-lと仮定します。このタイプのクローンの意味は何ですか?リポジトリを2回クローンしてからコミットすると、その変更は他のクローンでも見えますか? Gitが書き込みに注意を払うかどうか疑問に思います。元のリポジトリが読み取り専用の場合は、そのクローンの問題が表示されますか? -lについてローカルクローンがGitに与える影響は何ですか?

答えて

5

git clone manページ状態:

ローカルマシン上にあるからリポジトリをクローン化する、このフラグはHEADのコピーを作成することにより、通常の「gitの意識」のトランスポートメカニズムとクローンリポジトリをバイパスオブジェクトの下のすべてとディレクトリを参照します。可能であれば、.git/objects /ディレクトリの下のファイルはハードリンクされ、スペースを節約します。

これは、実際には意味を持たないすべてのGitオブジェクトに対してハードリンクを取得することを意味します。これらのオブジェクトはいずれにしても変更不可能であり、作成されたGitはそれらを更新しません。また、HEADとその他のシンボリックリファレンスの実際のコピーがあるので、1つのリポジトリでの変更はでなく、と表示されます。変更をコミットすると、いくつかの新しいオブジェクトが.git/objectsの下に作成され、HEAD参照が最新のコミット(新しく作成されたオブジェクトの1つになる)を指すように更新されます。既存のオブジェクトは更新されませんので、ハードリンクについて心配する必要はありません。

manページ状態1つの興味のある意味合い、:

は(あなたがあなたのリポジトリのバックアップを作成しようとしている場合が望ましいことがある)の代わりにハードリンクのコピーを強制するために、まだ普通の "git aware"トランスポートメカニズムを避けてください。--no-hardlinksを使うことができます。

ハードリンクの欠点は、それらがディスク上の同じ実際のinodeを参照することです.1つのGitオブジェクトが壊れた場合、ハードリンクされているすべてのローカルクローンは壊れたオブジェクトになります。ハードリンクがないと、すべてのオブジェクトの実際のバックアップコピーが作成されます。

+0

Windows用のgitはNTFS上でハードリンクできますか? –