Svn 如何在SubVersion中重新合并从主干修订版重新创建的分支?

Svn 如何在SubVersion中重新合并从主干修订版重新创建的分支?,svn,version-control,merge,tortoisesvn,revert,Svn,Version Control,Merge,Tortoisesvn,Revert,我的SVN存储库中有以下体系结构: /trunk /branches/TESTING /branches/STAGING /branches/PRODUCTION 以下是我的常规版本控制工作流: 创建从主干分支的要素 提交对要素分支的更改 测试后,将功能分支合并回主干 删除合并/提交到主干的要素分支 准备好部署后,将主干合并到/branchs/PRODUCTION 将/分支机构/生产中的更改部署到生产系统 此工作流在99%的时间内运行良好。然而,昨天出现了一种情况,我很难找到合适的工作 自从上

我的SVN存储库中有以下体系结构:

/trunk
/branches/TESTING
/branches/STAGING
/branches/PRODUCTION
以下是我的常规版本控制工作流:

  • 创建从主干分支的要素
  • 提交对要素分支的更改
  • 测试后,将功能分支合并回主干
  • 删除合并/提交到主干的要素分支
  • 准备好部署后,将主干合并到/branchs/PRODUCTION
  • 将/分支机构/生产中的更改部署到生产系统
  • 此工作流在99%的时间内运行良好。然而,昨天出现了一种情况,我很难找到合适的工作

    自从上一次产品部署以来,我修复了一些bug,并开发了一些功能,所有这些功能都经过测试,然后合并并提交到主干。其中一项功能(客户要求)于6月17日上午部署。由于其他功能和bug并不重要,我一直等到6月17日才将它们全部部署到一起。然后在6月17日下午,客户决定放弃更改,等到以后的某个日期

    以下是我采取的步骤:

  • 恢复合并特征分支的主干修订(使用Tortoise SVN“从该修订中恢复更改”选项)
  • 将反向合并修订提交到主干
  • 将主干合并到/分支/生产
  • 将/分支机构/生产中的更改部署到生产系统
  • 这样做效果很好,更改很容易被撤销

    为了准备将来部署这些更改,我从合并功能分支的主干版本创建了一个分支

    但是,当我尝试将这个新分支合并回主干时,没有任何文件更改被合并—唯一发生的更新是主干属性被更新


    这看起来像是版本控制的一个基本功能——备份更改并能够在将来重新合并它们——但我无法让它正常工作。SubVersion/TortoiseSVN还有其他方法可以做到这一点吗?

    我在您的工作流程中看到了一些错误、错误和误用

    • 您删除了合并的分支。为什么?现有的“不再接触”分支不需要比上一次修订时在repo中占用更多的空间,删除分支不会减少repo的侧面。如果您希望在
      /branchs
      节点下使用紧凑、易于读取的空间,可以使用哈希树而不是平面空间(类似于
      /branchs/YEAR/MONTH/BRANCHNAME
    • 从合并要素分支的主干版本创建分支(在此分支中没有后续更改)几乎是零值操作:
      • 如果trunk稍后的更改将与此修订版中的代码状态冲突,您仍必须执行手动解决冲突
      • 在SVN中合并两棵树时,从branchpoint对这两棵树的更改将考虑在内(实际情况更复杂,但这是一种有效且正确的简化),而不是合并树中最新修订的状态。您的“justcopy”分支内部没有更改,它不会将任何内容带入合并结果
      • 您总是可以再次重新合并已删除分支的头(这可能需要解决冲突,但我想,无论如何,您都会得到它,重新合并旧分支只会给您稍微多一点)
    • 毕竟,具有撤消功能的主干状态分支是无用的:如果您想要返回修订,您可以通过反向合并修订来撤消,在任何时候您都可以(可能已经或必须)通过反向合并修订来完成,反向合并修订和功能(并在任意时间重复上一次反向合并的反向合并过程)

    您创建了一个分支,没有做任何更改,然后尝试将该分支重新合并。这应该始终不会导致任何更改!如果分支重新恢复自主干上删除的旧代码,它将导致各种问题,并且没有人会使用分支

    正如Lazy Badger在评论中所建议的那样,恢复功能的最简单方法是首先恢复删除分支更改的版本


    如果您想保留当前的工作流,我建议您首先恢复已删除的旧分支(更改发生在该分支上)。然后将该分支重新合并到主干中。或者,您可以从当前主干上分支,并在该分支中还原删除功能更改的更改。然后您应该能够o将新分支合并到主干。

    阅读有关反向合并操作的内容,并考虑反向合并修订版的反向合并。您的工作流程非常糟糕ugly@LazyBadger这不是我的“正常”工作流程-这是一个例外。我的客户说“6月17日部署”。然后6月17日来了,部署后,他们说“别担心,退出”。我正试图找到一种方法来满足这种需求,我们中的一些人偶尔会遇到这种需求。部署与VCS根本不相关-如果您发布了版本N,但它不好,请发布(与以前相同的方式)修订版N-1.或重新措辞question@LazyBadger重新措辞。一旦分支被合并回主干,它就不再需要了。与其拥有数百个已完成的分支,这些分支将永远不再被使用,而且确实使用了磁盘空间,我喜欢保持我的repo干净。不是错误,不是错误。Eric,除非你真的签出了整个存储库树,删除分支不会在任何地方节省任何磁盘空间。如果您签出整个存储库树,它只会在工作副本中节省空间,在这种情况下,您可以使用“稀疏签出”实现相同的结果。Lazy Badger,我没有想到使用“哈希树”正如您所建议的,这是非常聪明的。但是删除分支是完成任务的另一种方法