2009-12-11 81 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