这么长时间的SVN用户,但在分支/标记方面相当缺乏经验,当我怀疑我没有真正正确使用它或充分发挥其潜力.
我有我的主干,我正在努力添加新的功能等.这个代码库用于多个网站,我们在每个项目的基础上创建一个分支机构.
每个分支通常都有特定于该项目的修改,我们认为可重复使用的任何内容都会添加到主干中,并且可以在各种项目上打开和关闭功能.
目前,当我们对主干进行更改,并希望在预先设置的分支中进行修改时,我必须通过手动将某些修订合并到分支中并重新发布它们.不理想,容易错过的东西.
所以,我的问题......有没有办法用中继的所有更改来更新我的分支,并处理它们就好像它是冲突的标准主干更新?
我已经看到将分支重新集成到主干,但由于我在这种情况下使用分支的方式,这不是我想要做的事情.
我是Subversion的新手,但我多年来一直使用ClearCase等其他版本控制系统.
我的老板让我修复这个项目,以便它可以用Maven而不是Ant构建.我必须要做的一件重要的事情就是移动src/com到src/main/java/com并移动test/com到src/test/java/com我使用svn mv命令执行的操作.我愚蠢地假设,因为我使用Subversion命令移动目录,Subversion会知道事情已被移动.当我将我的分支合并到主干时,它似乎工作.但是现在有人刚刚完成了在我工作之前分支的分支机构的工作.因此我们将他的东西合并到主干中,基本上Subversion似乎认为"好吧,他做了更改src/com/foo/bar/baz.java,但该目录不再存在,所以它无关紧要,所以丢弃它"而不是我的预期,这是"好吧,他做了改动src/com/foo/bar/baz.java,但src/com已被移动,所以我需要将其合并为src/main/java/com/foo/bar/baz.java".
有没有办法让Subversion进行版本管理,或者我将在未来两天手动合并这个人的变化?
我们有一个分支B1,它仍然不稳定,所以它不在主干.但是我们想要处理B1的变化,所以我们从B1创建一个分支B2.
所以svn副本如下完成
svn copy http://svn/trunk http://svn/B1
svn copy http://svn/B1 http://svn/B2
Run Code Online (Sandbox Code Playgroud)
几天后,B1将稳定,B1将重新整合到行李箱.
现在,问题在于将B2合并回主干.我们是否将B2重新集成到B1然后重新集成到行李箱或直接重新集成B1->行李箱和B2->行李箱?
在预提交脚本中,是否有可能(如果是,如何)识别源自svn merge?的提交?
svnlook changed ... 显示已更改的文件,但不区分合并和手动编辑.
理想情况下,我还想区分标准merge和merge --reintegrate.
我正在探索使用预提交挂钩来为我们的项目强制执行SVN使用策略的可能性.
其中一个策略声明某些目录(例如/trunk)不应直接修改,只能通过功能分支的重新集成进行更改.因此,预提交脚本将拒绝除分支重新集成之外对这些目录所做的所有更改.
有任何想法吗?
我已经探索过这个svnlook命令,而我最接近的就是检测并解析svn:mergeinfo对目录属性的更改.这种方法有一些缺点:
svnlook可以标记属性的更改,但不会更改哪个属性.(需要使用proplist前一版本的差异)svn:mergeinfo,可以检测svn merge已运行的更改.但是,无法确定提交是否纯粹是合并的结果.合并后手动进行的更改将不会被检测到.(相关帖子:针对另一个路径/修订版的Diff事务树)我有一个具有以下结构的项目
^/project/trunk
^/project/branches/mybranch
Run Code Online (Sandbox Code Playgroud)
当前HEAD是修订版1048.分支是从r523中的trunk复制的.trunk已合并到mybranch,结果为r1048.mergeinfo on ^/project/branches/mybranch给出
/project/trunk:523-1047
Run Code Online (Sandbox Code Playgroud)
并且trunk的mergeinfo没有记录提及任何内容^/project/branches/mybranch.实际上实际上,主干和分支也从并行的分支中保持mergeinfos,mybranch但是这两个mergeinfos在两个输出中看起来完全相同.
现在我进入我的干线工作副本并尝试发布
svn merge --reintegrate ^/project/branches/myproject
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
svn: Reintegrate can only be used if revisions 523 through 1048 were previously merged from file:///home/svn/project/trunk to the reintegrate source, but this is not the case:
project/branches/mybranch/src
Missing ranges: /project/trunk/src:523-1047
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我的分支文件夹上的mergeinfo告诉我523-1047已经从主干到分支正确合并.这个子文件夹的处理是什么?src是一个显然存在于trunk和branch中的目录.
我认为这是有些可疑的地方.如果我查看mybranch/src的mergeinfo,svn pg svn:mergeinfo ^/project/branches/mybranch/src@HEAD我什么也得不到.如果我看看trunk/src但是(svn pg svn:mergeinfo ^/project/trunk/src@HEAD)我得到了
/project/branches/mybranch/src:784
Run Code Online (Sandbox Code Playgroud)
所以似乎有人在那里从一个分支到另一个分支做了一个樱桃挑选.但是,这不会出现在trunk文件夹中.
那是麻烦所在吗?最重要的是:我该怎样治愈它?
我们的主要SVN项目根目录中有几个大型子项目.
在使用我们的发布分支时,我只提交并合并我的子项目,主要是因为它更快.
但是,一位同事指出这个引用将版本控制中的子目录与Subversion(又名"SVN Book")合并:
- 对于长期释放分支(如"公共分支模式"一节中所述),仅在分支的根上执行合并,而不是在子目录上执行合并.
不幸的是,这是警告的程度.链接部分也没有给出解释.
提交和合并SVN子目录对发布分支有害吗?
短命功能分支怎么样?
Eclipse + Subversive插件
在提交与SVN不同步的目录时,会弹出一条消息:
Merge conflict during commit
svn: Commit failed (details follow):
svn: File or directory '.' is out of date; try updating
svn: resource out of date; try updating
Run Code Online (Sandbox Code Playgroud)
试图从Eclipse Navigator视图更新整个项目(右键单击>刷新或F5),问题仍然存在.
在这种情况下有什么可以做的吗?
你是如何在svn中使用svnmerge进行合并和分支的?
具体来说,我问,因为我已经开始使用svnmerge跟踪我工作的项目中的特定分支.我做了SVNMERGE合并,并结束了与许多像奇怪的文件.merge-left,.merge-right,.working.现在,我想看看其他人如何使用它来最终学习如何恢复我的更改并以最合适的方式应用合并.
我是 svn 的新手,需要进行大量从主干到我们正在工作的分支的合并。这是我用来合并的 svn 命令序列
svn up
svn mergeinfo --show-revs eligible branch trunk (branch and trunk are actually svn urls)
Run Code Online (Sandbox Code Playgroud)
我从分支和最新的主干版本中获取符合条件的最低版本,然后进行 svn 合并。
svn merge -r lowest_eligible:latest_trunk trunk_url .
Run Code Online (Sandbox Code Playgroud)
在合并过程中会出现一些冲突。然而,它们与我们在分支中所做的任何更改无关,所以我有点困惑为什么它们是冲突的。有任何想法吗?反正我总是选择,全都解决它
最后,我需要在提交之前执行 svn resolve
svn resolve --accept working -R .
Run Code Online (Sandbox Code Playgroud)
我有两个问题。这是执行从主干到分支合并的最佳命令序列吗?
合并往往需要一段时间,所以我想让它继续合并,让 svn 自动解决冲突。有没有办法做到这一点?
从几个月开始使用SVN中的合并功能(通过TortoiseSVN),我觉得SVN经常报告发生冲突的方式.
因此,我正在寻找一种方法来制作(Tortoise)SVN更频繁地自动解决冲突,而无需我的用户交互.
我知道类似的问题以及你可以用外部的替换diff查看器和合并工具的事实:

据我所知,这些工具链接得太迟了; 当内部算法已经检测到无法解决的冲突时,它们会被SVN/TortoiseSVN调用.
所以我的问题是:
(我正在使用VisualSVN Server和V1.7存储库,以防万一)
svn ×10
svn-merge ×10
merge ×2
tortoisesvn ×2
branch ×1
conflict ×1
eclipse ×1
subversive ×1
svn-update ×1
svnlook ×1
workflow ×1