2011-07-28 6 views
9

私は質問に言い方が分からなかったので、明らかでない場合は謝ります。もしあなたがgit cloneレポにぶら下がっているオブジェクトがたくさんあるなら、それらをクローンしますか?反対の場合も同じです。 git gcを実行して他の人にそれをプッシュした場合、git gcがクリーンアップしたものは、そのレポが失われますか?git clone/push/pullは、reposの正確な内容を反映していますか?

これらのいずれも発生しないと思いますが、このシナリオではドキュメントが見つかりません。

ほとんどのプロトコルでは、git cloneがクリーンなレポを示していると思われるsome informationが見つかりましたが、ファイルパスを使用してファイルを指定するとすべてがコピーされます。

The main reason to specify the file:// prefix is if you want a clean copy of the 
repository with extraneous references or objects left out. 

答えて

5

Gitクローンは、ダングリングオブジェクトをクローンしません。

プッシュでダングリングオブジェクトが発生し、リモートでgit gcが実行され、それらを削除しない限り、git gcはリモートrepoに影響を与えません。

、共有クローン(--shared又は-sフラグで指定される)またはローカルクローン(--local又は-l)であった

....ない限り。ドキュメントから:

ローカルマシン上にあるからリポジトリをクローン化する

-l、このフラグ はのコピーを作成することにより、通常の「gitの意識」のトランスポートメカニズムとクローン リポジトリをバイパスHEADとオブジェクトの下のすべてと がディレクトリを参照します。可能であれば、.git/objects /ディレクトリ配下のファイルは、ハードリンクされた です。 ソースリポジトリが/ path/to/repo構文で指定されている場合、これはデフォルトになっているので、 は本質的にオプションではありません。 のハードリンクの代わりに強制的にコピーするには( リポジトリのバックアップを作成しようとするのが望ましいかもしれませんが)、通常の "git aware"トランスポート メカニズム、--no-hardlinksを使用することができます。 へ

ハードリンク、自動的にセットアップ.git /オブジェクト/情報/交互に使用する代わりに、 の-s

クローンへのリポジトリがローカルマシン上にある、ソースリポジトリでオブジェクトを共有します。結果のリポジトリ は、それ自身のオブジェクトなしではじまります。

注:これは危険な操作です。 あなたはそれが何を理解していない限りそれを使用しないでください。この オプションとオプションを使用してリポジトリを複製し、ブランチを削除するか、または が既存のコミットを参照しないようにする他のgitコマンドをソースリポジトリで使用すると、一部の オブジェクトが参照されない(またはダングリングする)ことがあります。これらのオブジェクトは、 が正常なgit操作(git commitなど)によって削除されている可能性があります。 は自動的にgit gc --autoと呼ばれます。

したがって、git clone /path/to/repoを実行すると、オブジェクトをコピーしている(またはハードリンクを作成しています)ので、この場合ダングリングオブジェクトが表示されます。他のケースでは(gitプロトコル、ssh、ファイルプロトコルなどを使用して)、クローン内にぶら下がっているオブジェクトは決して得られません。輸送が起こるかについて、ここで

ルック - http://progit.org/book/ch9-6.html

+0

リモートサーバーからぶら下がってオブジェクトを引っ張るpull' 'gitのウィル? – Andy

+0

@Andy - ここを見てください - http://progit.org/book/ch9-6.html – manojlds

+0

ありがとうございましたmanojlds、少し昨日のことを少し読んで – Andy

関連する問題