私は Git-Svn を使用して職場で Svn リポジトリとやり取りしていますが、私の人生で競合を効果的に解決する方法を見つけることができないようです。このトピックに関する他の質問を読みましたが、明らかに、私は常にある種の無限ループに陥っているように見えるため、さらに改善する必要があります。リベースし、mergetool (meld) を使用して競合を解決し、すべてが終了したら、dcommit を実行しようとすると、コミット エラー中にマージ競合が発生します。
これが重複しているように感じるのは承知していますが、フラストレーションから、私がこれについてどのように行っているかについて非常に具体的な詳細を示して、もう一度質問させていただきます。
私のセットアップ:
リモート ブランチ (svn/trunk)、ローカル ブランチ (trunk)、および通常作業する別のローカル ブランチ (working-trunk) があります。トランクは svn/trunk からチェックアウトされ、working-trunk はトランクからチェックアウトされました。
これが私がやってきたことです:
- 私のトランクで、
git svn rebase
(競合を返します) git mergetool
- [そのファイルの競合を解決する]
- マージされたファイルを meld から保存し、meld を閉じます。
git add .
git rebase --continue
- 【すすぐ、繰り返す】
- を使用したかどうかを尋ねるメッセージが表示され
git add
たら、git rebase --skip
報告されたすべての変更の最後に到達すると、すべてが停止し、この時点で何をすべきかわからなくなる可能性があります。Git はコミットするものが何も表示されず、トランクに戻ったように見えます。Git では dcommit が許可されますが、その後すぐにリベースを試みると、解決したばかりの競合を再解決することになります。
ここには明らかに欠けている重要な部分がありますが、それが見えないだけで、多くの問題とフラストレーションを引き起こしています. Git ではマージは簡単かもしれませんが、そうではないことは確かです。
ありがとう。
更新:それが問題の一部 (またはすべて) である場合に備えて、私のワークフローを説明するために簡単な更新を捨てたかっただけです。
まず、svn/
プレフィックスを使用してリポジトリを複製すると、svn/trunk
リモート ブランチが作成されます。とすれば:
- リモートを
git co -b trunk svn/trunk
ローカルブランチにチェックアウトします。 - ローカルトランクが常にリモート トランクをミラーリングできるように、もう 1 段階の分離を
git co -b working-trunk
作成するために使用する作業ブランチを作成します。 - デフォルトのマスター ブランチを削除します (svn を使用する場合、「マスター」よりも「トランク」の観点から考える方が簡単だと思います)。
すべてのブランチを取得したら、通常のワークフローは次のようになります。
- working -trunkで、変更を加えてコミットします。
- 私
git co trunk
とgit svn rebase
. - 新しいコードがリベースされたと仮定すると、I
git rebase working-trunk
. git co working-trunk
git merge trunk
git rebase trunk
git co trunk
git merge working-trunk
git svn dcommit
たくさんの手順があることはわかっていますが、それがここや他の場所で誰もが推奨していることです。私の致命的な欠陥はそのプロセスのどこかにあるのでしょうか?
再度、感謝します。