我的项目在 2 个存储库中。一个在 SVN 下,一个在 Git 下。每当我在 SVN 中更改某些内容时,我都想对 Git 存储库做同样的事情。
假设我对 SVN 存储库进行了更改,生成了修订版 125。我将如何将这些相同的更改应用到我的 Git 存储库(假设我的 Git 存储库是最新的修订版 124)。
谢谢你。
我的项目在 2 个存储库中。一个在 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
查看svn help diff
是否要导出特定修订的差异。
如果您要在 SVN 中生成补丁并稍后使用 Git 应用它,请不要忘记使用--git
命令行选项:
--git
为 svn diff 启用特殊输出模式,旨在与流行的 Git 分布式版本控制系统交叉兼容。
例如,运行
svn diff --git -r 125 > /tmp/patch.diff
为什么没有人喜欢 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) 远程一样进行推送和拉取。无话可问。
除了使用上面提到的补丁之外,您还可以考虑设置一个提交后挂钩,这样您就不必在每次提交新内容时都这样做。
以下对我有用。
资料来源:如何使用 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 和其他人将读取此标签,以提供有关提交如何在代码中结束的有用信息。