質問

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を試してみるか、移行を言うことができると思います。すべてのダンプがセーフサイドにあるようにクローン化されていることを確認してください。幸運を !

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top