在git-svn项目中使用git子模块

时间:2010-12-23 14:37:05

标签: git git-svn git-submodules

在我们的git-svn托管项目中,我们有3个上游项目都保存在GitHub上的本机git存储库中。由于这些上游项目的源代码在我们的控制下并且经常变化,我们当前的解决方案,即每次我们改变某些东西时将构建工件重新部署到超级项目都非常麻烦。

我想要的是:

parent project (git-svn):
    --> submodule 1 (git)
    --> submodule 2 (git)
    --> submodule 3 (git)

这样,子模块1-3的源代码与超级项目的源代码一起编译,但我可以单独将更改推送到子模块。

问题是:当我在父项目上git svn dcommit时会发生什么?这甚至有效吗?

更新 嗯,我只是设置了一个简单的项目结构,尝试类似于这个场景,并且在尝试在超级项目上进行dcommit时收到此错误消息:

a0301b11f3544a1e71067ff270eded65e4c8afbd doesn't exist in the repository at /opt/local/libexec/git-core/git-svn line 4775
Failed to read object a0301b11f3544a1e71067ff270eded65e4c8afbd at /opt/local/libexec/git-core/git-svn line 574

有任何想法/建议吗?

2 个答案:

答案 0 :(得分:10)

你不能这样做,git子模块不能通过git-svn上传到svn存储库,它不支持这个。

答案 1 :(得分:5)

git-svn不允许这样做,但是如果您可以访问SVN存储库服务器,则可以在其中安装SubGit。它将为您创建一个链接的Git存储库,这样任何推送都将自动转换为SVN版本,反之亦然。之后,您可以将子模块添加到生成的Git存储库,并使用纯Git接口与SVN存储库一起使用。这些Git子模块不会被转换为SVN。

翻译是并发安全且相当透明(svn:忽略将被转换为Git忽略,EOL转换为.gitattributes,标签转换为标签等)。