Git存储库中的Git存储库[重复]

Posted

技术标签:

【中文标题】Git存储库中的Git存储库[重复]【英文标题】:Git repository within Git repository [duplicate] 【发布时间】:2011-05-28 20:52:43 【问题描述】:

我有一个主 git 存储库 A,我们在主项目的子目录中使用另一个 git 存储库 B 的源代码。 现在最好在这个使用的子目录中的 A 存储库中签出 B 存储库。 如果其他人随后克隆了存储库,他当然应该获得我们的主存储库 A,并在其中自动获取 B 存储库。

让我可视化目录结构:

+ main_repository - 主存储库的根目录 + src - 包含源代码的目录 + foreignRepo - 这应该是另一个 git repo 的根目录 + 二进制文件 + 其他

这必须在远程存储库中也知道,只是本地副本对我没有帮助,因为其他人检查了这个并且必须能够编译所有东西。

【问题讨论】:

一篇博文解释了每种方法的优缺点Git Submodule: Git Subtree。 【参考方案1】:

在 git 版本 1.7.11 及更高版本中使用 git subtreegit subtree is superior to git submodule 因为:

简单工作流的管理很容易。旧版本的 git 是 支持(甚至在 v1.5.2 之前) 超级项目的克隆完成后,子项目的代码就可以使用了 git subtree 不需要您的存储库的用户学习任何新内容,他们可以忽略您使用子树来管理依赖项这一事实 git subtree 不会像 git submodule 那样添加新的元数据文件(例如 .gitmodule) 可以修改子树的内容,而无需在其他地方拥有依赖项的单独存储库副本

另外,如果您需要detach a subtree of your existing repository into a new repository,git subtree split 可以帮助您。

2020 年 2 月更新:现在我更喜欢 subrepo。

【讨论】:

【参考方案2】:

你会想了解Git submodules。

【讨论】:

【参考方案3】:

您可以在不使用子模块的情况下嵌套两个 git repo。假设 ChildRepo 是 ParentRepo 的子目录,两者都是 git 仓库。

+ ParentRepo
  - ChildRepo

如果您将文件添加到 ChildRepo,ParentRepo 将忽略它。当您提交它时,它将被添加到 ChildRepo。无法将 ChildRepo 中的文件添加到 ParentRepo。

更多信息:Nested GIT repo gotchas!

【讨论】:

我刚刚尝试在父 repo 中嵌套一个子 repo。当我将文件添加到子仓库时,我做了 cd ../git status 并且父仓库 not 忽略了新文件。 您需要将ChildRepo 放入.gitignore 吗?

以上是关于Git存储库中的Git存储库[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何丢弃 GIT 存储库中未经检查的更改 [重复]

如何将文件从一个文件夹移动到同一git存储库中的另一个文件夹保留历史记录[重复]

如何从 git 存储库中删除文件而不实际删除文件 [重复]

Git - 在线存储库中有未跟踪的文件[重复]

如何将 Git 存储库转换为嵌套在另一个(父)Git 存储库中的子模块?

如何在某个 Git 存储库中获取 Git 存储库的名称?