首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理git存储库的元存储库?

如何处理git存储库的元存储库?
EN

Stack Overflow用户
提问于 2012-10-08 09:48:48
回答 3查看 7.9K关注 0票数 6

给定项目目录中的git存储库树,例如,

代码语言:javascript
复制
Projects/
+A/
|+.git/
+B/
|+.git

我想要设置一个git存储库Projects.git,它不跟踪项目的内容,而只跟踪它们的存在和状态。克隆这个存储库的人只应该拥有一个未克隆的存储库( AB等)的骨架,并单独激活它们是否保持同步。典型的工作流如下所示:

  • 第一次设置:git clone server:Projects.git
  • 激活项目A,该项目也克隆它
  • 现在,每个git-push/pull,无论是在Projects/还是Projects/A中,都应该更新A.gitProjects.git关于A的信息。任何与B相关的信息都应该被忽略,因为它是非活动的和本地为空的。
  • 激活项目B,并克隆它
  • 现在,git-push/pull中的任何ProjectsAB中都应该这样做,而推/拉A不应该影响B
  • 停用项目A,该项目(在验证A.git不需要git-push之后)清空本地目录A,对Project.git没有影响

如何才能最好地处理这一问题?我目前的方法将是一些钩子魔术,但我还不太熟悉git子模,看它是否可以用子模块实现,或者我是否需要使用其他解决方案。

EN

回答 3

Stack Overflow用户

发布于 2019-08-08 00:54:08

“元”工具对此非常有用。

你可以在npm:https://www.npmjs.com/package/meta上找到它

您可以使用它来克隆一个元回购和所有子回购在一次,这是伟大的。

然后,您使用它将操作应用于您的所有子回购(如提取元回购和所有子回购):

代码语言:javascript
复制
cd my-repo
meta git pull

这里有一篇文章,帮助您开始使用“meta”:https://medium.com/@patrickleet/mono-repo-or-multi-repo-why-choose-one-when-you-can-have-both-e9c77bd0c668

票数 6
EN

Stack Overflow用户

发布于 2012-10-08 10:32:10

这确实是子模的目的:

跟踪每个子exact的确切配置(即精确提交SHA1)。

正如"如何在一行中对所有子模块进行克隆、递归和签出?“中详细介绍的那样,您可以在一个命令中克隆您的父级repo及其所有子模块。

正如在"子模的真性质“中解释的那样,您可以修改它们,前提是您意识到每个子模块都处于分离头模式(首先需要签出本地分支),并且需要首先提交和推送子模块,然后再回到父回购、提交和推到那里(记录新的配置,即新的子模块SHA1)。

您可以删除子模块目录,而不会损坏对该子模块的父repo引用。

托拜厄斯·肯兹勒 评论

这听起来有点像我想要的,但是在这种情况下,分离的头是无用的--当我克隆一个子模块时,它应该在它的主头上。

基本上,我正在寻找一种方法,使所有项目的本地索引可用,而不必单独克隆它们,和一个“同步所有项目,目前是克隆”的全部一体的命令。

建议看了吉特奴隶

Git奴隶创建了一组相关的存储库-一个超级项目存储库和一些从存储库-所有这些存储库都是同时开发的,所有git操作通常都应该在这些存储库上运行; 因此,当您分支时,项目中的每个存储库依次进行分支。 类似地,当您提交、推送、拉、合并、标记、签出、状态、日志等时,每个git命令将依次在超级项目和所有从存储库上运行。

票数 3
EN

Stack Overflow用户

发布于 2020-02-28 08:27:29

为什么不使用git已经提供的内容:

git子模块--静默预测--递归

代码语言:javascript
复制
git submodule foreach git checkout develop
git submodule foreach git commit
git submodule foreach git push
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12779197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档