Version control 为什么是'-Di和x27;不是';p4集成';?

Version control 为什么是'-Di和x27;不是';p4集成';?,version-control,perforce,Version Control,Perforce,想象一下下面的场景:我们有两个性能管理的目录:主干和分支 文件1添加到分支,然后集成到主干 文件1在分支上重命名为文件2 新文件1将添加到分支中 在这种情况下,默认的从分支到主干的集成将不包含File1,直到提交集成,然后第二个集成将获取更改 这个问题可以通过使用integratedwith-Di选项来避免。我的问题是:为什么这个选项不是默认选项?它会导致其他地方的问题吗?是的。一个很好的例子说明了-Di可能会有什么问题,即在主干和/或分支上编辑了File1 假设旧文件1包含“A”,trunk/

想象一下下面的场景:我们有两个性能管理的目录:主干和分支

  • 文件1添加到分支,然后集成到主干
  • 文件1在分支上重命名为文件2
  • 新文件1将添加到分支中
  • 在这种情况下,默认的从分支到主干的集成将不包含File1,直到提交集成,然后第二个集成将获取更改


    这个问题可以通过使用integratedwith-Di选项来避免。我的问题是:为什么这个选项不是默认选项?它会导致其他地方的问题吗?

    是的。一个很好的例子说明了-Di可能会有什么问题,即在主干和/或分支上编辑了File1

    假设旧文件1包含“A”,trunk/File1是“AB”,branch/File2是“AC”。假设新文件1是“D”

    如果执行默认的集成,则首先将branch/File2与trunk/File1合并,这两者都合并了内容(生成“ABC”),然后将trunk/File1移动到trunk/File2。后续的integrate将branch/File1分支到主干上现在空闲的位置,因此主干/File1变为“D”。这是理想的结果

    如果使用-Di进行集成,则将branch/File2分支到trunk/File2,得到一个内容为“AC”的trunk/File2,并在branch/File1和trunk/File1之间进行无基础合并,一边是“AB”,另一边是“D”

    总之,使用默认值(两步积分),您可以得到:

    通过-Di(一步无基础集成),您可以得到:


    从理论上讲,您可以通过解决冲突、手动选择历史记录、注意B更改应该在另一个文件中,然后手动将其编辑到File2中来解决这一问题。在集成到其他分支时,您可能最终不得不重复此性能(现在,由于File2和File1之间的连接不太明显,这使得性能变得复杂)。

    是的。一个很好的例子说明了-Di可能会有什么问题,即在主干和/或分支上编辑了File1

    假设旧文件1包含“A”,trunk/File1是“AB”,branch/File2是“AC”。假设新文件1是“D”

    如果执行默认的集成,则首先将branch/File2与trunk/File1合并,这两者都合并了内容(生成“ABC”),然后将trunk/File1移动到trunk/File2。后续的integrate将branch/File1分支到主干上现在空闲的位置,因此主干/File1变为“D”。这是理想的结果

    如果使用-Di进行集成,则将branch/File2分支到trunk/File2,得到一个内容为“AC”的trunk/File2,并在branch/File1和trunk/File1之间进行无基础合并,一边是“AB”,另一边是“D”

    总之,使用默认值(两步积分),您可以得到:

    通过-Di(一步无基础集成),您可以得到:


    从理论上讲,您可以通过解决冲突、手动选择历史记录、注意B更改应该在另一个文件中,然后手动将其编辑到File2中来解决这一问题。在集成到其他分支时,您可能最终不得不重复此性能(现在,由于File2和File1之间的连接不太明显,这使得性能变得复杂)。

    感谢您的解释!谢谢你的解释!
    branch/File1: D
    branch/File2: AC
    trunk/File1:  AB
    
    trunk/File1: D          (branch)
    trunk/File2: AB+AC=ABC  (clean merge)
    
    trunk/File1: D+AB=???   (baseless merge)
    trunk/File2: AC         (branch)