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

时间:2015-01-23 12:26:24

标签: git multiple-repositories

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

/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 dir变成服务器之间的共享挂载。目前所有内容都设置为共享挂载,但由于多种原因,这很糟糕。

如何在git中设置它?

2 个答案:

答案 0 :(得分:3)

标准规则是:开发,版本化和一起发布的所有内容都集成到一个存储库中。因此,具有独立版本号的项目的一部分将进入他们自己的仓库。

原因是git中的分支和标记总是在整个存储库中(与Subversion不同)。

按照这个规则,我会说一切都应该进入一个大的回购。


关于哪个服务器上需要哪些数据:您可以使用一些只复制所需内容的部署过程,或者只检查所有内容。从你的问题来看,让一切都可用会让你觉得不舒服。

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

答案 1 :(得分:1)

在两种环境中使用相同的git存储库是否真的有害?除非有一些非技术性的政策原因,为什么你需要不同的存储库,所以拥有一个单独的存储库以及在每个上下文中仅使用你需要的东西是没有害处的。这是最简单的事情,并且引起最少的混淆。

其他选项包括:

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

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

这是git并没有真正处理得很好的一件事 - 拥有一个单独的存储库层次结构。我在我的一个项目中使用了第二种方法,其中包括几个顶级源代码库和一些共享模块。每个顶级项目都是原始项目中的一个单独分支。要处理顶级项目,我将主存储库克隆到新的工作目录中,然后克隆工作目录中“libs”子目录中的共享模块存储库。

这不是一个理想的场景,但它通常有效。只需要有点组织,并记住“libs”子目录是一个单独的git存储库。

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