将分支中的更改合并到主干中
Posted
技术标签:
【中文标题】将分支中的更改合并到主干中【英文标题】:Merging changes from a branch into the trunk 【发布时间】:2019-06-11 18:46:24 【问题描述】:我使用 SVN 进行版本控制,在 Eclipse 中有一个项目。 但是,我在 Windows 10 中使用 TortoiseSVN 作为客户端。
所以我从 Windows 资源管理器提交和更新,这没问题。
所以我开始了一个测试。
我在存储库中有一个文件夹/trunk
,在存储库中还有一个文件夹/branches/1.77
。
(我用 Tortoise SVN->Branch/Tags 创建的没有问题,我没有切换。)
首先我将我的工作副本指向主干文件夹,创建一个文件versionado.trunk.txt
并提交该更改。
此时一切正常。
我切换到/braches/1.77
。在我的工作副本中,我看到 SVN 删除了 versionado.trunk.txt
。
然后在我的工作副本中创建另一个文件versionado.branch.txt
,然后提交。很好,我已经版本化了versionado.branch.txt
。
在我的工作副本中,我没有 versionado.trunk.txt
,因为我在分支上工作。
当我再次切换到主干时,versionado.branch.txt
从我的工作副本中删除,因为我正在主干中工作,并且 SVN 再次创建了versionado.trunk.txt
。
我的问题是我必须在工作副本中的哪个位置才能从分支 (x.xx) 合并到主干?
我的策略是在主干中工作(日常开发),并且我已经在分支中部署了版本,最终我必须修复一些错误,我应该合并到主干的错误!
我尝试从分支合并到主干(我的工作副本指向主干),但 SVN 告诉我存在树冲突,因为 versionado.trunk.txt
不存在(它在从分支到主干的切换时被删除)。
知道我做错了什么吗?
【问题讨论】:
天哪,我好几年没用过SVN了。当您想将分支合并回主干时,是否需要使用--reintegrate
标志?你在用吗?是的,您必须将工作副本更新到主干才能将分支合并到其中。如果可能的话,将 SVN 扔出窗外并切换到 Git 或 Mercurial。
@s.m.除非 OP 使用分支完成,否则这是不好的建议。 Reintegrate 用于完成分支,而不是简单地将来自分支的持续更改合并到主干中。由于听起来 OP 正在描述持续支持功能分支,因此我认为这不适用。
【参考方案1】:
我不是 SVN 专家,但也许以下内容会有所帮助:
当您将更改从分支合并到主干时,您通常不会直接编辑存储库。相反,您正在修改主干的工作副本,然后提交更改。使用merge
命令进行合并很有用,因为SVN 有一个名为svn:mergeinfo
的漂亮SVN 属性,它保留了合并项的先前历史记录。所以下面的工作流程应该可以工作:
switch
到您的主干的工作副本,并确保它是update
d。
merge
从分支到主干工作副本的修订。
commit
从分支到主干的变化。
我不确定树冲突,因为你没有足够详细地描述你的目录结构,我还在学习 SVN。如果您对分支和主干结构的MCVE 示例提出新问题,我相信您可以获得更多帮助。
为了更进一步,我发现免费书籍 Version Control with Subversion 中的 "Keeping a Branch in Sync" 部分有助于解释您想要的基本分支工作流程。虽然它描述的是命令行客户端而不是 Tortoise SVN,但概念是相同的。
Tortoise SVN 的文档还提供了一个关于该主题的部分 "Merging",尽管他们建议您返回并阅读 SVN 书中有关分支和合并的整章,如果您想继续提高技能,我同意SVN;即使您不使用命令行客户端,它对 SVN 的进程也非常有启发性。
【讨论】:
以上是关于将分支中的更改合并到主干中的主要内容,如果未能解决你的问题,请参考以下文章