2009-12-11 16 views
13

コードベースのperforceにブランチを作成したとします。ここで分岐スペックです:動いたファイルをperforceに統合

//depot/code/main/... //depot/code/branch/... 

次に、ブランチに、私が分岐ファイルA.TXTを動かすと言う - >今

p4 integrate //depot/code/branch/a.txt //depot/code/branch/b.txt 
p4 delete //depot/code/branch/a.txt 

を使用してB.TXT、のは、いくつかの変更がに行われているとしましょうメインのa.txtを支店のb.txtに統合したい

元の分岐仕様を使用して統合しようとすると、mainのa.txtの変更がbに反映されません.txt - 名前が変更されたファイルにメイン表示に加えられた変更を行う方法はありますか?

ブランチの仕様はかなり大きく(数百の変更)、かなりの数のファイルがブランチで名前が変更されていますので、私はこれを行う自動化された方法を持っていたいと思います。ここに何かを明確にすることができたら教えてください - ホワイトボードを持つのに役立ちます)

ありがとう! サム

答えて

3

PERFORCE 2009.1には適切な名前が付けられています。これはおそらく将来の名前変更にのみ役立ちます。特に、Perforce 2009.1 release notesを参照してください:

#177023 * ** 
    The new 'p4 move' command allows for better support for 
    renaming files. A file must be already opened for 'edit' 
    or 'add' in order to be moved. Moved files can be synced, 
    resolved and diffed against the repository just like files 
    opened for 'edit'. See 'p4 help move' for more info. 

あなたは枝の仕様に名前変更を追加することができます。ブランチの仕様がさらに長く複雑になっても、少なくとも統合は自動的に行われます。

+3

私が理解している限り、p4の利点は、アトミック・チェンジリスト内のファイルをきれいに移動して編集できることです。チェンジリストがさらに同期すると、ソースからターゲットへの変更が反映されることを確認します。 *チェックインした後は、ブランチ、編集、削除アクションと全く同じ動作をしますが、それらは分離不可能です。あるブランチから別のブランチへの移動を統合することは役に立ちません。他のソース管理システムでは、「ファーストクラスの名前変更」と呼ばれるものではありません。 – Weeble

+0

私はあなたが正しいかもしれないと思う - それはそのように見える - しかし、データベースに記録されたメタデータでは、将来、適切な処理が追加される可能性がある?以前はブランチとリネームを区別することは不可能でした。 –

+0

いいえ、適切な 'p4 move'があっても、統合はうまくいかないでしょう。 –

1

私はそう信じません。直接p4 renameが存在しないので、統合して削除する必要があります。これを実行すると、別のブランチからの統合が適切なファイルに移動しなくなります。少なくともそれは私の経験でした。

+0

ありがとう - 実際にどのコマンドが発行されたかを示すために更新されました - 実際には、私はそれを行うためにp4vを使用しました。 – SamBeran

+0

私は2009.1が適切な名前を付け加えたと信じています - これは歴史に役立ちません –

3

私が知っている唯一の方法は、Perforceがこれをあなたのために処理することです。元の古いファイルをブランチの新しいファイルにマップするためにブランチ仕様を使用することです。最近のPERFORCEバージョンでは新しい移動コマンドで変更されたかもしれませんが、経験したことはありません。

+0

しかし、これはあなたが再帰的に名前を変更し、ディレクトリ全体を扱うときに機能しますか?すべてのファイルの分岐仕様を1つずつ作成する必要がありますか?ディレクトリにブランチ・スペックを作っているようには見えません。 – Calmarius

+0

@カルマリウス、あなたがディレクトリとファイルをディレクトリの名前を変更する場合、両方が必要です。ディレクトリだけが変更された場合は、ディレクトリだけで変更できます。名前が一貫して変更された場合は、ワイルドカードを使用して仕様を簡略化することができます。 –

2

p4 fstatの出力を使用して、移動したファイルを処理するためのブランチ・スペックの作成をスクリプト化できます。

出発点として、以下を使用します。

ROOT_PATH="//depot/books/..." 
FIRST_CHANGE=91212 

p4 fstat -Os -T headChange -F "headAction=move/* headChange>$FIRST_CHANGE" $ROOT_PATH|grep headChange | sort -u|while read DUMMY1 DUMMY2 change; do p4 describe $change; done|grep "moved from"|sed 's/\.\.\./\t/g; s/\#[0-9]*//g; s/ moved from//g;' 

これは//デポ/書籍/ ...私たちのために変更91212以降

に移動された内のすべてのファイルを検索します、これの出力は

//depot/books/bar.txt //depot/books/foo.txt

ブランチ仕様を作り上げるためにそれを使用してのように見えます。

10

'-3'スイッチを追加すると、新しいエンジンを使用して統合することができます。これは、以前に 'p4 move'で移動したターゲットファイルを検出し、自動的に 'retarget'して の移動操作に従います。

p4 integrate -3 //depot/code/main/... //depot/code/branch/... 

は//depot/code/branch/b.txtする//depot/code/main/a.txtで変更を統合します。

これは、現在の2010.2リリースでの 'アンドック'機能ですが、今後の2011.1でのデフォルトの動作になります。

+0

+1よく目撃された!それはトリックです。 –

関連する問題