我正在使用Git-Svn与工作中的Svn仓库交互,但似乎找不到有效地解决冲突的方法。我已经阅读了其他关于这个主题的问题,但显然我需要更多基础的东西,因为我总是陷入某种无限循环中。我进行rebase,使用mergetool(meld)来解决冲突,当我完成所有这些操作之后,尝试执行dcommit时,会出现合并冲突提交错误。
我知道这感觉像一个重复的问题,但是沮丧让我再次提问,带上一些非常具体的细节,以便有人可以告诉我我的过程究竟错在哪里。
我的设置:
我有一个远程分支(svn/trunk),一个本地分支(trunk)和另一个我通常在其中工作的本地分支(working-trunk)。trunk是从svn/trunk检出的,而working-trunk是从trunk检出的。
这就是我一直在做的:
- 在我的trunk上,运行
git svn rebase
(返回冲突) git mergetool
- [解决那个文件的冲突]
- 保存meld中合并的文件并关闭meld。
git add .
git rebase --continue
- [重复上述步骤]
- 如果我收到一个询问我是否使用
git add
的消息,我就运行git rebase --skip
当我到达所有报告的更改的末尾时,一切都停止了,也许此时我不确定该怎么做。Git显示没有要提交的内容,而且我似乎又回到了trunk。然后,Git允许我进行dcommit,但是如果我紧接着尝试rebase,我会再次重新解决刚刚解决的冲突。
这里显然有一个关键的部分我不明白,但我只是看不到它,这导致了很多问题和挫败感。在Git中合并可能很容易,但我发现情况并非如此。
谢谢。
更新: 我想简单介绍一下我的工作流程,以防这可能是问题的一部分(或全部)。
首先,在使用 svn/
前缀克隆我的存储库后,我拥有自己的 svn/trunk
远程分支。鉴于此:
- 我使用
git co -b trunk svn/trunk
将我的远程分支检出到本地分支。 - 我使用
git co -b working-trunk
创建一个工作分支,用于创建更多的分离度,以便我的本地 trunk 可以始终镜像我的远程主干。 - 我删除默认的 master 分支(在使用 svn 时,我发现以“trunk”而不是“master”来思考更容易)。
一旦我拥有所有分支,我的典型工作流程如下:
- 在 working-trunk 上,我进行更改并提交它们。
- 我使用
git co trunk
并执行git svn rebase
。 - 假设代码已被重新基于,则我使用
git rebase working-trunk
。 git co working-trunk
git merge trunk
git rebase trunk
git co trunk
git merge working-trunk
git svn dcommit
我知道这是很多步骤,但这就是这里和其他地方推荐的。我的致命缺陷可能在这个过程中的某个地方吗?
再次感谢。