1. ホーム
  2. git

[解決済み] git サブモジュールのコンフリクトを管理するにはどうしたらいいですか?

2022-04-25 12:15:52

質問

いくつかのサブモジュールを参照する git スーパープロジェクトがあり、プロジェクトの他のメンバーが作業するためのワークフローを固定化しようとしています。

この質問では、私のスーパープロジェクトの名称を supery で、サブモジュールの名前は subby . (これは私がやろうとしていることを単純化したものです。私は実際にはバージョンにブランチを使用していませんが、質問としてレイアウトするのが最も簡単だと思いました)。

私のmasterブランチの supery は、タグ v1.0 gitプロジェクトの subby サブモジュールとして参照されます。のブランチは supery という one.one というタグを指すようにサブモジュールの参照を変更しました。 v1.1subby .

これらの各ブランチの中では問題なく作業できるのですが、もし私が one.one ブランチからの変更で master ブランチでいくつかのコンフリクトが発生し、それをどのように解決したらよいのかわかりません。

基本的には git pull . master の中で subby ブランチでは、追加のサブモジュールを作成するようです。

プル/マージの前に、私は希望するレスポンスを git submodule から one.one のブランチを作成します。

$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)

しかし、プルした後、次のように実行すると、追加のサブモジュールが追加されます。 git submodule :

$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e
Automatic merge failed; fix conflicts and then commit the results.

$ git submodule
qw3rty...321e subby (v1.0)
asdfgh...456d subby (v1.1)
zxcvbn...7890 subby (v1.1~1)

不要なサブモジュールの参照を削除/無視し、コンフリクトと変更をコミットするにはどうすればよいですか?あるいは、私のオリジナルの git pull を使えば、サブモジュールを無視することができますか?

解決方法は?

そのようなエラーは見たことがありません。しかし、あなたが遭遇しているトラブルについて推測することができます。どうやら masterone.one の枝 supery には異なる参照元が含まれています。 subby サブモジュールの変更をマージする際に master git はどの参照元が - v1.0 または v1.1 - が保持され、追跡される必要があります。 one.one の分岐になります。 supery .

その場合は、必要な参照を選択し、その変更をコミットして競合を解決する必要があります。これはまさに、あなたが リセット コマンドを使用します。

これは、あるサブモジュールの異なるバージョンをプロジェクトの異なるブランチで追跡するという、やっかいな側面があります。しかし、サブモジュールの参照は、プロジェクトの他のコンポーネントと同じです。もし二つの異なるブランチが、連続したマージの後でも同じサブモジュール ref を追跡し続けるなら、git は将来のマージでマージの衝突を起こすことなくそのパターンを解決できるはずです。一方、サブモジュール参照が頻繁に入れ替わるような場合は、多くの衝突を解決しなければならないかもしれません。