Git子模块管理策略

时间:2011-04-27 13:54:28

标签: git git-submodules smartgit

我们使用GIT来管理我们的项目。

每个项目都有一个“核心”(就像我们构建项目的框架一样)所以每个项目至少有2个远程分支:

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

我们也有模块。每个模块都有一个包含基本功能的核心,我们为每个客户端的每个模块建立个体化。

  • 所以我们有每个客户项目中包含的子模块
  • 但我无法弄清楚如何处理子模块的个性化部分。

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

由于文件是针对主项目的个性化,最好的情况是提交客户项目分支中子模块中包含的一些文件,但看起来我不能,因为每个子模块都是独立的。

Ps。:我们使用SmartGit。

2 个答案:

答案 0 :(得分:1)

这是您可以使用git-subtree(合并)

的方案
  

如果您对另一个进行了更改   在您的存储库中的项目,他们可能   想要从您的项目合并。这个   可以使用子树 - 它可以   向上移动树中的路径   然后他们只能合并相关的   树的一部分。

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

  

子树合并的想法是这样的   你有两个项目,其中一个   projects映射到的子目录   另一个,反之亦然。当你   指定子树合并,Git很聪明   足以弄明白一个是一个   另一个子树并合并   恰当 - 这真是太神奇了。

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

但我想你想要使用子模块而不是远离它。

答案 1 :(得分:0)

  

我不能因为每个子模块都是独立的。

虽然子模块是“独立的”,但由于它有自己的一组提交和分支作为单独的存储库,您仍然可以在所述子模块上定义客户端项目分支。

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

简而言之,命名约定可以帮助您隔离在许多客户端项目存储库使用和共享的核心子模块中完成的小的特定更改。