问题描述
|
从网上可以发现,使用
git svn
似乎不是\“ persisted \”。
意思是,如果我“ 1”个存储库,然后将其复制到主文件夹并重新拉到另一个文件夹中,则该新副本根本不知道svn,并且在不重新应用“ 2”的情况下不能用于与SVN同步。
有没有解决这个问题的方法?
解决方法
克隆实际上只是初始化一个新的git存储库,设置
origin
远程服务器,运行git fetch
,并基于远程存储库的HEAD
创建分支。这些操作都不会查看远程存储库中的.git/svn
信息-我认为远程存储库git目录中除refs
,objects
和HEAD
以外的所有内容都被视为私有。
至于解决方法,您总是可以在远程存储库上按rsync -a
或instead11ѭ而不是克隆它,这应该起作用-应该复制所有Subversion元数据。
但是,就我个人而言,我总是发现只有一个我从中进行git svn dcommit
克隆的git svn
克隆存储库,并在我想向Subversion提交任何内容时将其推回该存储库,这会减少混乱。然后这些其他存储库只是普通的git存储库,您无需担心git svn
的任何限制,直到您回到push0ѭ克隆为止,此时通常需要进行一些基础调整...
,我发现最简单的方法是使用与创建第一个git-svn克隆相同的参数对克隆进行“ 16”复制,然后使用update-ref和dcommit。
说您做到了:
git svn clone -s svn://服务器/网站
..创建第一个仓库。然后您将其克隆:
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点。
,GIT-SVN片段:http://marcocattai.posterous.com/git-svn-snippets
我希望它们会有用。