我有两个代码仓库,一个在SVN中,另一个在Git中。每当我在SVN中更改了内容,我都希望能够在Git仓库中进行相同的更改。
比如我在SVN仓库中做了一些修改,产生了第125个版本。那么我该如何将这些修改应用到我的Git仓库中(假设我的Git仓库已经更新到第124个版本)?
谢谢。
我有两个代码仓库,一个在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
。
--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
) 假设标准的 trunk/ branches/ tags/ 布局,但你可以按照任何方式进行布局(请参考 git-svn 的手册
)。
映射是双向的,因此您可以像使用本地 (git) 远程一样推送和拉取。无需询问。
git apply
失败,无法正确解析 svn 样式的差异的相对路径。 - the_mandrillpatch -p1
(或-p0,或任何需要剥离的内容)?哦等等。这是一个古老的问题。重点是您不需要svn风格的差异。git cherry-pick
- sehepatch
,只是有点失望git apply patch
不能做到同样的事情。 - the_mandrillgit apply --stat fix_empty_poster.patch
git apply --check fix_empty_poster.patch
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
svn diff -c 125
。这样做可以获取第 125 个版本的变更,而不是当前代码与该版本之间的变更。 - amotzg