根据我在网上找到的资料,似乎使用git svn
不是“持久化”的。
也就是说,如果我git svn clone
一个仓库,然后推送到主分支并在另一个文件夹中重新拉取一个新的副本,那么这个新的副本完全不知道svn,并且不能用于与SVN同步,除非重新应用svn clone
。
有没有解决这个问题的方法?
根据我在网上找到的资料,似乎使用git svn
不是“持久化”的。
也就是说,如果我git svn clone
一个仓库,然后推送到主分支并在另一个文件夹中重新拉取一个新的副本,那么这个新的副本完全不知道svn,并且不能用于与SVN同步,除非重新应用svn clone
。
有没有解决这个问题的方法?
我发现最简单的方法是使用相同的参数用git svn init
克隆,然后进行update-ref和dcommit。
假设你执行了以下操作:
git svn clone -s svn://server/website
.. 以创建第一个仓库。然后你会克隆它:
git clone website website2
cd website2
初始化 git-svn:
git svn init -s svn://server/website
现在你需要更新 git-svn 远程引用,使其指向最后提交的版本,例如:
git update-ref refs/remotes/trunk refs/remotes/origin/HEAD
然后只需执行 git svn dcommit 命令重建 git-svn revmap 即可。
git svn dcommit
你应该会看到如下输出:
git svn dcommit
Rebuilding .git/svn/refs/remotes/trunk/.rev_map.dbae88...
r1 = a9cf429caa11ba5433a6526c2d327de6db2605d1
r2 = 2811ffb78c0a9e0a74208758367044710c1c0159
r4 = 1b787f296aeb98806875ca4f2bde67131720cd57
r9 = 991400ef398fad17ca14253467997d4764561cff
r11 = c5984281dd185d3dbb3bf3fa26f168f34d4e4b53
r13 = aa7678d2f9b5f87152ab09a59ea11a4643e84b6c
r14 = 1c91c959e3bbd2d41dd001a670d01abef29ae1ad
Done rebuilding .git/svn/refs/remotes/trunk/.rev_map.dbae88...
Committing to svn://server/website/trunk ...
如需更多背景信息,请查看此帖子,特别是第5点。