如何处理具有git svn和纯git远程设备的git

如何处理具有git svn和纯git远程设备的git,git,svn,git-svn,Git,Svn,Git Svn,我有两个存储库,一个仍然是svn,充当主要位置,另一个是纯git,其中是日常工作。我使用git svn clone svn创建了本地克隆+ssh://... 以及使用git remote add添加远程git@.... 在通过提交和分支进行重构之后,git主机修改了目录结构,当我尝试git svn dcommit时,在svn的重新基础中会出现一系列冲突。这就像要重命名和重新定位的文件和目录丢失一样 我正在阅读的解决方案看起来来自于两个远程服务器同时提交的场景,即使这样也可能导致问题。有没有一种方

我有两个存储库,一个仍然是svn,充当主要位置,另一个是纯git,其中是日常工作。我使用git svn clone svn创建了本地克隆+ssh://... 以及使用git remote add添加远程git@....

在通过提交和分支进行重构之后,git主机修改了目录结构,当我尝试git svn dcommit时,在svn的重新基础中会出现一系列冲突。这就像要重命名和重新定位的文件和目录丢失一样

我正在阅读的解决方案看起来来自于两个远程服务器同时提交的场景,即使这样也可能导致问题。有没有一种方法可以让git svn表现得像策略是将svn转换为git拥有的一样

更新@20140821

过了一段时间,我发现它可以为我工作,但我不确定这是否足够通用

在我的例子中,我有两个具有相同提交的远程设备,也就是说,我在执行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
我发现的唯一方法是先将commit发送给svn,即在push中使用-force选项,否则statuscommand会包含一条消息:

# Your branch and 'gitremote/branch' have diverged,
# and have 3 and 2 different commits each, respectively.

任何合并尝试都会像新的一样显示提交中所做的所有更改。但是,如果git存储库中还有其他更改,例如其他开发人员已经在那里推送了一些东西,那么这个强制力可能会覆盖这些更改。

为了避免在git远程端重写git推送的历史,您可以简单地进行合并。在最简单的情况下,您已将更改推送到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