2011-11-21 64 views
6

我们的小软件商店最近从Subversion迁移到Git,因为我们的程序员发现Git更好。迁移不是无痛的,我们遇到了子模块功能的问题。我主要的抱怨是,一旦回购包含子模块,你不能简单地克隆它,并期望事情发挥作用。您必须执行额外的步骤才能初始化并下载子模块。后续拉应该update the submodules automatically,所以没关系。但是,当我添加一个新的子模块时,按下提交和人员拉动,他们不会自动获得新的子模块,他们必须手动再次手动输入git submodule update如何让非程序员更容易使用Git子模块?

这是愚蠢的,因为人们不能简单地用子模块拉回购,并期望它建立。这种理解是否正确?程序员可以在收到新的提交之后简单地编写一个脚本或别名来更新子模块,但对于我们的非程序员子模块来说很痛苦。我想提出一个解决方案,无论使用哪个Git客户端,回购总是在克隆/提取后正常工作。

我有什么选择?

+2

您可能希望对初始克隆使用'git clone --recursive'命令,这将处理您的部分问题。 –

+0

谢谢,我不知道'--recursive'。但是我们的非程序员使用GUI客户端(当前是GitBox),这就是我寻找不同解决方案的原因。在GUI中为子模块提供一流的支持是完美的,但我不会屏住呼吸。 – zoul

+0

您确定要采用子模块路线吗?子模块应该是独立的模块,所以如果没有它们,事情就会崩溃,那么它就不是真正的独立模块。 – bluesman

回答

-1

当今子模块的支持要好得多,这个问题几乎不存在。

  • GitBox获得了良好的子模块支持。

  • SourceTree by Atlassian是一个免费的Git客户端,在1.3中增加了子模块支持。在1.3.1的子模块处理中有a small glitch,但除此之外,客户端似乎涵盖了我想要的所有子模块用例 - 也就是说,它使子模块对于非程序员来说几乎是透明的。

  • Git Tower也似乎support submodules自1.4以来非常好。

+2

请注意,这两种工具仅适用于Mac – Yogu

+2

而且它们都不是开源的。 – firegurafiku

0

如果您打算使用大量的子模块,特别是要引用“通用库”,我强烈建议使用git-slave。尽管如果用几个小时的时间集中精力进行一些实验,通过一系列场景,裸骨子模块并不难完成。

我也强烈推荐一些CI服务器来为你打造。它将抓住所有必要的子模块。您可以通过可下载的zip文件制作所有的工件(您可以决定要使用哪些工件)。我使用TeamCity,这是暴露所有内容而不需要使用任何VCS的好方法。

+0

谢谢,我不知道Git Slave。我担心它不适用于图形化的Git客户端,这对我们来说是必须的(并且还需要为混合添加第三方解决方案的成本)。我想过一个CI服务器,我们最终可能会到达那里,因为它处理大量的用例。但是非程序员仍然需要使用GUI客户端对repo进行一流的访问,所以我需要解决这个问题。不幸的是,CLI + Git研讨会不是一种选择。 – zoul

+0

我们希望很快能够看到一个明智的基于GUI的子视图。 –