2011-04-27 85 views
4

我们使用GIT来管理我们的项目。Git子模块管理策略

每个项目都有一个“核心”(比如从谁,我们将建立该项目的框架),所以每个项目都拥有至少2个遥控器分支:

  • 1库为核心框架。
  • 每个客户端项目1个存储库。

我们也有模块。每个模块都有一个包含基本功能的核心,并且我们将每个客户端的每个模块由该基础个人化。

  • 因此,我们必须包含在每个客户端项目
  • 子模块,但我无法弄清楚如何处理子模块的personnalization一部分。

如果我想在一个只能在1个特定客户端项目中使用的子模块中添加一些新文件,GIT如何帮助我?

由于文件是针对主项目进行个性化处理的,所以最好的情况是提交包含在客户端项目分支中的子模块内的一些文件,但看起来我不能像每个子模块都是独立的。

Ps .:我们使用SmartGit。

回答

1

这是一种情况,如果你让你的仓库中修改到其他 项目,你可以使用git子树(合并)

,他们可能 想从你的项目进行合并。这 可能使用子树 - 它可以 上移树中的路径和 然后他们可以只合并相关的 部分树。

http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html

子树合并的想法是,你 有两个项目,和 项目之一映射到 另一个反之亦然的子目录。当你 指定一个子树合并,Git是智能 足以找出一个是另一个的 子树并合并 适当 - 这是相当了不起的。

http://progit.org/book/ch6-7.html

不过,我想你想使用子模块,而不是远离它移动。

+0

我对子模块的唯一兴趣是因为如果我们修复了核心一个模块,在每个项目中应用这个改变真的很容易。 – FMaz008 2011-04-27 14:33:06

0

我不能像每个子模块是独立的。

虽然这是事实一个子模块是“独立的”,因为它有自己的一套提交和分支作为一个单独的存储库,您仍然可以定义一个客户项目分支上说,子模块。

该分支将在您的主客户端项目回购以及核心子模块中定义,以便隔离特定于两个回购中完成的客户项目的更改。
当您推回在核心子模块中完成的更改时,可以将它们推送到客户机项目分支中,该分支的名称与客户机父级回购中使用的客户机分支的名称相匹配。

简而言之,命名约定可能会帮助您隔离由许多客户端项目回购使用和共享的核心子模块中所做的小型特定更改。

+0

但是分支必须是远程才能在所有开发人员之间共享。那么这是否意味着我必须为每个客户端的每个子模块版本创建一个存储库?所以如果我使用10个子模块,我将不得不创建11个存储库来处理1个项目? – FMaz008 2011-04-27 14:25:12

+0

@ FMaz008:“每个子模块1个存储库”:子模块*已经是*回购。如果您在项目客户端中使用了10个子模块,那么您在'.submodules'文件中引用它们。无论是在母公司还是在某个子模块中创建的每个分支,都会在推送到其各自的上游回购库后共享。 – VonC 2011-04-27 14:39:38

+0

是的,我明白这一点。因此,确认我将不得不创建尽可能多的存储库,因为我将为每个项目创建子模块。 – FMaz008 2011-04-27 15:16:36