46

親コミットを実際にチェックアウトする以外に、親クローンのコミット ID に基づいてサブモジュールの SHA-1 コミット ID を特定する方法はありますか? 現在関連付けられている SHA-1 をgit submodule.

次に例を示します。

  • foo先月数回変更された単一のサブモジュールを持つクローンがあります。
  • 親クローンに、数週間経過した というタグがありreleased-1.2.3ます。fooこのタグ付けされたコミットに関連付けられた SHA-1 が何であったかを知りたいです。
  • 単純にチェックアウトしreleased-1.2.3て使用することもできますが、スクリプトを作成したいので、作業ツリーに影響を与えgit submoduleにこれを行う方法があるかどうか疑問に思っています。

親リポジトリ内の 2 つのコミット間でサブモジュール内のすべての変更に対して「差分」を実行するスクリプトを作成したいため、これを実行したいと考えていますfoo。 "

4

5 に答える 5

57

git-ls-tree特定のコミット中に特定のパスの SHA-1 ID が何であったかを確認するために使用できます。

$ git ls-tree released-1.2.3 foo
160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398  foo

(私の最初の考えは でしたがgit show released-1.2.3 foo、それは「fatal: bad object」で失敗します。)

出力をスクリプト化しているため、おそらく SHA-1 ID だけを取得する必要があります。たとえば、次のようになります。

$ git ls-tree released-1.2.3 foo | awk '{print $3}'
c0f065504bb0e8cfa2b107e975bb9dc5a34b0398

また: git に関するスクリプトを作成するときは、マニュアルに記載されているように、配管コマンドに固執するようにしてください。それらはより安定したインターフェイスを備えていますが、より使い慣れた「磁器」コマンドは互換性のない方法で変更される可能性があります.

于 2010-10-24T20:03:50.860 に答える
2

私は1つの有望な道を見つけました:

$ git log --raw <since>..<until> --submodule -- <path/to/submodule>

--raw オプションを使用すると、サブモジュールの関連するコミットに対応する (省略された) SHA-1 ID が出力されます。残念ながら、出力は非常に冗長であり、スクリプトで処理するには多少の作業が必要です。

私が本当に必要としているのは、親コミット ID を指定すると、そのコミット前のサブモジュールへの最新の変更を提供する git 機能です。つまり、実際にその親コミットをチェックアウトする場合、どのサブモジュール SHA-1 'git submodule update' がチェックアウトするでしょうか。

于 2010-10-21T02:41:00.680 に答える
0

git slave (gits) があなたの答えかもしれません。

http://gitslave.sourceforge.net/

しかし、プレーンな git でもこれを行うことができます。簡単ではありません。

于 2010-10-21T02:41:52.177 に答える