私はgit-svnを使用して2台のマシン(MacとWindows)で作業しています。私のリモートリポジトリはsvnです。私はMacをマスターリポジトリとして使用し、Windowsをスレーブとして使用しています。したがって、すべてのgit-svn操作はMacで実行され、WindowsマシンはMacで「gitpull」または「gitpush」のみを実行します。
次のようなワークフローでは、何百もの競合を解決する必要がある状況に陥ることがよくあります。
- 私は主にMacで作業し、次にWindowsに「gitpull」させてテストを行います。
- 時々、Windowsで少し作業して、機能ブランチにコミットする必要があります。
- 次に、「gitpushorigin」を実行してブランチをMacにプッシュバックします。
- 次に、Macで「gitmergewindows_branch」をマスターブランチに入れます。
- 最後に、「gitsvnrebase」と「gitsvndcommit」を実行します。
ステップ5で、ここに衝突が来ます!そして、私はかつて、「git mergetool」、「git rebase --continue」、「git rebase --skip」、および「git rebase --abort」ワークフローを使用して、すべての競合を3時間かけて調べました。運が良ければ、それらすべてを理解することができます。しかし、場合によっては、それらの数が多すぎて、さらに悪いことに、リベースは履歴をトラバースするときに同じ一連の競合を繰り返し実行します(gitはファイルではなく変更のみを認識します)。最終的に私は混乱し、それらのいくつかを誤って解決し、より大きな悪夢を引き起こします。私が学んだいくつかのスクリプトは、「gitaccept-ours」や「gitaccept-theirs」のようなことをするのに役立ちますが、これは削除されたファイルを含む履歴ではうまく機能せず、繰り返し受け入れる必要があります。
これは、分岐とマージのワークフローを使用することを本当に躊躇し始めるほどの悪夢でした。問題は、なぜこれほど多くの衝突が発生する可能性があるのか正確にはわからないということです。しかし、そのような競合を防ぐか、簡単にバッチ解決するのに役立つ推奨ワークフローまたはプラクティスがあれば、それは素晴らしいことです。
助けてくれてありがとう!