16

チームとソースを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'を動作させる方法に関するアイデアはありますか?

4

4 に答える 4

7

「古い履歴を破棄する」というオプションは、思ったほど悪くはありません。誰かが古いものを掘り下げる必要がある場合に備えて、gitリポジトリを永久に並べておくことができます。残念ながら、svnやp4のような古いスタイルの線形システムでgitの複雑な履歴ビューを表現する方法はありません。

古い歴史を振り返る主な理由は、「git annotate」のようなものです(p4にも同様のツールがあると思います)。それがあなたが望むすべてであるならば、多分あなたが本当にしたいことはあなたのすべてのマージコミットを彼らの親の1つだけに押しつぶすことです(それで彼らはマージの代わりに単一のコミットのように見えます)。これは、svnとp4が独自の履歴モデルに記録したものに似ており、マージは線形ストリームの単一のコミットのように見えます。おそらくgit-filter-branchなどでこれを行うことができます。もちろん、これはサブブランチで発生したすべての履歴を失います...しかし、p4ユーザーはその情報を持っていないことに慣れています。

于 2011-02-05T19:37:49.743 に答える
2

ツール「テーラー」をチェックしましたか?異なるVCS:esを同期するために構築されています。Perforceサポートがあるはずです。

ちなみに、私の最初の反応は、決定に真剣に疑問を投げかけることですが、あなたはすでにそれを行っていると思います。

于 2011-02-19T20:30:33.483 に答える
0

Perforce Fusionを見たことがありますか?

私は約7〜8年前に同様の質問をしましたが、基本的にすべての上級開発者を集めて、このアイデアを推進しているマネージャーに、彼はロッカーから離れていると伝えました。

そうは言っても-https://www.perforce.com/perforce/r15.3/manuals/git-fusion/

于 2021-01-06T09:26:21.280 に答える
-2

Tortoise SVNを試してから、単一ブランチの更新を考慮してHgを試してみるか、移行と言うことができると思います。安全のために、すべてのダンプのクローンが作成されていることを確認してください。幸運を !

于 2010-12-22T15:12:13.040 に答える