Perforce - 将文件从搁置的更改列表中获取到默认更改列表中,处理这些文件并再次将它们搁置到同一个更改列表中

Perforce - Get files from a shelved changelist into default changelist , work on those files and again shelve them to a same changelist

我通过搁置一些文件创建了一个变更列表以供审核。现在我要执行审稿意见。为此,我尝试取消搁置文件,但打开的 p4 仍然显示文件在搁置的更改列表中,而不是在默认更改列表中。我想处理这些文件并再次将修改后的文件搁置在同一个更改列表中。如何使用 p4 命令执行此操作。

如果您打算更新同一个搁置的更改列表,实际上最好是在相同的更改列表编号中打开未搁置的打开文件,而不是在默认更改列表中。

更新您的一个现有书架(编号 NNN)的整个过程是:

  1. 确保您的工作区没有任何正在进行的工作:p4 opened 应该说 "file(s) not opened on this client"。
  2. p4 unshelve -s NNN -c NNN
  3. 使用文本编辑器等处理您的文件。如果您打开任何新文件,请确保您这样做:p4 edit -c NNN 以便新文件也位于相同的更改列表编号中。如果需要,您还可以通过执行 p4 revert 丢弃此更改列表编号中的文件。
  4. 当您准备好更新搁置的更改列表时,请执行:p4 shelve -r -c NNN。这会将搁置更改列表中的 所有 文件替换为您在工作区中打开的该更改列表编号的文件。如果您希望在搁置更改列表中替换一个(或几个)文件,您也可以执行以下操作:p4 shelve -f -c NNN //path/to/file 仅替换搁置更改列表中的那个文件
  5. p4 revert -w -c NNN //... 将所有这些修改过的文件从您的工作区中清除,并将更改后的版本留在搁置的更改列表

您可以一遍又一遍地重复这个序列,通过多个代码审查周期来修改您搁置的变更列表。

请注意,这不是您可以与货架一起使用的唯一工作流程。例如,开发人员更喜欢创建多个搁置,其中每个搁置的更改列表代表您在回复评论评论时工作演变的一个时间点,这也很好,而且很常见。

但是就地更新搁置的更改列表也是一个很好的工作流程,我经常使用它。

但是,

注意一个特定的 "gotcha",这就是 p4 revert -w 如此重要的原因:为添加而打开的文件。如果您打开一个文件以添加到搁置的更改列表中,并且如果您执行简单的 p4 revert 而不是 p4 revert -w,Perforce 会将添加的文件的数据保留在笔记本电脑的工作区中,而-w 标志告诉 Perforce 从您的笔记本电脑中完全删除该文件。当你执行 p4 unshelve -s NNN -c NNN 时,如果搁置的更改列表包含一个为添加而打开的文件,并且如果该名称的文件已经存在于你的笔记本电脑上,Perforce 将不会取消搁置该文件(因为它不想破坏笔记本电脑上已经存在的数据),因此它不会重新打开该文件以添加到您的工作区。它会在这样做时给你一条 "can't clobber writable file" 消息,但如果你心不在焉地忽略了这条消息,那么你将不会再打开文件进行添加,当你执行 p4 shelve -r -c NNN 时, Perforce 将从架子上删除该文件,而您会不小心从架子上删除该文件。如果您始终可靠地使用 p4 revert -w(因此将 'revert => revert -w' 放入您的 P4ALIASES 文件中),则很容易避免此问题。