如何在项目中使用2 GIT Repos? (git子模块,子树)

时间:2016-03-11 21:25:17

标签: git

我们正在开发一个包含多个文件夹的项目,其中一些文件夹如下: -

核心

的Contrib 卖方
语言
皮肤
配置

我们已经为10个不同的客户端在10个不同的服务器上部署了项目,前3个文件夹的内容对于所有客户端是相同的(通用),但是最后3个文件夹的内容因每个客户端而异,我想知道如何我们会用git来维护它。

目前我们有1个存储库,其中包含前3个文件夹的代码(所有客户端通用),其余3个文件夹已通过gitignore避免使用。

我想知道我们是否可以为每个客户端制作10个配置分支或存储库,其中包含最后3个文件夹的数据(每个客户端有所不同),我已经完成了子模块和其他一些解决方案,但是如果有人可以为我指导一个良好的架构,那么仍然可以。

4 个答案:

答案 0 :(得分:1)

  

Submodules 允许将外部存储库嵌入到源树的专用子目录 中,总是指着一个特定的提交。

git submodule

按照你的描述将你的大项目分解为子项目 将每个部分设置在自己的仓库;

现在使用以下方法将每个子项目添加到主项目中:

git submodule add <url>

将预测添加到您的仓库后,您必须初始化并更新它。

git submodule init
git submodule update

Git 1.8.2 添加了新选项--remote

git submodule update --remote --merge

fetch 每个子模块中上游的最新更改 merge them in check out 子模块的最新版本。

正如the docs所描述的那样:

  

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为一个项目保留多个存储库不是一个好方法。如果你想要不同的配置用于不同的目的,正如你所说,你应该选择不同的分支。

然后你会有

master -> 
   client_1
   client_2
   client_3
   ...

但是,尽管如此,保持一致仍然很困难。

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

像:

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

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

答案 3 :(得分:0)

不要将您的整个git repo部署到每个客户端。相反,将每个客户端的配置存储在一个目录中,并具有一个简单的部署过程,该过程仅将适当的配置目录部署到每个客户端。也就是说,在您的回购中,您将拥有:

  • 核心
  • 的Contrib
  • 供应商
  • CONFIGS
    • 客户端1
      • 语言
      • 外观
      • 配置
    • 客户机2
      • 语言
      • 外观
      • 配置
    • ...

当需要部署到client1的服务器时,你不会发送整个git repo及其历史记录,而只发送当前树(只有Client1&#39的配置):< / p>

  • 核心
  • 的Contrib
  • 供应商
  • 语言
  • 外观
  • 配置