perforce - 在存在与取消搁置的冲突后是否必须安排解决?

标签 perforce

我试图了解当文件在工作区中取消搁置时,perforce 计划如何以及为何进行解析。我认为这是我(P4新手)不太掌握的基本内容,但是FWIW,p4信息给了我这个版本......服务器版本:P4D/LINUX26X86_64/2013.2/938876(2014/09/23)

假设用户将其工作区同步到 depo 头,并且“file.txt”的版本为 8 (file.txt#8)。然后另一个用户提交了一个更改,在 depo 中,它现在是“file.txt#9”。第一个用户搁置 file.txt#8,移动到另一个目录,在那里他同步整个仓库的头部(包括 file.txt#9)。该工作区现在有#9。然后他执行 p4 取消搁置,file.txt#8 现在位于默认更改列表中。

此时,用户担心与#8之后可能出现的某些内容发生冲突,因此他执行了“p4resolve-am”。那时您希望看到什么?文件.txt#8 ?文件.txt#9 ? #8 和 #9 的合并版本?我认为我们看到的是 file.txt#8,但我们希望看到合并的版本。我想知道我们是否必须通过在取消搁置后进行某种同步来“安排”解决方案。但如果我们进行同步,file.txt#8 中的更改是否仍会以某种方式保留,或者同步会破坏它们吗?

预先感谢您的任何解释。

最佳答案

逐步完成此操作:

A user syncs to the #head and "file.txt" is at version 8 (file.txt#8).

该文件位于其工作区中,版本为#8。它不适合任何操作。

Another user submits a change such that in the depot, it's now "file.txt#9".

该文件仍在用户的工作区中,版本为 #8,但仍未打开。

The first user shelves file.txt#8

等等——用户如何将其搁置而不打开?我将在这里填补一个空白并假设他们:

  • 打开文件进行编辑(p4 edit)
  • 对文件进行了更改(因此现在有与 file.txt#8 相关的更改)。我将其称为“更改 X”。

moves to another directory where he syncs the head of the whole depot (including file.txt#9). That workarea now has #9.

等等——这是同一工作区中的另一个目录,还是一个完全不同的工作区?如果是同一个工作区,它们位于不同的目录中并不重要。既然你说他们有 file.txt#9 我会假设它是另一个工作区,因为我已经假设该文件在原始工作区中打开并且同步实际上不会下拉如果文件已打开,则为新版本。

我将原始工作区称为“客户端 A”,将这个新工作区称为“客户端 B”。

Then he does a p4 unshelve and file.txt#8 is now in the default changelist.

好的,很酷。现在我们所处的状态是文件已有效同步回 file.txt#8,并且已打开进行编辑,并且工作区中已更改 X。当您取消搁置文件时,它始终会同步到搁置时的同一版本,即使您之前在工作区中同步了更高版本。 (如果您之前同步并打开更高版本,则取消搁置会立即安排解决,但您所描述的情况并非如此。)

换句话来说,对于file.txt来说,客户端A和客户端B处于完全相同的状态。它在 #8 处打开,并且更改 X 位于工作区中。

At this point, the user is worried about a conflict with something that might have slipped in after #8, so he does a "p4 resolve -am". What would you expect to see at that point ?

什么也没发生,因为文件仍然同步到#8。在您同步到需要解决方案的较新版本之前,不会安排解决方案。 (这允许您选择解决哪些修订以及何时解决 - 如果已提交多个较新的更改,您可以通过仅同步这些更改来“挑选”要解决的修订,或者通过同步到 #head 来解决所有修订.)

And I'm wondering if we have to "schedule" a resolve by doing some sort of sync after the unshelve. But if we do the sync, will the changes in file.txt#8 still be preserved somehow or will the sync clobber them ?

是的,您必须进行同步,不,同步不会破坏 X,因为它是开放编辑的。同步将安排解析,然后解析的工作是将 #9(他们的)与 X(你的)合并。

事实上,通过取消搁置进行的更改并不重要 - 重要的是,当文件在较旧的版本中打开进行编辑时,同步到较新的版本会安排解析反对该修订。无论您在客户端 A 还是客户端 B 中执行此操作,您都会看到相同的行为,因为两者具有完全相同的状态(文件在 #8 打开)。

关于perforce - 在存在与取消搁置的冲突后是否必须安排解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62778819/

相关文章:

perforce - 将 Perforce 仓库的同一部分映射到多个位置?

perforce - 从 Perforce 控件中删除文件而不从工作区中删除?

svn - Perforce相当于svn switch

perforce - unicode perforce 服务器中的 BOM 问题

perforce - 如何更改 p4 信息中的默认服务器值

perforce - p4 命令相当于 svn status 之类的命令是什么

svn - Subversion 选项显示更新结果而不实际更新

perforce - 如何查看特定用户搁置的所有 P4 更改?

git - 将 Git 存储库添加到 Perforce 仓库

git - GIT 中 P4 搁置的等效命令