2009-12-11 75 views
13

假設我在代碼庫的perforce中創建了一個分支。這裏是支規格:在perforce中集成移動的文件

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

然後,在分支,比方說我謹分支文件a.txt中 - > b.txt使用

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

現在,讓我們說一些變化來製造主要的a.txt我想集成到分支b.txt中

當我嘗試使用原始分支規範進行集成時,它並沒有反映出對main中的a.txt所做的更改.txt - 是否有任何方法讓主要的更改顯示在重命名的文件中?

分支規範是相當大的(數以百計的變化),並在分支中重命名了很多文件,所以我想有一個自動的方式來做到這一點。讓我知道如果我可以在這裏澄清任何事情 - 這將有助於有一個白板;)

謝謝! Sam

回答

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移動的* only *好處是您可以在單個原子更改列表中乾淨地移動和編輯文件,並且直到您檢入更改列表進一步同步將從源傳播更改到目標。 *在您檢入後,它的行爲與分支,編輯和刪除操作相同,只是它們是不可分割的。它不利於整合從一個分支到另一個分支的移動。在其他源控制系統中不是所謂的「頭等重命名」。 – Weeble 2010-02-16 11:58:00

+0

我認爲你可能是對的 - 它看起來就是這樣 - 儘管在數據庫中記錄元數據後,Perforce可能會在未來增加適當的處理?以前不可能將分支與重命名區分開來。 – 2010-02-16 12:33:21

+0

不,即使有適當的「p4移動」,集成也不會像應該那樣工作。 – 2012-11-19 16:58:43

1

我不這麼認爲。由於沒有直接p4 rename,所以您必須進行集成和刪除 - 一旦完成此操作,從另一個分支集成就不再轉到正確的文件。至少這是我的經歷。

+0

謝謝 - 已更新以顯示實際發佈的命令 - 實際上,我使用p4v來執行此操作。 – SamBeran 2009-12-11 20:58:13

+0

我相信2009.1增加了適當的重命名 - 這對歷史沒有幫助 – 2009-12-11 22:48:46

3

我知道讓Perforce爲您處理這個問題的唯一方法是使用分支規範將原始文件映射到分支中的新文件。最近的Perforce版本中新的移動命令可能已經改變了,但並不是我經歷過的。

+0

但是,當你遞歸重命名和整個目錄時,這是否工作?我是否需要爲所有文件逐個制定分支規範?看似在目錄上製作分支規範不起作用。 – Calmarius 2015-02-09 15:44:46

+0

@Calmarius,如果你重命名目錄和目錄中的文件,你需要兩個。如果只更改目錄,則可以只使用目錄。如果名稱以一致的方式更改,則可以使用通配符來簡化規範。 – 2015-02-11 19:31:21

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移動'移動的目標文件,並自動'重新定位'自己以跟蹤 這些移動操作。

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

將//depot/code/main/a.txt到//depot/code/branch/b.txt整合更改。

這是當前2010.2版本中的'undoc'功能,但將成爲即將到來的2011.1中的默認行爲。

+0

+1斑點!這就是訣竅。 – 2012-11-19 17:13:05