推荐的git存储库结构

时间:2013-09-28 05:29:00

标签: git workflow

我有一个项目,它依赖于4个组件,每个组件都执行不同的任务。

在一个模块中完成的更改可能需要(但不一定)更改其他组件 我为每个单独的模块维护了一个git存储库。

So, Project
    repo1 -> Component A (PHP)
    repo2 -> Component B (NodeJS)
    repo3 -> Component C (NodeJS)
    repo4 -> Component D (JAVA)

我现在建议在整个项目中使用一个回购 但是,我很偏执,将来,如果模块的大小或结构增加,最好将模块维持在自我回购而不是单个回购。

我想实现以下目标:

  • 这些组件中的每一个都将位于不同的服务器上
  • 易于未来的发展和维护
  • 将组件自动部署到各自的服务器

推荐的git结构/工作流程是什么?

<子> 备注:
整个代码库仍然是本地的 我尝试使用子树,现在我有一个项目保留了其他组件的所有提交,我不确定在使用子树后,如果将来将模块拆分为单独的git repo是可能的。 (我听说not good things关于子模块,所以还没试过。

1 个答案:

答案 0 :(得分:1)

如果它们是可以独立更新的独立项目,则将它们保存为单独的项目。不要使用子模块,不要将它们混合到一个模块中。只需独立开发它们。

如果一个组件中的更改会影响另一个组件,请使用某种API版本来处理该问题;确保当你在一个版本中进行不兼容的更改时,你更新了版本号,这样如果有人拉出那个而不是另一个,他们就会马上知道出了什么问题。

除此之外,只需将它们视为独立项目,并部署每个项目的最新版本。除此之外,没有太多需要使它复杂化。

如果它们密切相关,并且不能彼此独立存在,并且几乎每一个重大变化都需要将其中两个一起更新,那么只需在一个大型存储库中开发它们。如果事情紧密相连,将它拆分是没有意义的。使用部署脚本从一个大型存储库部署到不同的服务器。

无论你选择哪一个,都不要太担心。关于Git的一个好处是,一旦你意识到你做错了就很容易合并或拆分存储库。如果您尝试拆分方法并且结果太混乱或繁琐,请执行子树合并,现在您拥有一个统一的存储库。如果你尝试统一的方法而且它太大了?在它上面运行git filter-branch以分离出子组件的每个子目录,现在你有几个独立的存储库(在这种情况下确实保留原始存储库,所以你实际上有完整的统一历史记录,以防相关在将来)。