私たちは設計に取り組んでおり、そのためにメイン ブランチにクラスのスケルトンを作成しました。現在、コーディングを開始しており、そのために新しいブランチを取得しました。そのため、メイン ブランチにあるすべての新しいファイルを新しいブランチに移動できるとよいでしょう。ただし、まだチェックインできません。では、チェックアウトされた変更リストを統合することは可能ですか? ありがとう。
6 に答える
Perforce サポート Web サイトでは、これを行う方法について説明しています: Perforce Knowledge Base: Branching work in progress。8 つの異なるコマンドを実行する必要のない 1 つのステップであれば、もっと良いでしょう。
リリース 2013.1 以降、進行中の作業を分岐する方法はshelve
、作業とunshelve
分岐での作業です。詳細に:
未処理の変更を棚上げします。
$ p4 shelve ... Change 182535 created with 10 open file(s). Shelving files for change 182535. edit //info.ravenbrook.com/project/mps/master/code/arenavm.c#26 # etc.
ブランチでそれらをアンシェルブします (
-b
ブランチ仕様を介してファイル名をマップするオプションを使用):$ p4 unshelve -b mps/branch/2013-06-05/diag -s 182535 ... //info.ravenbrook.com/project/mps/branch/2013-06-05/diag/code/arenavm.c - must resolve //info.ravenbrook.com/project/mps/master/code/arenavm.c@=182535 before submitting # etc.
から生じるマージを解決し
unshelve
、 を使用p4 resolve -as
して「安全な」ものをすばやく実行し、残りをp4 resolve
通常どおりに実行します。$ p4 resolve -as //gdr-peewit/info.ravenbrook.com/project/mps/branch/2013-06-05/diag/code/arenavm.c - copy from //info.ravenbrook.com/project/mps/master/code/arenavm.c # etc. $ p4 resolve No file(s) to resolve.
(出力例は、私が今実行した実際のユースケースからのものです。)
あまり。
もちろん、新しいブランチで編集用にファイルを開き、変更されたファイルをメイン ブランチのワークスペースから新しいブランチのワークスペースに手動でコピーすることもできます。ファイル数が少ない場合は、これがおそらく最も簡単な方法です。
多数のファイルが関係する場合に便利なスクリプトをいくつか紹介します。たとえば、P4Shelfスクリプトを使用すると、変更したすべてのファイルのアーカイブを作成し、後でそれらのファイルを任意のブランチで自動的に開き、変更が復元されます。
また、 Jim Tilander による Perforce 用の他の気の利いたスクリプトもチェックしてください。
perforce内でそれを行う方法を見つけたことはありませんが、少なくとも部分的に自動化できます。
通常、そのようなことをしなければならないときは、移動先のブランチ内のファイルをチェックアウトしてから、WinMergeを使用してブランチを比較し、変更をコピーします。それが完了したら、元のブランチの変更を元に戻し、新しいブランチにチェックインできます。
これは最善の解決策ではありません (新しいブランチでのファイルの自動チェックアウト/追加/削除はありません) が、私が思いついた最速の方法でした。
上記のGareth Reesの答えを簡単に言い換えると、
p4 unshelve -b target_branchspec -s changelist
:)
簡単な答えは - いいえ、できません。残念ながら、Perforce のドキュメントをざっと読んだだけでは、これに対する適切な引用が思いつきませんでしたが、私の経験では、Perforce サーバーの下から敷物を引き出そうとすると、変更が失われ、不幸なままになります。キャンピングカー。
バックアップを作成し、新しいブランチに新しい作業領域を作成し、おそらく Herms の回答で概説されている差分/マージ戦略を使用して、変更を再適用します。