Perforce将目录快速同步到干净状态

sor*_*rin 9 perforce

我想要一个快速的解决方案,不需要强制同步,将指定的目录置于其原始存储库状态.

  • 可以从磁盘中删除相同的文件
  • 可以从磁盘添加相同的文件
  • 某些文件可能会在磁盘上修改
  • 某些文件可能会被标记为perforce中的删除,添加或修改

我想要的是确保在运行命令后我将不会有这些.

p4 -f sync 不是一个选项,我需要一个更快的解决方案,尽量减少网络使用.

万一有人要求,perforce代理不在讨论之中.

我知道部分解决方案是:

p4 diff -sd -se //clientspec/dir/... | p4 -x - revert

问题是,这不会删除添加到上面不在perforce中的路径的文件 - 我想要从磁盘中删除的文件.

此外,我需要一个多平台或跨平台的解决方案 - 它必须在Windows,OS X和Linux上运行.

小智 7

Perforce在2014.1中添加了一个新命令"p4 clean",通过将工作区重置为#have状态,它可以完全满足您的要求:

  • 将删除不在Perforce中的新文件
  • 在Perforce控件之外修改的文件将被重置
  • 将恢复在Perforce控件之外删除的文件

该命令是"p4 reconcile -w"的别名,并使用文件的hashsum来确定它们在工作区中的状态.


Cha*_*nce 0

如果您有 Unix/Linux,这可能可行。

在 Perforce 中,您可以通过 p4v(如此处所示)或通过命令行(如此处所示)“协调离线工作 当您恢复编辑和删除的文件时,您已经按照问题中所述执行了后者。添加的文件比较棘手。第二个链接会让您执行以下操作。

find . -type f -print | p4 -x - add
find . -type l -print | p4 -x - add
Run Code Online (Sandbox Code Playgroud)

在 Unix 中添加文件和符号链接

棘手的部分是物理删除您添加的文件。这不太漂亮,但我认为它会起作用。p4打开| grep 添加 | 切-f1-d“#”| p4 -x- 其中 | 切-f3-d“”

然后你需要做一个

p4 revert directory/...
Run Code Online (Sandbox Code Playgroud)

或者在删除文件时执行与上面类似的操作。