gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:50:39 27 4
gpt4 key购买 nike

我们正在处理一个有多个文件夹的项目,其中一些文件夹如下:-

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

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

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

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

最佳答案

Submodules allow foreign repositories to be embedded within a dedicated subdirectory of the source tree, always pointed at a particular commit.


git 子模块

按照您的描述将您的大项目分解为子项目。
将每个部分设置在其自己的 repo 中;

现在将每个子项目添加到您的主项目中,使用:

git submodule add <url>

将投影添加到您的存储库后,您必须对其进行初始化和更新。

git submodule init
git submodule update

Git 1.8.2 开始,添加了新选项 --remote

git submodule update --remote --merge

获取每个子模块中来自上游的最新更改,将它们 merge 到,并检查子模块的最新版本。

作为the docs描述一下:

--remote

This option is only valid for the update command. Instead of using the superproject’s recorded SHA-1 to update the submodule, use the status of the submodule’s remote-tracking branch.

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


However, how would I push a commit in the scenario of bug fix in C which affects the code shared with the parent layers?

同样:使用子模块会将您的代码作为其内容的一部分放入主项目中。将其放在本地文件夹内或将其作为子模块的一部分之间的区别在于,在子模块中,内容被管理(提交)到不同的独立存储库。


这是子模块的图示 - 另一个项目中的项目,其中每个项目都是一个独立的项目。

enter image description here


git 子树

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

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

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

与其写下如何设置它和了解如何使用它,您可以简单地阅读这篇优秀的文章,它会解释这一切。

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

关于git - 如何在项目中使用 2 个 GIT Repos? (git子模块,子树),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35950201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com