svn - svnmerge 真的可以帮助我吗?

标签 svn version-control

这篇文章可能有点长,但如果您认为可以提供帮助,请阅读它,因为从字面上看,它会是您的救命稻草。

这是场景。我正在做一个项目 [for KDE],它的主干托管在:http://ubersvn.org/home/uber/trunk/myapp .另外,我正在一个分支机构工作,可以说:http://ubersvn.org/home/uber/branches/work/myapp-mod .这就是我一直在做的:

创建分支后,我一直在分支的本地工作副本上工作,并且经常从主干中拉取更改。有人告诉我,当最终合并回主干时,这将有助于防止大量冲突。所以,我经常这样做:

svnmerge.py merge
svn commit -F svnmerge-commit-message.txt

工作完成后,是时候将分支合并回主干了。我首先检查了主干的工作副本:

svn co svn+ssh://ubersvn.org/home/uber/trunk/myapp
cd myapp

然后,我关注了documentation合并回来:

svnmerge init svn+ssh://ubersvn.org/home/uber/branches/work/myapp-mod

并来回合并:

svnmerge merge --bidirectional -S svn+ssh://ubersvn.org/home/uber/branches/work/myapp-mod

这就是问题开始的地方。 首先,从外观上看,它正在合并 self 分支以来的每一个修订版。如果它这样做,我不认为我经常从主干中拉出并保持我的分支是最新的。但是,我只是假设 svnmerge 以某种方式使用它来解决整个合并过程中的冲突。到目前为止,还不错。

其次,它以一个听起来类似的错误突然结束:

Attempt to add tree conflict that already exists

在线搜索了一下,我发现问题可以通过以下方式解决:

svn resolve --accept working -R .

然后它显示一些决议被清除了。但是,现在当我这样做时:

svnmerge merge --bidirectional -S [BRANCH_URL]

它说,“未找到 svnmerge 信息”。我尝试使用 svnmerge init BRANCH_URL,但它说 '.'有局部修改。它必须是干净的

那么,现在我面临的问题是:

  • 我无法从我的分支中提取数据,因为有本地修改
  • 为了让我的工作副本干净,我必须提交,这不是一个选项,因为合并只是一半,它肯定会破坏主干。
  • 我的文件完全不一致。我不知道这些修订是如何合并的,有些文件包含“mylittleapp.h”,但“mylittleapp.h”是在后来的修订中创建的。
  • **我的分支中添加的**每个**新文件都存在大量冲突**。我**绝对**不明白这一点。我是唯一一个处理这些文件的开发人员,这些文件在任何时候都无法进入主干。为什么这些文件中有这么多冲突?
  • 有大量名为 `mybigapp.h.merge-(right|left).r[0-9]+` 和 `mybigapp.h.working` 的文件。 `mybigapp.h` 本身充满了冲突。人类无法解决的冲突如此之多。
  • 由于一半的文件假设存在一个实际上不存在的文件,所以在我得到该文件之前我无法测试或做任何事情。在“尝试添加树冲突”错误之后,我无法获得任何后续修订。

那么,我该如何从这里开始呢?一种解决方案似乎是从分支中区分出来,应用到主干然后提交。但根据我工作的组织的政策,这是 Not Acceptable 。非常感谢任何帮助,我将不胜感激。

谢谢, 罗汉

最佳答案

我真的没有适合您的解决方案,但我希望这对您有所帮助。

在将您的分支合并回主干之前,您的分支需要有从您创建分支时起来自主干的 提交。这很重要,因为否则将您的更改合并回主干会从主干中删除其他人的更改。

rev 5: created my-branch
rev 6: change 1 in my-branch
rev 7: change somefile.h in trunk
rev 8: change 2 in my-branch

现在,如果您只是将 my-branch 合并回 trunk,rev 7 的更改将会丢失!这就是为什么您需要使用来自主干的所有更改来更新您的分支。每当您合并更改时,SVN 都会将一个 mergeinfo 属性(SVN 1.5)添加到顶级目录(您正在执行合并的目录)。这看起来像这样:

svn:mergeinfo/trunk:7, 10-13, 14 (这意味着你已经将这些修订从主干合并到你的分支)

有关树冲突的消息通常与文件和目录的移动和重命名有关。如果你删除了一个文件但没有使用 svn delete,或者 somefile.h 在 trunk 中被更改但是这个文件被移动到你分支中的其他地方。

这是我会尝试的:

  1. 结帐新中继
  2. 检查新分支
  3. 确保分支包含来自主干的所有更改(如果您使用的是 svn 1.5,则可以检查顶级分支目录上的 mergeinfo 属性)
  4. 阅读有关合并的所有内容 http://svnbook.red-bean.com/en/1.5/index.html (不会花你太长时间,你会确切地知道你在做什么)
  5. 尝试将你的分支合并回主干

我无法使用命令行帮助您,因为我没有使用命令行客户端。您尝试做的是人们每天使用 SVN 做的事情,它必须有效。

关于svn - svnmerge 真的可以帮助我吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3741069/

相关文章:

git svn clone 初始化后卡住

svn - 如何恢复 svn 存储库中已删除的文件[不在我的工作副本中]?

svn - 在不同项目之间共享同一个文件

Git 将功能分支的历史更改为新分支?

version-control - 如何解决 TFS 中的冲突?

version-control - 分布式版本控制之后会发生什么?

git - 在不重新下载所有内容的情况下更新 git-svn git 镜像

Linux : How to set up "global" user/passwords/groups file in svn

svn - 是否可以通过预提交 Hook 运行 SonarQube 分析

git svn 迁移失败,svn 1.8