如何将SVN diff应用于Git?

And*_*yuk 49 svn git version-control patch

我在2个存储库中有我的项目.一个在SVN下,一个在Git下.每当我在SVN中更改某些内容时,我想对Git存储库执行相同的操作.

假设我对SVN存储库进行了更改,生成了修订版125.如何将这些相同的更改应用到我的Git存储库(假设我的Git存储库是最新的版本124).

谢谢.

And*_*yuk 49

我实际上做/寻找的是:

cd /path/to/svn/repo
svn diff -r 125 > /tmp/patch.diff
cd /path/to/git/repo
patch -p0 < /tmp/patch.diff
Run Code Online (Sandbox Code Playgroud)

  • 对于第二行使用`svn diff -c 125`会更正确.通过这种方式,您将获得修订版125的更改,而不是从当前代码更改此修订版. (4认同)
  • 一般来说,git-svn 是将 svn 提交导入(和导出)到 git 存储库的更好方法。它将保留提交消息和作者信息,并处理许多会破坏这里给出的答案的边缘情况。(当然,如果存在您未在此处讨论的外部约束,则此脚本可能更适合您的情况) (2认同)

Mat*_*ttJ 18

尝试:

svn diff | patch -d /path/to/git/repo -p0
Run Code Online (Sandbox Code Playgroud)

看看svn help diff是否要导出特定修订版的差异.


seh*_*ehe 5

为什么没有人喜欢git-svn?我不能假设没有人知道它.

有git-svn(和git-hg和git-cvs以及git-bzr afaict).至少用git-svn你可以做到

git svn clone --stdlayout http://myrepo/root here
Run Code Online (Sandbox Code Playgroud)

使用-s(--stdlayout)假定标准的trunk/branches/tags/layout,但你可以使用任何方式(man git-svn).

映射是双向的,因此您可以像使用本机(git)远程一样进行推送和拉取.无话可问.

  • 但这与git-svn没什么关系.Git-svn使您可以透明地使用Subversion存储库***(作为非本机远程).如果你打算传递git-svn_的SVN风格的差异_outside你不应该责备git-svn如果这不起作用.它没有任何关系 (3认同)

bah*_*rep 5

如果您要在SVN中生成补丁程序并在以后与Git一起应用,请不要忘记使用--git命令行选项

--git

为svn diff启用特殊的输出模式,该模式旨在与流行的Git分布式版本控制系统实现交叉兼容性。

例如,运行

svn diff --git -r 125 > /tmp/patch.diff