ChatGPT解决这个技术问题 Extra ChatGPT

将分支合并到主干

我在使用 SVN merge 时遇到了一个特殊问题。我想从开发分支合并到主干。我们有多个开发分支同时切断了主干。

我正在使用以下命令将其中一个分支合并到主干:

svn merge trunk branch_1

我看到不属于此分支的更改被合并到主干中。我究竟做错了什么 ?

SVN 版本:

Subversion 命令行客户端,版本 1.6.16-SlikSvn-tag-1.6.16@1076804-WIN32。

我知道这不是一个答案,但如果您同时有多个活动分支,那么您最好转移到 mercurial 或 git。 Ps:我不是狂热分子,我已经使用 svn 大约 7 年了 ;-)
它提供了什么优势?为什么迁移到 git 或 mercurial 是更好的选择?
因为 git 和 mercurial 对分支有更好的支持。优点:你不会问这样的问题,并且在创建和维护分支时也不会那么头疼(目前我在一个有超过 1000 个分支的项目中工作,在 svn 中与他们一起工作简直就是地狱)
我建议查看 Svnmerge.py 并查看 this article

G
GreenAsJade

您的 svn merge 语法错误。

您想签出 trunk 的工作副本,然后使用 svn merge --reintegrate 选项:

$ pwd
/home/user/project-trunk

$ svn update  # (make sure the working copy is up to date)
At revision <N>.

$ svn merge --reintegrate ^/project/branches/branch_1
--- Merging differences between repository URLs into '.':
U    foo.c
U    bar.c
 U   .

$ # build, test, verify, ...

$ svn commit -m "Merge branch_1 back into trunk!"
Sending        .
Sending        foo.c
Sending        bar.c
Transmitting file data ..
Committed revision <N+1>.

有关详细信息,请参阅 SVN book chapter on merging

请注意,在编写它时,这是正确的答案(并被接受),但事情已经发生了变化。查看 topk 的答案,http://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate


--reintegrate 选项不是强制性的,分支(在 1.6 中)可以与任意目的地合并任意次数
真的吗?无需冒险重新合并相同的变更集?你能提供一个链接来证实这一点吗?
--reintegrate 确实不是强制性的,但在这种情况下确实推荐使用。我试图在没有 --reintegrate 的情况下做到这一点,并以数百次冲突告终。使用 --reintegrate,没有冲突,一切都很好!
--reintegrate 选项简单有效,但必须注意“一旦从分支到主干完成 --reintegrate 合并,该分支就不能再用于进一步的工作。它无法正确吸收新的主干更改,也不能再次正确地重新集成到主干。”正如你所链接的书所解释的那样。
@daveL,从主干到分支的转发合并对我来说很有意义。但是,我发现了一个高级功能,可以“使重新集成的分支保持活动状态”(请参阅 stackoverflow.com/a/10163059/685806),此外,较新的客户端版本会自动应用它。
t
topek

如果您的工作目录指向主干,那么您应该能够将您的分支与:

svn merge https://HOST/repository/branches/branch_1

一定要在你的trunk的根目录下发出这个命令


从 SVN 1.8 开始。这是正确的答案。请参阅subversion.apache.org/docs/release-notes/…
@blahdiblah 代码片段有很多无关的信息。研究摘要的阅读量比研究的任何其他部分都要多,这是有原因的。 UX 测试、最小化跳出率等也是如此。原理都是一样的。
使用 1.7,您可以在没有 --reintegrate 选项的情况下合并,并继续在分支上开发并继续合并。可悲的是,1.8 将强制重新整合,而且似乎没有办法阻止它。这意味着一旦你合并,你就不能在不经历可怕的“keep-alive dance”的情况下使用分支
不要忘记在合并后将主干的工作副本提交回存储库!
S
Sbl

在主干中进行 svn 更新,记下修订号。

从后备箱:

svn merge -r<revision where branch was cut>:<revision of trunk> svn://path/to/branch/branchName

您可以通过执行 svn log 来检查分支从树干中切出的位置

svn log --stop-on-copy

由于有多个开发分支同时处于活动状态,这对我也不起作用,这个命令也从其他分支中提取更改。这可能是 SLik SVN 客户端的问题吗?
虽然这并非不准确,但有更简单的方法可以与更新的 svn 版本(例如 OP 正在使用的一个)合并。
@VanchinathanChandrasekaran,在命令中您将分支名称指定为 svn://path/to/branch/branchName 应该只从该分支而不是从其他分支中提取更改。如果是这样,我们就有危险了!
J
Jenish Rabadiya

语法错误,应该改为

svn merge <what(the range)> <from(your dev branch)> <to(trunk/trunk local copy)>