4

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

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

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

我们也有模块。每个模块都有一个包含基本功能的核心,我们从该基础为每个客户个性化每个模块。

  • 所以我们有包含在每个客户项目中的子模块
  • 但我不知道如何处理子模块的个性化部分。

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

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

Ps.:我们使用 SmartGit。

4

2 回答 2

1

这是一个可以使用 git-subtree (merging) 的场景

如果您对存储库中的其他项目进行了更改,他们可能希望从您的项目中合并。使用子树可以做到这一点——它可以向上移动树中的路径,然后它们只能合并树的相关部分。

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

子树合并的想法是您有两个项目,其中一个项目映射到另一个项目的子目录,反之亦然。当你指定一个子树合并时,Git 足够聪明,可以判断出一个是另一个的子树并适当地合并——这非常了不起。

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

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

于 2011-04-27T14:25:06.453 回答
0

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

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

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

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

于 2011-04-27T14:08:01.640 回答