我有两个存储库,一个仍然是 svn 并充当主要位置,另一个是纯 git ,其中是日常工作。我使用git svn clone svn+ssh://...
进行了本地克隆,并使用git remote add git@...
添加了一个遥控器。
在对其提交和分支进行重构之后, git master已经修改了目录结构,当我尝试git svn dcommit
时出现了一堆冲突,看起来像是一个rebase SVN 。它就像 mv 的文件和目录一样,重命名和重新定位都会丢失。
我阅读的解决方案看起来来自同时提交两个遥控器的情况,甚至这可能会导致问题。有没有办法告诉 git-svn 表现得像策略是将svn转换为git有什么?
更新@ 20140821
过了一段时间,我发现它对我有用,但我不确定这是否足够通用。
在我的情况下,我同时拥有相同提交的遥控器,就是在我执行push
之前或之后我执行dcommit
。然后我可以强迫自己总是从git开始,然后继续使用svn。
看起来像:
git svn fetch
git fetch gitremote
git add file1 file2
git commit -m "something descriptive but concise"
git push gitremote branch
git svn dcommit
我发现将提交首先发送到svn的唯一方法是在推送中使用选项 - force ,否则status
命令包括消息:
# Your branch and 'gitremote/branch' have diverged,
# and have 3 and 2 different commits each, respectively.
任何尝试合并都会显示commit
中所做的所有更改,例如new。但是如果git存储库中存在其他更改(例如,另一个开发人员已经在那里推送了某些内容),则此 force 会出现一个大问题,然后此强制可能会覆盖这些更改。
答案 0 :(得分:0)
为了避免在git远程端重写历史记录(git push),你可以简单地进行合并。在最简单的情况下,您将更改推送到svn/branch
并且具有相应的git_remote/branch
,但没有区别:
git checkout git_remote/branch
# -s ours to ignore potential conflicts, assuming git diff is empty
git merge -s ours svn/branch
git push git_remote HEAD:branch