我们正在测试使用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
;正确的方法吗?
编辑:改进以提供更多上下文
答案 0 :(得分:2)
您尝试做的事情是将一个git存储库包含在另一个存储库中,就像使用svn:externals
一样。恰好是包含的存储库是使用git svn
创建的;这对于如何将该存储库包含在另一个存储库中并不会产生任何影响。
您需要将要包含的git存储库放在其他公开的地方。然后,您可以使用git submodule或git subtree来添加它。这两项工作都不像svn:externals
;但是,git subtree
可能对git存储库的其他用户更友好。
根据您使用的语言和软件的不同,您还可以考虑为经常使用的存储库创建一个单独的git存储库,并将其构建为自己的独立库,jar文件或者您拥有的库。
如果您计划完全切换到git,以上情况才有效。如果您的某些团队要继续在SVN工作一段时间,git substree
或git submodule
将不适合您。
相反,请查看this question以使用git svn
模拟svn:externals。
要设置每个人使用git,请按照git svn手册页中“基本示例”下的最后一个示例进行操作。每个人都可以git clone
然后在本地运行一些命令,而不是完整的git svn clone
。