整合 Perforce 的“添加”和“编辑”文件操作

Consolidate Perforce `add` and `edit` file operations

为了自动化 Perforce 暂存,我面临一个难题,即 addedit 是两个不同的操作,它们处理不同 SCM 状态的文件,即 "already under SCM or not".

这与 git 不同,后者的分期统一 add

我想要类似伪代码的东西:

filepath = '/path/to/myfile.ext'
if p4.is_under_scm(filepath):
    p4.edit(filepath)
else:
    p4.add(filepath)

或者更好的是,只需隐藏细节:

p4.staging(filepath)

我应该如何通过调用 p4 命令行程序来实现这一点?。我现在没有使用任何编程语言绑定。

您可能想要使用 p4 reconcile 命令,该命令会自动打开工作区文件以执行与其相对于软件仓库的当前状态相匹配的操作。

请记住,如果您走这条路,reconcile 仅对 未打开的 文件进行操作,这些文件与软件仓库 不同 版本,因此它意味着在 之后 进行本地修改(这不同于标准工作流程,在标准工作流程中,您在编辑文件之前使用 p4 edit 打开文件 - 这个想法是如果你不得不断开连接或类似的事情,你可以使用 reconcile 来修复问题)。此外,如果您改变了对文件的处理方式的想法(例如,您在 edit 打开后 submit 之前删除了本地副本),您可能需要 revert -k 它并重新 reconcile 以确保它打开以进行正确的操作。

对于与您问题中的伪代码相匹配的内容,您可能需要 p4 have 命令,它会告诉您本地文件是否对应于软件仓库修订版(如果是,是哪个版本)。 p4 edit 仅适用于您 have 的文件,而 p4 add 适用于您工作区中与现有软件仓库文件不对应的文件。 (这里有一个非常微妙的点——文件有可能 映射到 一个 depot 文件,尽管还没有从 depot 同步!如果是这种情况,当你去提交你的 add.)