質問
GitからPerforceにチームとソースを移行するタスクがあり、Git履歴をP4に移行する方法についてのアイデアを探しています。
私はマスターブランチのみを動かして幸せです。しかし、それでも問題があることが証明されています。
素晴らしいGit-P4ツールを使用しています。 P4ワークスペースに目的地エリアを作成し、使用します git p4 clone //depot/StuffFromGit
Git-P4で追跡を開始します。 Git Repositoryのすべての変更をGit-P4クローンに移します。それでは私はできます git p4 submit
そして、すべての変更はP4にプッシュされます。
Gitの履歴がこのように見えるとき、それはうまく機能します、素敵で線形:
A---B---C---D
問題は、プロジェクトに取り組んでいる複数の人々に伴います。彼らがマスターに取り組んでいるにもかかわらず、それはまだ分割されて合併する枝を作成します。それでも、git-p4はこれを勇敢に処理します:
A---B---C---E
\--D--/
Git P4はOKを横断し、ABCDEを順番にコミットします(または、いずれかの人の歴史を最初に)。
問題は、たとえば、CとDの両方が同じファイルを変更し、Eが本質的なものから豊かなマージである場合に発生します。 git p4 rebase
ここで失敗します。それはコミットを巻き戻しますが、再生中に最初にCを適用し、次にDを試みて競合を見つけます。その後、停止し、合併するように頼みます。さて、Eにはマージが含まれていますが、それは私に手でマージするように頼んでいます! 「git p4 submit」は同様の方法で失敗しますが、今ではP4が事前マージの変更を拒否しています。
Using index info to reconstruct a base tree... Falling back to patching base and 3-way merge... Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp Failed to merge in the changes. Patch failed at 0005 Changing main
だから今、私は立ち往生しています。 GITの履歴を消毒したり、Git-P4にそれを理解してもらう方法はありますか?合併がそこにあるのでイライラします。
私が持っていた考え:
- gitフィルターブランチを使用して、競合するファイルに関するすべての言及を削除します。多くのファイルの変更が欠落していますが、歴史のコメントを引き渡します。歴史に約3000のコミットがあったので、私はすべてのキー(ビジー)ファイルの履歴をすべて削除することになりました。フィルター処理されたファイルのインポートの最後に、頭の最終的なコミットを行うことにより、欠落しているファイルを戻します。
- 歴史を捨て、頭の単一のP4コミットを行います(シンプルだが悲しい)。
- P4に移動しない:私はそのアイデアをできるだけ長く働いてきました。
どれも本当に素晴らしいものではありません。 「GT P4 Rebase」または「GIT P4 Submit sucting」のgit方法に関するアイデアはありますか?
解決
「ちょうど古い歴史を捨てる」というオプションは、聞こえるほど悪くはありません。古いものを掘り下げる必要がある場合に備えて、Git Repoを永遠に並べるだけです。残念ながら、SVNやP4などの古いスタイルの線形システムにおけるGitの歴史に関する複雑な見方を表す方法はありません。
古い歴史を振り返る主な理由は、「Git Anonotate」のようなものです(P4にも同様のツールがあると思います)。それがあなたが望むすべてであるならば、あなたが本当にやりたいことは、あなたのすべてのマージが彼らの両親の一人だけにたった1人にしかすることです(彼らはマージではなく単一のコミットのように見えます)。これは、SVNとP4が独自の歴史モデルに記録したであろうもののようなものであり、マージは線形ストリームでの単一のコミットのように見えます。おそらく、Git-Filter-Branchなどでこれを行うことができます。もちろん、これはサブブランチで起こったすべての歴史を失うでしょう...しかし、P4ユーザーはその情報を持っていないことに慣れています。
他のヒント
ツール「テーラー」をチェックアウトしましたか?さまざまなVCを同期するためのビルド:ES。 Perforce-Supportがあるはずです。
サイドノートとして、私の最初の反応は決定に真剣に疑問を呈することですが、あなたはすでにそれをやったと思います。
Tortoise SVNを試してから、単一のブランチアップデートを検討してHGを試してみるか、移行を言うことができると思います。すべてのダンプがセーフサイドにあるようにクローン化されていることを確認してください。幸運を !