私はいくつかのサブモジュールを参照するgitスーパープロジェクトを持っており、残りのプロジェクトメンバーが内部で作業するためのワークフローをロックダウンしようとしています。gitサブモジュールとの競合をどのように管理できますか?
この質問の場合、私のスーパープロジェクトはsupery
と呼ばれ、サブモジュールはsubby
と呼ばれます。 (その後、私がやろうとしていることの簡略化です...実際にはバージョンのブランチを使用していませんが、質問としてレイアウトするのが最も簡単だと思いました)
supery
はサブプロジェクトとしてsubby
というgitプロジェクトのタグv1.0
を持っています。 supery
の支店はone.one
と呼ばれ、v1.1
のsubby
というタグを指すようにサブモジュールの参照を変更しました。
私はこれらの各ブランチ内で問題なく作業できますが、one.one
ブランチをmaster
ブランチからの変更で更新しようとすると、いくつかの競合が発生し、解決方法がありません。
基本的にgit pull . master
を実行した後に、subby
ブランチにある場合、追加のサブモジュールを作成するように見えます。
はプル/マージする前に、私はone.one
ブランチからgit submodule
から所望の応答を得る:
$ 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
で使用できるパラメータがあり、サブモジュールを無視しますか?
質問にいくつかの光をあててくれてありがとう。 これは今や私には分かりやすくなり、リセットコマンドは上記の私の状況では完全に機能します。 しかし、マスターブランチからサブモジュールrefを受け取り、現在のブランチのサブモジュールにrefを渡すコマンドは何でしょうか? 私は通常の競合を処理する方法を知っていますが、Webを3日間精算した後、rm -r以外のコード例は1つも見つかりません。私はそこに存在しない例がある理由を考え始めています。サブモジュールはこれまでスーパープロジェクトから抽象化されており、すべての移行を管理する必要があります。やっと! – Tyler
!答え!私は 'git status'では' ../ Mono.Cecil'を追加しましたが、 'git add'と' git rm'は 'Mono.Cecil:merge、pathspec 'Mono.Cecil /'と一致しませんでしたこれは単に空のフォルダであり、gitは実際にファイルを処理するだけなので、「files」と表示されます。 'git checkout'は私に' Mono.Cecil:エラーをマージする必要があります。エラー:あなたは現在のインデックスを最初に解決する必要があります.'、 'git submodule update'は' Skipped unmerged submodule Mono.Cecil'と 'git checkout master Mono.Cecil' FINALLYそれを固定した。基本的な問題: 'git status'の提案が間違っているので、ブランチを選び、' checkout'を使ってフォルダのコピーを取ってください! – IBBoard
@BBoardのコマンドはこの状況を助けました。私は 'git checkout --ours SUBMOD'と' git add SUBMOD'などを試しましたが、最後に 'git checkout master SUBMOD'を実行すると競合が修正されました。 このコメントは答えではなく、コメントでなければなりません。:) –