チームとソースをgitからPerforceに移行するタスクがあり、gitの履歴をp4に移動する方法についてのアイデアを探しています。
マスターブランチのみを移動させていただきます。しかし、それでも問題があります。
私は素晴らしいgit-p4ツールを使用しています。p4ワークスペースに宛先領域を作成し、それを使用git p4 clone //depot/StuffFromGit
してgit-p4で追跡を開始します。gitリポジトリのすべての変更をgit-p4クローンに移植します。そうgit p4 submit
すれば、すべての変更がp4にプッシュされます。
gitの履歴が次のようになり、素晴らしく線形になると、うまく機能します。
A---B---C---D
問題は、プロジェクトに複数の人が取り組んでいることにあります。彼らはマスターに取り組んでいますが、それでも分割してマージするブランチを作成します。それでも、git-p4はこれを勇敢に処理します:
A---B---C---E
\--D--/
git p4はOKをトラバースし、ABCDEを順番にコミットします(またはABDCE、どちらかの人の履歴を最初に)。
問題は、たとえば、CとDの両方が同じファイルを変更し、Eが真の正直なマージである場合に発生します。git p4 rebase
ここで失敗します。コミットを巻き戻しますが、再生中に最初にCを適用し、次にDを試行して競合を見つけます。その後、マージを要求して停止します。ええと、Eにはマージが含まれていますが、手動でマージするように求められています。「gitp4submit」も同様の方法で失敗しますが、マージ前の変更を拒否するのはp4だけです。
インデックス情報を使用してベースツリーを再構築します。 パッチ適用ベースと3方向マージにフォールバックします... main.cppの自動マージ CONFLICT(コンテンツ):main.cppで競合をマージします 変更のマージに失敗しました。 0005でパッチが失敗しましたメインの変更
だから今私は立ち往生しています。gitの履歴をサニタイズする方法や、git-p4にそれを理解させる方法はありますか?マージが行われているのでイライラします。
私が持っていた考え:
- git filter-branchを使用して、競合するファイルに関するすべての言及を削除します。多くのファイル変更が欠落していますが、履歴コメントが表示されます。履歴に約3000のコミットがあるので、キー(ビジー)ファイルの履歴をすべて削除することになります。フィルタされたファイルのインポートの最後に、HEADの最後のコミットを実行して、不足しているファイルを追加し直します。
- 履歴をダンプし、HEADのp4コミットを1回実行します(単純ですが悲しい)。
- p4に移行しないでください:私はそのアイデアを可能な限り長く取り組んできました。
どれも本当に素晴らしいものではありません。'gtp4rebase'または'gitp4 submit'を動作させる方法に関するアイデアはありますか?