我通过搁置一些文件创建了一个变更列表以供审查。现在我要落实一下评审意见。为此,我尝试解除搁置的文件,但p4打开仍然显示文件在搁置的变更列表中,而不是在默认的变更列表中。我想对这些文件进行处理,并再次将修改后的文件搁置在同一更改列表中。如何使用p4命令完成此操作
如果你打算更新同一个搁置的变更列表,最好是未搁置的打开文件在相同的变更列表编号中打开,而不是在默认的变更列表中打开。
更新现有货架(编号NNN
)的整个过程是:
- 确保你的工作空间没有任何正在进行的工作:
p4 opened
应该显示"文件未在此客户端打开"。 -
p4 unshelve -s NNN -c NNN
- 使用文本编辑器编辑文件等。如果您打开任何新文件,请确保您打开了:
p4 edit -c NNN
,以便新文件也在相同的更改列表号中。如果需要的话,您也可以通过执行p4 revert
来丢弃这个更改列表编号中的文件。 - 当你准备好更新搁置的变更列表时,执行:
p4 shelve -r -c NNN
。这将用您在工作空间中在该更改列表编号处打开的文件替换搁置更改列表中的所有文件。如果您只希望替换搁置变更列表中的一个(或两个)文件,您可以执行以下命令:p4 shelve -f -c NNN //path/to/file
来替换搁置变更列表 中的一个文件 -
p4 revert -w -c NNN //...
将所有这些修改过的文件清除出您的工作空间,并将更改过的版本仅保留在搁置的更改列表中。
您可以一遍又一遍地重复这个顺序,通过多个代码审查周期来修改搁置的变更列表。
请注意,这不是您可以与架子一起使用的唯一工作流。例如,对于开发人员来说,创建多个架子是非常好的,也是非常常见的,其中每个搁置的变更列表代表您的工作在您响应评审评论等过程中的一个时间点。
但是就地更新搁置的变更列表也是一个很好的工作流程,我经常使用它。
注意一个特殊的"gotcha",虽然,这就是为什么p4 revert -w
是如此重要:文件打开添加。如果你有一个文件打开添加在你搁置的变更列表中,如果你做一个简单的p4 revert
,而不是p4 revert -w
, Perforce将把添加的文件的数据留在你的笔记本电脑上的工作区,而-w
标志告诉Perforce从你的笔记本电脑上完全删除该文件。当您执行p4 unshelve -s NNN -c NNN
时,如果搁置的变更列表包含为add打开的文件,并且如果该名称的文件已经存在于您的笔记本电脑上,则Perforce不会解除该文件的搁置(因为它不想破坏笔记本电脑上已经存在的数据),因此它不会在工作区中重新打开该文件以进行add。当它这样做时,它会给你一个"不能删除可写文件"的消息,但是如果你心不在焉地忽略了这个消息,那么你就不会再打开文件添加了,当你做p4 shelve -r -c NNN
时,Perforce会从架子上删除那个文件,你会意外地从架子上删除那个文件。如果您始终可靠地使用p4 revert -w
,则很容易避免此问题(因此在P4ALIASES文件中放入'revert => revert -w')。