【问题标题】:splitting a project into multiple git repositories将一个项目拆分为多个 git 存储库
【发布时间】:2015-01-23 12:26:23
【问题描述】:

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

/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 multiple-repositories


    【解决方案1】:

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

    其他选项有:

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

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

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

    这并不是一个理想的场景,但它通常可以工作。只需稍微整理一下,并记住“libs”子目录是一个单独的 git 存储库。

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

    【讨论】:

      【解决方案2】:

      标准规则是:一起开发、版本化和发布的所有内容都放在一个存储库中。因此,具有独立版本号的项目部分会进入它们自己的存储库。

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

      按照这条规则,我想说所有东西都应该放在一个大仓库中。


      关于哪台服务器上需要哪些数据:您可以有一些部署过程来仅复制所需的内容,或者您​​只需检查所有内容。从您的问题来看,拥有一切可用似乎并没有什么坏处。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-08
        • 2015-10-28
        • 2015-01-02
        • 2011-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多