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

perforce:如何集成本地未提交的变更列表?

  •  18
  • Debajit  · 技术社区  · 14 年前

    我的设想是:

    我有两个项目projecta和projectb。BranchSec自动将ProjectA集成到ProjectB。 现在,我有一个变更列表,它修改了ProjectA中的一些文件——我还没有提交/提交这个变更列表。

    我希望这个变更列表只进入projectb。

    做某事 P4集成-B分支sec-C更改列表号

    显示

    “所有修订版都已集成。”

    如何集成未提交的变更列表?

    6 回复  |  直到 5 年前
        1
  •  11
  •   Jeff Moser    14 年前

    简单的解决方案:

    1. 签出项目B中的文件
    2. 手动将文件从项目A复制到项目B(由于步骤1,它们不受写保护)
    3. 在项目A中搁置变更列表
    4. 提交到B
    5. 将文件从B集成到A并解析
    6. 从步骤3取消搁置文件。根据需要下定决心接受你的。
    7. 准备好后提交给

    另一种方法是创建一个单独的分支,在那里进行工作,然后根据需要集成到a或b。

    一般来说,perforce的工作方式是提交或搁置变更列表。集成一个未提交的变更列表的想法似乎违背了perforce的自然纹理,这使得这些解决方案很麻烦。

        2
  •  32
  •   Guy Danus    11 年前

    perforce有一个更简单的方法来实现这一点:

    1. 将您的变更列表搁置在brancha上(注意变更列表,我们将在此处将其称为num以供参考)

    2. 在branch a和branch b之间创建一个分支映射(我们称之为a到b)

    3. 运行以下命令:

      p4 unshelve -s NUM -b A_to_B
      
        3
  •  5
  •   EdChum Mathew M    12 年前
    p4 diff -u your/branch/... | patch -p x -d your/otherbranch
    

    如果x是一个int,您应该尝试从0开始直到它工作,使用--dry run-in补丁进行测试。(-p是要剥离的目录数,以便/branch和/otherbranch中的文件路径匹配,本例中为2)

        4
  •  3
  •   hege    13 年前

    我只是遇到了同样的情况,下面是我的解决方案(与Jeff的非常相似,但在这个过程中没有提交),也许有一天它会帮助某人:

    1. 在存在已编辑但未提交的文件时,将相关文件从projectb集成(并解析)到projecta。
    2. 查看projectb中的相关文件。
    3. 手动将相关文件从projecta复制到projectb。
    4. 还原projecta中的文件。
        5
  •  0
  •   Douglas Leeder    14 年前

    你可以使用 P4_Shelve 将更改移动到新的分支,然后可以将其集成到projectb。

        6
  •  0
  •   tenpn    13 年前

    创建了一个快速的powershell 2脚本来执行此操作:

    https://gist.github.com/1173044

    param([int]$changelistNum, [string]$destBranch)
    $regex = "^\s+//[^/]+(/\S+)\s"
    $sourceFiles = p4 change -o $changelistNum | select-string $regex | %{$_.matches[0]}
    
    $sourceFiles | %{
        $sourcePath = (p4 where $_.groups[0].value.trim()).split(' ')[2];
        $destPath = (p4 where ($destBranch + $_.groups[1].value)).split(' ')[2];
        p4 edit $destPath;
        copy $sourcePath $destPath;
        p4 add $destPath;
    }
    

    (不知道为什么缩进在上面不起作用-我在脚本块的内部加了8个空格的前缀?)

    该脚本从变更列表描述中提取所有文件,每个文件都尝试在另一个分支中找到相应的路径。它强制对每个文件进行p4编辑和p4添加,而不是试图猜测哪个是正确的。太冗长了!

    要将变更列表443复制到分支mybranch:

    Copy-PendingChangelistToBranch.ps1 443 "//myBranch"