2

私たちの状況は次のとおりです。

  • セキュリティ インフラストラクチャに変更されたストリーム A のコンテンツをメインにコピーしました。
  • 次に、コンテンツをストリーム B にマージしました。
  • 次に、ストリーム B に関連のない変更を加えました。
  • その後、ストリーム A からの変更が思ったほど機能していないことに気付き、安全のために取り消すことにしました。
  • ストリーム A からの更新を含むリビジョンを取り消しました。
  • これにより、一部のファイルが削除され、他のファイルが変更されました。
  • ストリーム A を変更せずにテストしたところ、すべてが機能しました。
  • 一方、開発者はストリーム A にいくつかの小さな変更を加え、ストリーム A をストリーム B にマージする準備が整いました。

問題は、メインにコピーすることはできますが、これらの変更をストリーム B に戻すことができないことです。これは、「ストリーム A を削除する」変更の方が新しいためです。新しい変更だけでなく、以前にバックアウトしたすべての変更を に戻します。

すべてを手動でコピーまたは手動でマージするという多大な手作業に頼ることなく、これを行う方法はありますか?

ありがとう。

4

4 に答える 4

1

バックアウトしたチェンジリストはいつでもバックアウトできます。このようにして、最初の変更が行われたポイントに到達します。

すべてのファイル履歴が保存されるため、すべての変更はあなたのような状況で簡単に回復できるはずです.

于 2012-09-17T18:25:45.943 に答える
1

私は Perforce ストリームに詳しくありませんが、伝統的に Perforce にはバックアウトの特別な概念はありません。変更を取り消すと、単純に逆チェンジセットが作成されます。

したがって、バックアウトされた変更を再適用するには、バックアウトをバックアウトするだけでよいはずです。

于 2012-09-16T00:04:23.230 に答える
1

p4 changes -i @n,nn は、元に戻した A の変更を含む main から B へのマージのチェンジリスト番号です。これにより、変更のリストが得られます。最初のものは n 自体であり、残りは B に再マージする必要がある main の変更です。ただし、「p4 merge」を使用して再マージすることはできません。 、代わりに「p4 integ -f」を使用する必要があります。

たとえば、n が 1000 だとします。

p4 changes -i @1000,1000
Change 1000 ...
Change 994  ...
Change 991  ...
Change 866  ...

これは、メインから B に 866、991、および 994 を再マージする必要があることを示しています。チェリーピッキングをしていない場合、これらはメインの連続した変更であり、866 から 994 までをリビジョン範囲として使用できると想定できます。 :

p4 integ -f -r -S //stream/B @866,994
p4 resolve
p4 submit

(この integ コマンドの例では、//stream/main が //stream/B の親であると想定しています。もちろん、これを行うには //stream/B ワークスペースにいる必要があります。最良の結果を得るには、おそらく統合を実行する前に、ワークスペースが完全に同期され、開いているファイルがないことを確認してください。)

于 2012-09-13T08:54:22.563 に答える
0

最新の変更は削除であるため、削除用に既に開かれているため、ファイルを再度追加することはありません。そのファイルに対して p4 revert を実行してから、p4 add を実行すると、うまくいきました。

于 2013-07-23T20:57:33.477 に答える