2

我是 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 中进行设置?

4

2 回答 2

4

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

其他选项包括:

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

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

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

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

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

于 2015-01-23T13:39:34.840 回答
4

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

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

按照这条规则,我会说一切都应该放在一个大回购中。


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

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

于 2015-01-23T14:19:25.140 回答