试图在Git中设置SVN repo

时间:2012-10-17 20:29:24

标签: git svn repository

我们正在测试使用git作为存储库系统而不是我们的普通svn。我们总是需要一个svn存储库。在svn中,我们将此存储库与svn propset链接为svn:externals。这确保了该特定的,使用频繁的存储库实际上只有一个全局副本。

现在我们有了git存储库,我想将SVN存储库链接到它,其方式与svn:externals基本相同。我有点成功地做到了这一点。我是git的新手,请原谅任何无知。

在纯git repo(我通过git clone gitmaster@address.org:mygitrepo克隆)中,我使用了:

git svn clone svn+ssh://svnowner@hostname.org/path/to/mysvnrepo mysvnrepo

获取其他svn存储库的副本。这很好用,我可以通过mysvnrepo目录中的git svn rebase获取SVN repo的新版本,并通过git svn dcommit提交更改。

将它与我使用的主要git存储库结合起来:

git add mysvnrepo
git commit mysvnrepo
git push

我遇到的问题是,如果我现在在其他地方克隆git repo(再次使用git clone gitmaster@address.org:mygitrepo),当我获得包含所有文件的mysvnrepo目录时,我无法与SVN repo交互。我得到错误:“无法在git svn rebase之后确定工作树历史记录中的上游SVN信息”。可能相关,当我在其他地方克隆它时,mysvnrepo目录中没有.git文件夹(这是svn信息存储在原始仓库中的地方)。

我已经搜索了一下这个问题,但所有对它的引用似乎都让svn repo首先出现问题,而我的问题是让它为另一个用户工作。

也许我的问题是如何成功添加/提交/推送svn repo到git repo?即:git add mysvnrepo; git commit mysvnrepot; git push;正确的方法吗?

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

1 个答案:

答案 0 :(得分:2)

您尝试做的事情是将一个git存储库包含在另一个存储库中,就像使用svn:externals一样。恰好是包含的存储库是使用git svn创建的;这对于如何将该存储库包含在另一个存储库中并不会产生任何影响。

您需要将要包含的git存储库放在其他公开的地方。然后,您可以使用git submodulegit subtree来添加它。这两项工作都不像svn:externals;但是,git subtree可能对git存储库的其他用户更友好。

根据您使用的语言和软件的不同,您还可以考虑为经常使用的存储库创建一个单独的git存储库,并将其构建为自己的独立库,jar文件或者您拥有的库。

如果您计划完全切换到git,以上情况才有效。如果您的某些团队要继续在SVN工作一段时间,git substreegit submodule将不适合您。

相反,请查看this question以使用git svn模拟svn:externals。

要设置每个人使用git,请按照git svn手册页中“基本示例”下的最后一个示例进行操作。每个人都可以git clone然后在本地运行一些命令,而不是完整的git svn clone