繁体   English   中英

GIT SVN:获取重新创建的SVN分支,没有错误的合并父级

[英]GIT SVN: fetching a recreated SVN branch without the wrong merge parent

我的上游svn存储库有以下情况:

我创建了一个svn分支,并在其上做了一些工作,这导致了一个非常复杂的历史。 所以我再次删除了它,保留了git提交,这让我可以很好地清理历史。

一旦我准备好补丁系列,我使用svn copy克隆了我的分支,然后是git svn fetch 我的想法是,然后我将清理后的历史记录重新修改为新的svn分支,以便我可以使用git svn dcommit轻松发布它。

但是, git svn fetch并没有达到我的预期。 这就是我的预期(假git log --oneline --decorate --graph输出):

* xxxxxxx (svn-branch)
* xxxxxxx (svn-parent-branch)
...
somewhere further down, unrelated to the above
* xxxxxxx (old-svn-branch-head)

但这就是我得到的:

* xxxxxxx (svn-branch)
|\
| * xxxxxxx (svn-parent-branch)
|
* xxxxxxx (old-svn-branch-head)

如您所见, git svn fetch完全忽略了svn分支被删除的事实,将重新创建的svn提交映射到git的合并提交。 现在,我不会对此大惊小怪,如果这不重要,但不幸的是,错误的连接会混淆git的合并算法,在新的分支基础提交中进行重新定位时会产生虚假的合并冲突。

所以我的问题是:我怎么能诱使git svn fetch没有将新的分支基础提交与错误的父级链接,或以某种方式修复我的git repo,我保留了使用git svn dcommit发布我的东西的能力? 当然,我总是可以删除整个事情,并创建一个具有不同名称的新svn分支,但我想知道是否存在更好的解决方案。

我遇到了类似的情况,仍然无法找到关闭此行为的方法( - --no-follow-parent关闭整个分支跟踪,这不是我想要的)。

我最终用git replace --graft来修复历史。 它创建一个替换提交并保持其子项不变 在替换之后(例如git replace --graft svn-branch svn-parent-branch )这就是你看到的:

* svn-branch
|
* svn-parent-branch
...
* old-svn-branch-head

您仍然可以使用gitk --all选项查看原始提交。

* svn-branch (replacement)
| 
| * svn-branch (original)
|/|
* |  svn-parent-branch
| |
| * old-svn-branch-head
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM