1

単一のサブモジュール(repo2)を含むgitプロジェクト(repo1)があります。私が達成したいのは、サブモジュールの古いコミット(HEAD-3など)を使用してプロジェクトにタグを付けることです。

サブモジュールをチェックアウトして必要なコミットを試みましたが、プロジェクトでコミットすると適切なリビジョンが追跡されないため、チェックアウトが間違っています。サブモジュールを必要なコミットにリセットし、プロジェクトをコミットしてから、サブモジュールをプルしてプロジェクトをコミットしようとしましたが、これも間違っています。

$ git submodule update 
fatal: reference is not a tree: 2c3d1a5936aa9469ecc1442cd4b101e1bbd3aada
Unable to checkout '2c3d1a5936aa9469ecc1442cd4b101e1bbd3aada' in submodule path 'repo2'

最良の、そして最も優れた手順は何でしょうか?


Gitサブモジュールのhead'参照はツリーではありません'エラーは答えの始まりを示しますが、それでもrepo2のHEADをリンクし、選択されたコミットはリンクしません...

タグが完成したとすると、repo1にrepo2をタグの適切な状態に設定するように指示するにはどうすればよいですか。

 git checkout 0.0.1

gitサブモジュールの更新によると、単純な

 git submodule update

十分なはずです。サブモジュールを指定されたコミットにチェックアウトしません。なんで ?それは...バグですか?

4

1 に答える 1

2

この質問は非常に難しいように思えますが、そうではありません。

サブモジュール (repo2) を含む git リポジトリ (repo1) から始まる完全な手順。

$ git clone git@git:myproject.git
$ cd myproject
$ git submodule update --init

ここで、repo2 の古いコミットにタグを付ける必要がある場合は、次のようにします。

$ cd repo2
$ git checkout SOMECOMMITHASHORTAGORELSE
$ cd ..
$ git add repo2

addgitlinkrepo2のコミットハッシュに更新することが重要です

$ git commit repo2
$ git tag TAGNUMBER
$ git push (--tags if you want to push the tag also)

さて、なぜうまくいかなかったのsubmodule updateですか?実際には、repo1 のタグに関連付けられたコミットをチェックアウトしようとし続けました。

$ git checkout TAGNUMBER
$ git submodule update

これは、(自分へのメモ)私がそれを忘れたという理由だけで機能しませんでした:

コミット後にタグ付けする必要があります

ですから、ここには本当のトリックはありませんでした。私たちの何人かに再び起こるかもしれない小さな落とし穴にすぎません。うまくいけば、彼らはここで終わるでしょう.

于 2011-05-16T13:29:21.253 に答える