【发布时间】:2016-09-28 12:17:49
【问题描述】:
我通过搁置一些文件创建了一个更改列表以供审核。现在我想实施审查 cmets。为此,我尝试取消搁置文件,但打开的 p4 仍然显示文件位于搁置的更改列表中,而不是默认更改列表中。我想处理这些文件并再次将修改后的文件搁置在同一个更改列表中。如何使用 p4 命令执行此操作。
【问题讨论】:
标签: perforce
我通过搁置一些文件创建了一个更改列表以供审核。现在我想实施审查 cmets。为此,我尝试取消搁置文件,但打开的 p4 仍然显示文件位于搁置的更改列表中,而不是默认更改列表中。我想处理这些文件并再次将修改后的文件搁置在同一个更改列表中。如何使用 p4 命令执行此操作。
【问题讨论】:
标签: perforce
如果您打算更新同一个搁置的更改列表,实际上最好是在相同的更改列表编号中打开未搁置的打开文件,而不是在默认更改列表中。
更新现有书架之一(编号NNN)的总体过程是:
p4 opened 应该说“文件未在此客户端上打开”。p4 unshelve -s NNN -c NNNp4 edit -c NNN 以便新文件也位于相同的更改列表编号中。如果需要,您还可以通过 p4 revert 丢弃此更改列表编号中的文件。p4 shelve -r -c NNN。这会将搁置的变更列表中的所有文件替换为您在工作区中以该变更列表编号打开的文件。如果您希望在搁置的更改列表中只替换一个(或几个)文件,您也可以执行以下操作:p4 shelve -f -c NNN //path/to/file 仅替换搁置的更改列表中的一个文件p4 revert -w -c NNN //... 将所有修改过的文件从您的工作区中清除,并将修改后的版本仅留在搁置的更改列表中您可以一遍又一遍地重复此序列,以通过多个代码审查周期来修改搁置的变更列表。
请注意,这不是您可以与书架一起使用的唯一工作流程。例如,开发人员更喜欢创建多个搁架,其中每个搁置的变更列表都代表您在回复评论 cmets 等时工作演变过程中的一个时间点,这也很好,也很常见。
但是更新一个搁置的变更列表也是一个很好的工作流程,我经常使用它。
不过,请注意一个特定的“陷阱”,这就是为什么p4 revert -w 如此重要:打开文件以供添加。如果您在搁置的更改列表中打开了要添加的文件,并且如果您执行简单的p4 revert,而不是p4 revert -w,Perforce 会将添加的文件的数据留在笔记本电脑的工作区中,而-w 标志告诉 Perforce 从您的笔记本电脑中完全删除该文件。当您执行p4 unshelve -s NNN -c NNN 时,如果搁置的更改列表包含一个打开的文件以供添加,并且如果您的笔记本电脑上已经存在同名的文件,Perforce 不会取消搁置该文件(因为它不想破坏笔记本电脑上已经存在的数据),因此它不会重新打开该文件以添加到您的工作区中。当它这样做时,它会给你一个“不能破坏可写文件”的消息,但是如果你心不在焉地忽略了那个消息,那么你就不会再打开文件进行添加了,当你这样做时p4 shelve -r -c NNN , Perforce 将从书架中删除该文件,而您会不小心从书架中删除该文件。如果您始终可靠地使用p4 revert -w,则很容易避免此问题(因此请在您的 P4ALIASES 文件中输入 'revert => revert -w')。
【讨论】: