我们正在进行设计,为此我们在主分支中创建了类的骨架。现在,我们开始编写代码,为此我们有了一个新分支。因此,如果我可以将主分支中的所有新文件移动到新分支中,那就太好了。但是,我还不能签入。那么,是否可以集成签出的变更列表?谢谢。
6 回答
Perforce 支持网站解释了如何执行此操作:Perforce 知识库:进行中的分支工作。如果它是一个不需要运行八个不同命令的单个步骤,那就更好了。
自 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.
(示例输出来自我刚才运行的一个真实用例。)
我从来没有找到一种在 perforce 中做到这一点的方法,但你至少可以部分自动化它。
通常当我不得不做类似的事情时,我会检查我想要移动的分支中的文件,然后使用WinMerge来区分分支并复制更改。完成后,您可以还原原始分支中的更改并将它们签入新分支。
这不是最好的解决方案(新分支上没有自动签出/添加/删除文件),但它是我想出的最快的方法。
并不真地。
您当然可以简单地在新分支中打开文件进行编辑,然后手动将更改的文件从主分支的工作区复制到新分支的工作区。如果只有几个文件,这可能是最简单的方法。
如果涉及大量文件,这里有一些脚本会很方便。例如,使用P4Shelf脚本,您可以创建所有更改文件的存档,然后在恢复更改的任何分支中自动打开它们。
另外,请查看Jim Tilander 为 Perforce编写的其他一些漂亮脚本。
用简单的术语改写 Gareth Rees 上面的回答,
p4 unshelve -b target_branchspec -s changelist
:)
简单的答案是——不,你不能。不幸的是,快速浏览 Perforce 文档并没有为此提供现成的引用,但根据我的经验,任何从 Perforce 服务器下拉出地毯的尝试都会导致您的更改丢失,这会让您不开心露营车。
进行备份,在新分支上创建一个新工作区,然后重新应用您的更改,可能使用 Herms 回答中概述的差异/合并策略。