代码之家  ›  专栏  ›  技术社区  ›  TheBeardedBerry

如何使新的Perforce工作区识别以前同步的仓库数据?

  •  0
  • TheBeardedBerry  · 技术社区  · 3 月前

    所以我遇到过几次这种情况。假设我有WorkspaceA,并且已经同步到最新的CL(数千个文件,至少几百gb的数据)。现在,我需要创建一个新的工作区WorkspaceB,指向不同的仓库,但数据相同。如何强制WorkspaceB识别所有现有数据?

    DepotA->工作区A->MyPC(E:/文件)

    在此初始配置中,WorkspaceA可以看到E:/files中的文件与Depot中的数据之间的连接。

    DepotA->(克隆)->DepotB->工作区B->MyPC(E:/文件)

    在此配置中,WorkspaceB看不到E:/files中的Depot文件是相同的。当然,这是有道理的,一个新的工作区没有元数据来连接一切。但是,我必须假设有一个p4命令(ui或命令行)可以让我重新生成元数据并搜索所有现有文件。

    所以我的问题是:如何让WorkspaceB看到DepotB和E:/files中的文件之间的连接,就像WorkspaceA看到DepotA和E:/files中文件之间的联系一样?

    2 回复  |  直到 3 月前
        1
  •  1
  •   Jase    3 月前

    这是可能的,但我不建议完全按照你描述的那样做。有两个工作区指向相同的文件将不可避免地导致问题,因为如果你在一个工作区中进行更改,服务器将不知道在另一个工作空间中进行了更改,所以你会经常遇到文件被踩踏、签出或许多其他类似的问题。

    也就是说,你要找的命令是 p4 flush 一些工作室将采取类似的措施,加快创建新的工作空间。通常,会创建多个指向的工作区 相同的 仓库/流,如下所示:

    1. 一个用户从客户端工作区firstworkspace运行p4-sync文件。
    2. 其他用户使用其本地OS文件复制命令将新同步的文件从第一用户客户端工作区复制到他们自己的客户端工作区。
    3. 其他用户运行p4 flushfiles@firstworkspace,这很快使他们的客户端工作区的列表与步骤2中复制到客户端工作区中的文件同步。因为p4-flush不会在慢速链接上移动任何文件,所以这比分别运行相同的p4-sync命令十次要快得多。

    将其应用于您的示例看起来像这样:

    1. DepotA->工作区A->MyPC(E:/WorkspaceA)

    2. DepotA->(克隆)->DepotB(使用 p4 populate ,最有可能)

    3. 从本地复制文件 E:/WorkspaceA E:/WorkspaceB

    4. DepotB->工作区B->MyPC(E:/WorkspaceB)

    5. 然后,为了告诉服务器一切都是最新的,您可以运行 p4 flush ...#head

    这是的别名 p4 sync -k 阅读更多 documentation : “仅当需要更新have列表以匹配客户端工作区的实际状态时,才使用p4-sync-k。”

        2
  •  1
  •   Samwise    3 月前

    首先:我假设这是两台不同的机器,或者同一台机器上的两个不同目录,你有两个独立的(但相同的)文件副本,而不是一个有两个工作区指向的单一目录。 不要让多个工作区指向一个本地根。Perforce不会明确阻止你这样做,但它 不起作用。

    要告诉Perforce“假设我已经同步了所有这些文件”,请执行以下操作:

    p4 sync -k
    

    这个 -k 旗帜是为了“ keep 我工作区中的所有内容,而不是实际向我发送更新的文件”。

    如果你想告诉Perforce“实际上,我并不确定我拥有你认为我拥有的一切,你能看看我的工作空间里到底有什么,并修复任何不匹配的东西吗?”做:

    p4 clean
    

    任一命令都接受文件参数,因此您可以将其限制为特定的仓库路径或客户端路径。