如何在一个项目中使用两个GIT仓库?(git子模块,子树)

3
我们正在开发一个项目,其中包含多个文件夹,其中一些如下所示:-
核心 贡献 供应商 语言 皮肤 配置
我们已经将该项目部署在10个不同的服务器上,为10个不同的客户提供服务,前3个文件夹的内容(对所有客户都是通用的)相同,但是最后3个文件夹的内容因每个客户而异,我想知道如何在git中维护这种情况。
目前,我们有一个仓库,其中包含前3个文件夹的代码(对所有客户都是通用的),并且使用gitignore避免了其余3个文件夹。
我想知道是否可以为每个客户创建10个配置分支或仓库,其中包含最后3个文件夹的数据(对每个客户都有所不同)。我已经研究了子模块和其他一些解决方案,但如果有人能为我提供良好的架构指导,那就更好了。
4个回答

1

子模块允许将外部代码仓库嵌入到源代码树的专用子目录中,并始终指向特定的提交。


git submodule

将大型项目拆分为子项目,就像您所描述的那样。
将每个部分放入其自己的仓库中;

现在使用以下命令将每个子项目添加到您的主项目中:

git submodule add <url>

一旦将该项目添加到您的存储库中,您需要初始化并更新它。
git submodule init
git submodule update

截至Git 1.8.2,新增选项--remote
git submodule update --remote --merge

将会从每个子模块中获取最新更改,合并它们,并检出子模块的最新版本。

文档所述:

--remote

此选项仅适用于更新命令。使用子模块的远程跟踪分支状态来更新子模块,而不是使用超级项目记录的SHA-1。

这相当于在每个子模块中运行git pull。


然而,在影响与父级层共享代码的C语言错误修复情况下,我该如何推送提交? 再次强调:使用子模块将使您的代码作为其内容的一部分放置在主项目中。 在文件夹内本地拥有它和作为子模块的一部分之间的区别在于,子模块中的内容由不同的独立存储库管理(提交)。
这是子模块的示例 - 一个项目内包含另一个项目,其中每个项目都是独立的项目。

enter image description here


git subtree

Git子树允许您将任何存储库作为另一个存储库的子目录插入

submodule非常相似,但主要区别在于代码的管理方式。在子模块中,内容放置在单独的存储库中,并在那里进行管理,这使您可以将其克隆到许多其他存储库中。

subtree将内容作为根项目的一部分进行管理,而不是在单独的项目中。

您可以直接阅读这篇优秀的文章来了解如何设置它以及如何使用它,而不是编写说明文档。

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/


0
如果您想将项目分成多个存储库,我建议您使用谷歌开发的repo来管理Android项目,以管理多个git存储库。为每个客户端编写清单文件以维护所有项目非常方便。

使用两个远程仓库,从各自的远程仓库推送和拉取更改,这个方案怎么样? - Sameer
@Sameer,您可以在清单文件中为每个存储库指定不同的远程地址。通过repo,您可以单独或整体操作每个存储库。 - gzh

0
不要将整个git库部署到每个客户端上。相反,为每个客户端存储一个目录的配置,并拥有一个简单的部署过程,只将适当的配置目录部署到每个客户端。也就是说,在你的库中会有:
  • 核心
  • 贡献
  • 供应商
  • 配置
    • 客户端1
      • 语言
      • 皮肤
      • 配置
    • 客户端2
      • 语言
      • 皮肤
      • 配置
    • ...

当需要部署到客户端1的服务器时,你不需要发送整个git仓库及其历史记录,而是仅发送当前树(仅包含Client1的配置):

  • 核心
  • 贡献
  • 供应商
  • 语言
  • 皮肤
  • 配置

-1

为一个项目保留多个存储库并不是一个好的选择。如果您想要针对不同目的使用不同的配置,正如您所说,应该使用不同的分支。

这样你就会拥有

master -> 
   client_1
   client_2
   client_3
   ...

但是将所有内容保持在一起很困难。

另一种方法是为每个客户端保留一个配置文件,并使用该文件加载不同的文件夹。

例如:

CLIENT_1: {
   LANG: 'languages_1',
   SKINS: 'skins_1'
},
CLIENT_2: {
   ...
   ...
}

使用配置文件根据环境加载适当的文件夹。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接