假设我在代码库的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
现在,假设对main中的a.txt进行了一些更改,我希望将其集成到分支中的b.txt
当我尝试使用原始分支规范进行集成时,它没有反映主要对b.txt中的a.txt所做的更改 - 是否有任何方法可以在重命名的文件中显示主要更改?
分支规范相当大(数百个更改),并且在分支中重命名了相当多的文件,因此我希望有一种自动化的方法来执行此操作。如果我能在这里澄清任何内容,请告诉我 - 这将有助于获得白板;)
谢谢! 萨姆
答案 0 :(得分:11)
您可以添加“-3”开关以使用新引擎进行集成,这将检测先前使用“p4 move”移动的目标文件,并自动“重新定位”自身以跟随 那些移动操作。
p4 integrate -3 //depot/code/main/... //depot/code/branch/...
会将您对//depot/code/main/a.txt的更改整合到//depot/code/branch/b.txt。
这是当前2010.2版本中的“undoc”功能,但将是即将到来的2011.1中的默认行为。
答案 1 :(得分: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.
您可以将重命名添加到分支规范中。那么至少集成将是自动的 - 即使分支规范将更长更复杂。
答案 2 :(得分:3)
我知道Perforce为您处理此问题的唯一方法是使用分支规范将原始文件中的旧文件映射到分支中的新文件。也许这在最近的Perforce版本中随着新的移动命令而改变了,但不是我经历过的。
答案 3 :(得分: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 / ...中的所有文件
对我们来说,这个输出看起来像
// depot / books / bar.txt //depot/books/foo.txt
用它来制作分支规范。
答案 4 :(得分:1)
我不相信。由于没有直接p4 rename
,您必须集成并删除 - 一旦完成,从另一个分支集成不再转到正确的文件。至少那是我的经历。
答案 5 :(得分:0)
首先,我使用 p4 move
命令将文件移动到目标分支中。然后,我集成了它。
p4 move //depot/code/**main**/a.txt //depot/code/**main**/b.txt
p4 integrate //depot/code/**branch**/b.txt //depot/code/**main**/b.txt