将项目拆分为多个 git 个存储库

splitting a project into multiple git repositories

我是 git 的新手,我的任务是将现有项目移至 git。我遇到的问题是它实际上是 2 个项目。我们称该项目为 "One"。一个实际上既是一个报告站点,也是一组供各个项目使用的代码模板(这使报告站点能够 运行 报告项目之间的标准)。我们希望 运行 我们的开发和报告服务器上的报告站点,并在我们的开发和生产服务器上拥有代码模板。所以,有时两个存储库都需要,有时只需要一个。一个是用这样的代码结构编写的:

/one (generic main dir, no files, only sub-dirs)
  /onesource  (PHP source code for the reporting site)
  /onerept    (reports run by the reporting site)
  /onelib     (templates)
  /oneinc     (include files used by templates)
  /oneadmn    (files used by both)

因此,报告站点存储库需要包含 onesource 和 onerept 子目录,而模板存储库需要包含 onelib 和 oneinc 目录。如果需要,我可以将 oneadmn 目录设置为服务器之间的共享挂载。目前一切都设置为共享安装,但由于多种原因,这很糟糕。

如何在 git 中进行设置?

在两种环境中使用相同的 git 存储库真的有害吗?除非有一些非技术政策原因导致您需要不同的存储库,否则为所有内容使用一个存储库并在每个上下文中只使用您需要的存储库并没有什么坏处。这是最简单的事情,并且引起的混乱最少。

其他选项是:

1) 为每个环境创建一个单独的分支。使用相同的 git 存储库,但每个环境使用不同的分支。

2) 创建多个 git 存储库。一个 git 存储库用于您的共享部分,一个或多个其他 git 存储库用于单独的部分;或者可能是单独的部分的单个存储库,作为不同的分支保存。

这是 git 处理得不好的一件事 - 将不同的存储库层次结构粘合在一起。我在我的一个项目中使用了第二种方法,该项目由几个顶级源存储库和一些共享模块组成。每个顶级项目都是原始项目中的一个单独分支。为了处理顶级项目,我将主存储库克隆到一个新的工作目录中,然后将共享模块存储库克隆到工作目录的 "libs" 子目录中。

这并不是一个理想的场景,但它通常是可行的。只需稍微组织一下,并记住 "libs" 子目录是一个单独的 git 存储库。

在你的情况下,你会移动 "onelib" 和 "oneinc" 到第二个 git 存储库,并将它克隆到一个单独的子目录,称为 "shared",我想.然后,您需要更改其余代码以引用 "shared/onelib" 和 "shared/oneinc",在这种情况下。

标准规则是:所有一起开发、版本控制和发布的东西都放在一个存储库中。因此,具有独立版本号的项目部分进入他们自己的 repo。

原因是 git 中的分支和标签总是存储库范围的(与 Subversion 不同)。

根据这条规则,我会说所有东西都应该放在一个大仓库中。


至于哪个服务器需要什么数据:您可以有一些部署过程只复制需要的数据,或者您只检查所有数据。从你的问题来看,让一切都可用似乎不会有什么坏处。

无论如何,如果您需要特定服务器上的特定目录结构,那就是部署问题。存储库应该被安排用于开发,而不是用于部署。部署稍后进行,并且有自己的一套工具。