给定项目目录中的 git 存储库树,例如
Projects/
+A/
|+.git/
+B/
|+.git
Run Code Online (Sandbox Code Playgroud)
我想设置一个 git 存储库Projects.git,它不跟踪项目的内容,而只跟踪它们的存在和状态。克隆这个存储库的人应该只有一个未克隆的存储库等的骨架A,B并单独激活它们是否保持同步。典型的工作流程如下所示:
git clone server:Projects.gitA,它也会克隆它git-push/pull,独立于它是否在Projects/或Projects/A应该更新两者A.git 和 Projects.git关于 的信息A。任何相关的都B应该被忽略,因为它是不活动的并且本地是空的B,也克隆它git-push/pullinProjects也应该在Aand 中这样做B,而推/拉A不应该影响BA,它(验证后A.git不需要a git-push)清空本地目录A,不影响Project.git怎样才能最好地治疗?我目前的方法是一些钩子魔术,但我对git 子模块不够熟悉,看不到这是否可以通过子模块来实现,或者我是否需要使用其他一些解决方案。
“元”工具对此非常有用。
你可以在 npm 上找到它: https: //www.npmjs.com/package/meta
您可以使用它一次性克隆元存储库和所有子存储库,这非常棒。
然后,您可以使用它对所有子存储库应用操作,例如拉取元存储库和所有子存储库:
cd my-repo
meta git pull
Run Code Online (Sandbox Code Playgroud)
这里有一篇文章帮助开始和使用“元”: https: //medium.com/@patrickleet/mono-repo-or-multi-repo-why-choose-one-when-you-can-have-两者-e9c77bd0c668
这确实是子模块的用途:
\n跟踪每个子存储库的确切配置(即确切的提交 SHA1)。
正如“如何在一行中对所有子模块进行 git clone --recursive 和 checkout master? ”中详细介绍的,您可以在一个命令中克隆父存储库及其所有子模块。
\n\n正如“子模块的真实本质”中所述,您可以修改它们,前提是您意识到每个模块都处于DETACHED HEAD模式(您需要首先签出本地分支),并且您需要首先提交并推送子模块,在返回父存储库之前,提交并推送到那里(以记录新配置,即新子模块 SHA1)
\n\n您可以删除子模块目录,而不会损坏对该子模块的父存储库引用。
\n\n这听起来有点像我想要的,但在这种情况下,分离的头相当无用 - 当我克隆子模块时,它应该位于它的主头。
基本上,我正在寻找一种方法来获得所有可用项目的本地索引,而不必单独克隆它们,以及“同步当前克隆的所有项目”一体化命令。
\n\ngitslave 创建一组相关的仓库\xe2\x80\x94a 超级项目仓库和多个从属仓库\xe2\x80\x94,所有这些仓库都是同时开发的,并且所有 git 操作都应该在其上正常运行;
\n
\n 因此,当您进行分支时,项目中的每个存储库都会依次分支。
\n 同样,当你提交、推送、拉取、合并、标记、结帐、状态、日志等时;每个 git 命令将依次在超级项目和所有从属存储库上运行。
| 归档时间: |
|
| 查看次数: |
6252 次 |
| 最近记录: |