从我在网络上找到的内容来看,似乎使用git svn
并非“持久”。
意思是,如果我git svn clone
是一个存储库,那么推送到一个单独的文件夹中掌握并重新发送一个新副本,新副本根本不知道svn,并且不能在不重新应用的情况下与SVN同步svn clone
。
有没有解决这个问题的方法?
答案 0 :(得分:5)
克隆基本上只是初始化一个新的git存储库,设置origin
远程,运行git fetch
,并根据远程存储库的HEAD
创建一个分支。这些操作都不会查看远程存储库中的.git/svn
信息 - 我认为除远程存储库的git目录中的refs
,objects
和HEAD
之外的所有内容都被视为私有的。
至于解决这个问题的方法,您可以始终rsync -a
或scp -r
远程存储库而不是克隆它(这应该有效) - 应该复制所有Subversion元数据。
然而,就我个人而言,我总是发现只有一个git svn
克隆的存储库可以git svn dcommit
来解决这个问题,并且只要我想向Subversion提交任何内容,就会回到该存储库。然后那些其他存储库只是普通的git存储库,你不需要担心git svn
的任何限制,直到你回到git svn
克隆,此时你通常需要做一些垫底...
答案 1 :(得分:1)
我发现最简单的方法是使用与创建第一个git-svn克隆相同的参数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 ...
有关更多背景信息,请查看this post,尤其是第5点。
答案 2 :(得分:0)
GIT-SVN SNIPPETS:http://marcocattai.posterous.com/git-svn-snippets
我希望它们有用。