如何将SVN diff应用于Git?

时间:2009-03-18 18:07:37

标签: svn git version-control patch

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

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

谢谢。

6 个答案:

答案 0 :(得分:49)

我实际上做了/寻找的是:

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

答案 1 :(得分:18)

尝试:

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

如果要导出特定版本的差异,请参阅svn help diff

答案 2 :(得分:5)

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

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

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

使用-s(--stdlayout)假定标准主干/分支/标签/布局,但您可以使用哪种方式(man git-svn)。

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

答案 3 :(得分:5)

如果您要在SVN中生成补丁并稍后将其应用于Git,请不要忘记使用--git command-line option

  

--git

     

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

例如,运行

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

答案 4 :(得分:2)

除了使用上面提到的补丁之外,您还可以考虑设置post-commit hook,这样每次提交新内容时都不必这样做。

答案 5 :(得分:0)

以下对我有用。

来源:How to create and apply a patch with Git

首先,看看补丁中的更改。您可以使用git apply

轻松完成此操作
git apply --stat fix_empty_poster.patch

请注意,此命令不会应用修补程序,但只显示有关它的功能的统计信息。使用您喜欢的编辑器查看补丁文件后,您可以看到实际更改的内容。

接下来,你对这个补丁会有多麻烦感兴趣。 Git允许您在实际应用之前测试补丁。

git apply --check fix_empty_poster.patch

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

要应用补丁,我将使用git am而不是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

好的,补丁应用得很干净,你的主分支已经更新。当然,再次运行测试以确保没有任何损坏。

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