如何将SVN diff应用于Git?

我有两个存储库中的项目。 一个在SVN下,一个在Git下。 每当我改变SVN的东西,我想要做同样的事情到Git仓库。

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

谢谢。

我真正做/寻找的是:

cd /path/to/svn/repo svn diff -r 125 > /tmp/patch.diff cd /path/to/git/repo patch -p0 < /tmp/patch.diff 

尝试:

 svn diff | patch -d /path/to/git/repo -p0 

如果你想导出一个特定版本的diff,参见svn help diff diff。

为什么没有人喜欢git-svn? 我不能认为没有人知道这件事。

有git-svn(和git-hg和git-cvs和git-bzr afaict)。 至less用git-svn你可以简单的做

 git svn clone --stdlayout http://myrepo/root here 

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

映射是双向的,所以你可以像本地(git)远程一样进行推拉。 无话可问。

如果你打算在SVN中生成一个补丁并稍后使用Git,不要忘了使用--git命令行选项 :

--git

启用svn diff的特殊输出模式,以便与stream行的Git分布式版本控制系统交叉兼容。

例如,运行

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

除了使用上面提到的补丁之外,你还可以考虑设置一个提交后的钩子,所以你不必每次提交新东西时都要这样做。

下面的工作对我来说。

来源: 如何使用Git创build和应用修补程序

首先,看看补丁中的变化 。 你可以用git apply轻松做到这一点

 git apply --stat fix_empty_poster.patch 

请注意,这个命令不会应用这个补丁,但是只会显示它会做什么的统计信息。 在用你最喜欢的编辑器偷看补丁文件后,你可以看到实际的变化。

接下来,您对修补程序的麻烦感兴趣 。 Git允许你在实际应用之前testing这个补丁。

 git apply --check fix_empty_poster.patch 

如果你没有得到任何错误,补丁可以干净地应用 😀。 否则,你可能会看到你会遇到什么麻烦。

要应用该补丁,我将使用git而不是git apply。 原因是git am允许你签署一个应用补丁。 这可能对以后的参考很有用。

 git am --signoff < fix_empty_poster.patch Applying: Added specs to test empty poster URL behaviour Applying: Added poster URL as part of cli output 

好的,修补程序是干净的应用,你的主分支已经更新。 当然,再次运行你的testing,以确保没有任何破坏。

在你的git log中,你会发现提交信息包含一个“Signed-off-by”标签。 这个标签将被Github和其他人读取,提供有关如何在代码中提交的有用信息。