Perforce: "fstat" 中的 "Action" 和 "HeadAction" 有何区别?

3
我目前正在开发一个功能,允许用户确定文件夹中哪些文件不同步。

我的代码目前似乎工作得很好,基本上我所做的是:

  • 在文件夹上进行Fstat
  • 遍历结果并标记符合以下两个条件的记录:
    • 修订版本 != Head Revision
    • HeadAction == Edit

话虽如此,我在使用HeadAction而不是Action时是否正确?两者之间有什么区别?

根据Perforce:

  • HeadAction:如果在存储库中,则为头部修订版所采取的操作。
  • Action:如果在您的工作区中打开,则为打开操作。

由于某种原因,我并没有真正觉得这些描述有用。

能否有人重新表述一下..?

谢谢

2个回答

5
'headAction'是版本库中最新提交的修订版本的操作 - 这意味着它是最新修订版本的操作。通常,对于新添加(和提交)的文件,这是“add”,对于已编辑并提交的文件,这是“edit”,或者当文件已在head处被删除时(并再次提交)时为“delete”。这里还有其他选项(如“branch”、“integrate”等)。
'action'是您当前对文件执行的操作。如果您打开一个文件进行“edit”,则操作将为“edit”。同样,如果您打开一个文件进行“delete”,则操作将为“delete”。如果您提交更改,则操作将成为headAction。
下面是一个小例子。我创建了一个新文件并提交了它。版本库中有1个修订版本。它的head action是“add”。然后我编辑了该文件。您可以看到fstat输出:
d:\projects\tools\test>p4 fstat new_file.txt
... depotFile //tools/test/new_file.txt
... clientFile d:\projects\tools\test\new_file.txt
... isMapped
... headAction add
... headType text
... headTime 1285014691
... headRev 1
... headChange 759253
... headModTime 1285014680
... haveRev 1

d:\projects\tools\test>p4 edit new_file.txt
//tools/test/new_file.txt#1 - opened for edit

d:\projects\tools\test>p4 fstat new_file.txt
... depotFile //tools/test/new_file.txt
... clientFile d:\projects\tools\test\new_file.txt
... isMapped
... headAction add
... headType text
... headTime 1285014691
... headRev 1
... headChange 759253
... headModTime 1285014680
... haveRev 1
... action edit
... change default
... type text
... actionOwner fred.flintstone

如果您想确定文件夹是否不同步,那么似乎只需要查看“haveRev”和“headRev”。如果headRev > haveRev,则说明您已过时。如果您关心文件在head中是否被删除,则查看headAction可能会有用。我猜我没有足够的信息来了解您的问题。
无论如何,希望对您有所帮助。

优秀的答案,这正是我想知道的。谢谢你,非常感激。 - Hussein Khalil

2

我不确定您的具体需求,但如果您需要

p4 sync -n <folder_name>/...

这将输出需要同步的文件。


使用这种方法,Perforce已经在跟踪这些信息。 - JasonMArcher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接