12

--depthオプション withを使用して浅いサブモジュールを作成できることはわかっていますgit submodule update

ただし、実行すると

git submodule update --init --recursive --depth 1

いくつかのサブモジュールを含む私のプロジェクトでは、fatal: reference is not a tree. だから私はもう一度試しました

git submodule update --init --recursive --depth 100

これは正しく機能しましたが、深さを 1 に保ちたいと思います。

メインリポジトリが指すコミットではなく、サブモジュールの最新のコミットをプルするように思えます--depth 1。それが、指摘されたものを含むコミットのより長いリストをプルしたため、100に設定すると問題が解決した理由です。

残念ながら、その場合は、最新の 100 件のコミットに必要なコミットが含まれているかどうか、通常は確認できません。

サブモジュールを含む浅いクローンの最新のものではなく、指定されたコミットを使用するようにgitに指示するにはどうすればよいですか?

Windowsでgit 1.9.4を使用しています。

4

1 に答える 1

7

git fetch残念ながら、特定のコミット ID のみを使用する方法はないようです。あるなら本当に知りたいです。ただし、私はあなたの問題に2つの異なる方法で対処しました。1つは、可能であれば、リモートリポジトリに、必要なコミットを指すタグまたはブランチを作成することです。たとえば、「ref」と呼びます。このようにして、リモート参照を取得でき--depth、最新のヒントではなく、それに適用されます。私がする代わりにgit submodule update --init

git submodule init
git clone --depth 1 -b ref --separate-git-dir .git/modules/sub/ repository sub

ここで、「サブ」はサブモジュールの名前とパスです(簡単にするために、それらは同じであるとしましょう)

もう 1 つの方法は、リモート リポジトリにタグやブランチを作成できない場合、必要なコミットをループで検索することです。

git submodule init
id=$(git submodule status|sed -ne 's/.\([a-z0-9]*\) sub.*/\1/p'
git clone --depth 1 --separate-git-dir -n .git/modules/sub/ repository sub    
cd sub
while ! git rev-list $id ; do
    git fetch --depth $((i+=1))
done
git checkout $id

一度に複数のコミットをインクリメントして高速化することもできますが、必要なコミットよりも前のコミットになる可能性があります。

于 2014-12-12T13:48:44.923 に答える