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

时间:2010-09-28 16:14:48

标签: perforce

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

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

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

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

万一有人要求,perforce proxy不在讨论范围内。

我知道部分解决方案是:

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

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

此外,我需要一个多平台或跨平台解决方案 - 它必须适用于Windows,OS X和Linux。

4 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:2)

另一个Unix / Linux代码段应该删除所有从未被perforce跟踪过的文件:

find . -type f | p4 -x- files 2>&1 | sed -n -e 's/ - no such file(s).//p' | xargs -d '\n' rm

答案 2 :(得分:0)

如果你有Unix / Linux,这可能会有效。

在Perforce中,您可以通过p4v“调整脱机工作”,如here所示,或通过命令行看到here.您已经按照问题中的说明执行了后者,当您还原编辑时和删除的文件。添加的文件比较棘手。第二个链接可以让您执行以下操作。

find . -type f -print | p4 -x - add
find . -type l -print | p4 -x - add

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

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

然后你需要做一个

p4 revert directory/...

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

答案 3 :(得分:0)

我需要这个用于svn的构建服务器。我最后做的是:

  • 更新工作区
  • 删除旧的“构建文件夹”(如果有)
  • 将工作区扫描到“构建文件夹”
  • 在“构建文件夹”中进行构建

通过这种方式,我知道没有任何东西可以用于旧版本。