【问题标题】:Perforce fast sync a directory to a clean statePerforce 将目录快速同步到干净状态
【发布时间】:2010-09-28 16:14:48
【问题描述】:

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

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

我只想确保在运行命令后我将没有这些。

p4 -f sync 不是一个选项,我需要一个更快的解决方案来最大限度地减少网络使用。

万一有人问起,perforce 代理不在讨论范围内。

我知道部分解决方案是:

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

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

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

【问题讨论】:

    标签: perforce


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      另一个 Unix/Linux sn-p 应该删除所有 perforce 从未跟踪过的文件:

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

      【讨论】:

        【解决方案3】:

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

        在 Perforce 中,您可以通过 p4v 来“协调离线工作”,如 here 所示或通过命令行如 here. 所见,您已经按照问题中的说明执行了后者,因为您恢复了已编辑和已删除的文件。添加的文件比较棘手。第二个链接将让您执行以下操作。

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

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

        棘手的部分是物理删除您添加的文件。这不漂亮,但我认为它会工作。 p4 打开 | grep 添加 |剪切 -f1 -d"#" | p4 -x- 在哪里 |剪切 -f3 -d" "

        那你需要做一个

        p4 revert directory/...
        

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

        【讨论】:

          【解决方案4】:

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

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

          这样我就知道没有什么可以挂在旧版本上的了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-02-13
            • 2014-03-04
            • 2020-11-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-11-29
            相关资源
            最近更新 更多