我们正在开发一个包含多个文件夹的项目,其中一些文件夹如下: -
核心
的Contrib
卖方
语言
皮肤
配置
我们已经为10个不同的客户端在10个不同的服务器上部署了项目,前3个文件夹的内容对于所有客户端是相同的(通用),但是最后3个文件夹的内容因每个客户端而异,我想知道如何我们会用git来维护它。
目前我们有1个存储库,其中包含前3个文件夹的代码(所有客户端通用),其余3个文件夹已通过gitignore避免使用。
我想知道我们是否可以为每个客户端制作10个配置分支或存储库,其中包含最后3个文件夹的数据(每个客户端有所不同),我已经完成了子模块和其他一些解决方案,但是如果有人可以为我指导一个良好的架构,那么仍然可以。
答案 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中的错误修复方案中推送提交,这会影响与父层共享的代码?
再次:使用子模块会将代码放在主项目中作为其内容的一部分。将它本地放在文件夹中或将其作为子模块的一部分之间的区别在于,在子模块中,内容被管理(提交)到不同的独立存储库。
这是子模块的一个例子 - 项目在另一个项目中,每个项目都是一个独立的项目。
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部署到每个客户端。相反,将每个客户端的配置存储在一个目录中,并具有一个简单的部署过程,该过程仅将适当的配置目录部署到每个客户端。也就是说,在您的回购中,您将拥有:
当需要部署到client1的服务器时,你不会发送整个git repo及其历史记录,而只发送当前树(只有Client1&#39的配置):< / p>