2010-12-23 100 views
15

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

我想有是这样的:

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

这样一来,对于1-3的子模块的源代码与源为超级项目一起编译,但是我可以把更改子模块分别。

现在的问题是:当父项目上我git svn dcommit会发生什么?这甚至工作吗?

UPDATE 嗯,我只是成立了一个简单的项目结构,试图像这种情况下,我收到试图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 

任何意见/建议?

+0

在我们的世界中,我们使用Hudson来构建子模块并将其部署到本地存储库,例如Artifactory。 Maven被配置为抓取SNAPSHOT版本,因此他们每天都会重新部署,或者每当我们使用-U创建时。 Hudson可以配置为发送电子邮件进行新的部署。 – OleTraveler 2011-04-06 22:57:28

+0

更新重新寻找最新答案/解决方法。我认为这个问题的答案是我所寻找的:[是git svn兼容git子树?](http://stackoverflow.com/questions/13447705/is-git-svn-compatible-with-git-子树) – 2013-03-21 11:53:25

回答

10

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

5

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

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