【发布时间】:2008-11-18 21:12:28
【问题描述】:
我们正在进行设计,为此我们在主分支中创建了类的骨架。现在,我们开始编写代码,为此我们有了一个新分支。因此,如果我可以将主分支中的所有新文件移动到新分支中,那就太好了。但是,我还不能签入。那么,是否可以集成签出的变更列表?谢谢。
【问题讨论】:
我们正在进行设计,为此我们在主分支中创建了类的骨架。现在,我们开始编写代码,为此我们有了一个新分支。因此,如果我可以将主分支中的所有新文件移动到新分支中,那就太好了。但是,我还不能签入。那么,是否可以集成签出的变更列表?谢谢。
【问题讨论】:
Perforce 支持网站解释了如何执行此操作:Perforce Knowledge Base: Branching work in progress。如果它是一个不需要运行八个不同命令的单个步骤会更好。
【讨论】:
自 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 来区分分支并复制更改。完成后,您可以还原原始分支中的更改并将其签入新分支。
这不是最好的解决方案(没有自动签出/添加/删除新分支上的文件),但它是我想出的最快的方法。
【讨论】:
不是真的。
您当然可以简单地在新分支中打开文件进行编辑,然后手动将更改的文件从主分支的工作区复制到新分支的工作区。如果只有几个文件,这可能是最简单的方法。
Here 是一些脚本,如果涉及大量文件,它们会很方便。 例如,使用P4Shelf 脚本,您可以创建所有更改文件的存档,然后在恢复更改的任何分支中自动打开它们。
另外,请查看 Jim Tilander 为 Perforce 撰写的 other nifty scripts。
【讨论】:
简单地改写 Gareth Rees 上面的回答,
p4 unshelve -b target_branchspec -s changelist
:)
【讨论】:
简单的答案是 - 不,你不能。不幸的是,快速浏览 Perforce 文档并没有为此提供现成的引用,但根据我的经验,任何从 Perforce 服务器下拉出地毯的尝试都会导致您的更改丢失,这会让您不开心露营车。
进行备份,在新分支上创建一个新工作区,然后重新应用您的更改,可能使用 Herms 回答中概述的差异/合并策略。
【讨论】: