我的公司(咨询)正在为另一家公司(客户)开发。 consultancy 项目的两位主要工程师(负责 iOS 和负责 Android)具有登录 customers git 的功能,用于维护源代码。除此之外,我们(咨询)有一个内部 git 设置供我们的开发人员使用。
为了管理已完成的内部工作,它被提交给内部 git,并由其中一位线索测试并合并到 customers git,以向客户发布源代码。
我们正在进行的一个项目需要使用一个子模块库,由另一家咨询公司为客户管理。我们的两个主要开发人员可以访问此子模块,因为我们可以访问 customers git 存储库。
是否可以在本地 git 上创建子模块的本地版本以供其他开发人员访问并在外部 git 存储库上维护 git 子模块地址?
是否可以在本地 git 上创建子模块的本地版本以供其他开发人员访问,并在外部 git 存储库上维护 git 子模块地址?
这是使用子模块的原因之一。
git submodule
是一个独立的 git 存储库,包含在另一个 git 存储库中。
来自医生:
允许将外部存储库嵌入源代码树的专用子目录中,始终指向特定提交。Submodules
如上所述,子模块内容从独立存储库获取到当前存储库内的文件夹。对子模块文件夹的任何修改都不会出现在根文件夹中
git status
根文件夹上不会显示它们。
总结一下:子模块正是您所需要的。
是否可以根据 git 分支有两个不同的子模块?
哦,是的,当然。
我们主存储库中的子模块只是相应上游存储库的提交 sha id。也就是说,我们所需要的只是初始化主存储库中指向两个不同分支的两个子模块。以下命令应该会很清楚:
$ git submodule add path-to-sub-module-upstream sub-module-master-directory
$ git submodule add path-to-sub-module-upstream sub-module-prod-directory
$ git config -f .gitmodules submodule.sub-module-master-directory.branch master
$ git config -f .gitmodules submodule.sub-module-prod-directory.branch production
$ git commit -m 'added two sub-modules for master and production branches'
此外,您还可以使用
$ git diff --cached --submodule
来验证要提交的内容
是否可以在本地 git 上创建子模块的本地版本以供其他开发人员访问,并在外部 git 存储库上维护 git 子模块地址?
子模块在很多方面都表现为独立项目,仍然是我们主存储库的一部分。子模块代码的开发可以通过两种简单的方式进行,不需要我们学习任何额外的命令
我们要么独立检查它们,然后执行所有排序 git 命令,如状态、差异、分支、添加、提交、拉取、推送...
或者我们也可以更新作为主存储库一部分的子模块的代码。以最简单的方式,我们需要做的就是进入子模块目录,感觉就像在独立签出的项目中一样。所以,我的基本意思如下:
$ cd sub-module-master-directory
$ git status/diff/add/commit/push/pull #WHATEVER you can practically do inside an independently checkout project
发布我们可以转到主存储库目录并提交/推送子模块存储库的最新引用。或者,如果您想了解它,请为子模块创建一个提交后/推送挂钩,它会自动更新主存储库上子模块提交的引用。