将分支中的更改合并到主干中

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 到您的主干的工作副本,并确保它是updated。 merge 从分支到主干工作副本的修订。 commit 从分支到主干的变化。

我不确定树冲突,因为你没有足够详细地描述你的目录结构,我还在学习 SVN。如果您对分支和主干结构的MCVE 示例提出新问题,我相信您可以获得更多帮助。


为了更进一步,我发现免费书籍 Version Control with Subversion 中的 "Keeping a Branch in Sync" 部分有助于解释您想要的基本分支工作流程。虽然它描述的是命令行客户端而不是 Tortoise SVN,但概念是相同的。

Tortoise SVN 的文档还提供了一个关于该主题的部分 "Merging",尽管他们建议您返回并阅读 SVN 书中有关分支和合并的整章,如果您想继续提高技能,我同意SVN;即使您不使用命令行客户端,它对 SVN 的进程也非常有启发性。

【讨论】:

以上是关于将分支中的更改合并到主干中的主要内容,如果未能解决你的问题,请参考以下文章

将分支合并到主干

cvs2svn 和合并信息

在 Subversion 1.5 中将分支重新集成到主干时缺少范围错误消息

TFS未合并更改

为啥我在 Subversion 中遇到树冲突?

使用 Beanstalk SVN 分支进行部署