$GIT_DIR/shallow は、コミットオブジェクト名をリストし、それらがルートコミットであるかのように見せかけるようにGitに指示します(たとえば、 git log ` トラバーサルは表示後に停止します。 ` git fsck
は、「親」のラインにリストされているコミットが存在しない時は文句を言いません)。
各行には、オブジェクト名が1つだけ含まれています。 読み取られると、 commit_graft が作成されます。これは、ユーザーが提供したgraftsとの識別を容易にするために、 nr_parent < 0 を持ちます。
注意: shallow機能を簡単に変更して置換refsを使用することはできないことに注意してください。ルートコミットであっても、 mergetag
を含むコミットを置き換えることはできません。 ただし、このようなコミットはshallowにすることができます。 また、shallowしたすべてのコミットを明示的にリストする shallow
ファイルがあると、履歴を深める(deepen)など、shallow関連のことを たくさん 簡単に行うことができます。
fsck-objects はライブラリに依存してオブジェクトを読み取るため、shallowコミットを自動的に尊重します。
shallow機構全体ではいくつかの未完成のものがあります:
-
shallowレポにフェッチするときに、薄くない(non-thin)パックを強制する必要があるかもしれません(ATMでは薄くない(non-thin)パックが強制されます)。
-
shallowな上流は特別な取り扱いが必要です。 ある段階で、upload-packはshallowコミットを送信するかどうかを確認する必要があり、その情報を早期に送信する必要があります(または、クライアントがshallowリポジトリをサポートしていない場合は失敗します)。 このパッチシリーズでは、これはまったくサポートされていません。
-
開始時に $GIT_DIR/shallow をロックする代わりに、そのタイムスタンプだけが記録され、書き込みに関しては、mtimeが同じであるかどうかのチェックが実行され、そうでない場合は終了します。
-
「shallowレポへの push や shallowレポからのpush」がどのように動作するかは不明です。
-
あなたが履歴を深める(deepen)場合は、新しく保存された(ただし古い!)コミットのタグを取得する必要があります。 現在、これは機能しません。
shallowクローンを作成するには、 git-clone --depth 20 repo
を呼び出すことができます。 結果には、最大20の長さのコミットチェーンのみが含まれます。また、適切な $GIT_DIR/shallow を書き込みます。
あなたは git-fetch --depth 20 repo branch
を使用してshallowリポジトリを深めることができます。これにより、リポジトリからブランチがフェッチされますが、深さ20で停止し、 $GIT_DIR/shallow を更新します。
特別な深さ 2147483647(または0x7fffffff、符号付き32ビット整数に含めることができる最大の正の数)は、無限の深さを意味します。