2012-10-17 43 views
5

我们正在使用git作为存储库系统进行测试,而不是使用正常的svn。有一个我们一直需要的svn仓库。在svn中,我们用svn propset作为svn:externals链接这个存储库。这确保实际上只有该特定的大量使用的存储库的全局副本。试图在Git中设置SVN回购

现在我们有了git仓库,我想以与svn:externals相同的方式将SVN仓库链接到它。我在这方面取得了一些成功。我是新来的混帐,请原谅任何无知。

在纯混帐回购协议(这是我通过git clone [email protected]:mygitrepo克隆)我用:

git svn clone svn+ssh://[email protected]/path/to/mysvnrepo mysvnrepo 

得到其他svn库的副本。这很好,我可以在mysvnrepo目录中通过git svn rebase获得对SVN回购的新修订,并通过git svn dcommit提交更改。

要结合这主要git仓库我用:

git add mysvnrepo 
git commit mysvnrepo 
git push 

我遇到的问题是,如果我现在克隆git仓库其他地方(再次git clone [email protected]:mygitrepo),而我得到的mysvnrepo目录所有的文件,我无法与SVN回购互动。在git svn rebase之后出现错误:“无法确定工作树历史记录中的上游SVN信息”。可能相关的是,当我将它克隆到别处时,mysvnrepo目录中没有.git文件夹(这是svn info存储在原始repo中的位置)。

我已搜查这个问题了一点,但它的所有引用似乎变得越来越将svn的问题摆在首位的工作,而我的问题得到它的其他用户的工作。

也许我的问题是如何成功地添加/提交/推svn回购git回购?即:git add mysvnrepo; git commit mysvnrepot; git push;正确的方法来做到这一点?

编辑:改进,可以提供更多的上下文

+0

如何克隆存储库?通过使用'git clone'或从SVN中检出它或...? – siegi

+0

你的意思是我工作的git仓库?原始的Git仓库和一个为我用'混帐克隆[email protected]其他用户都:mygitrepo' –

回答

2

什么它看起来就像你正在试图做的是包括内另外一个Git仓库中,就像你使用svn:externals。它恰好是包含的存储库是用git svn创建的;这对于如何将该存储库包含在另一个存储库中并不会产生影响。

你需要做的是要在其他公开包括地方Git仓库。然后,您可以使用git submodulegit subtree包括它的。两者都不完全像svn:externals;但是,git subtree可能对git存储库的其他用户更适合初学者。

根据你使用的是什么语言和你的软件是什么,你也可以考虑简单地为大量使用的库创建一个单独的git仓库,并将其构建为它自己的独立库,jar文件或者你有什么。

以上仅供效果很好,如果你打算切换到完全的git。如果你的一些团队会继续工作在SVN一会儿,git substreegit submodule不会为你工作。

相反,看看this question模拟svn:外部与git svn

要设置所有人使用git,请参见git svn手册页中“基本示例”下的最后一个示例。每个人都可以通过git clone在本地运行一些命令,而不是完整的执行git svn clone

+0

的问题是,我希望人们能够使用提交回从Git仓库的svn库'混帐svn dcommit'。为同样的目的创建一个全局的git仓库是可行的,但它将与svn仓库分开;这是不可取的。一种解决方案是让每个人手动混帐svn的克隆SVN仓库,那么他们就应该能够提交(像我能当我克隆它) –

+0

我已经更新了我的答案,包括你可以在安装程序做了一些细节。使用svn:externals从SVN缓慢/部分迁移到git有点尴尬。希望它不会吓跑你或你的团队;一旦你习惯了,git真的很棒。 – jbowes