如何让 git 添加已在另一个 git 存储库下跟踪的文件?

问题描述 投票:0回答:3

在某个目录中创建一个 git 存储库。添加该目录中的所有文件并提交它们。然后在父目录中创建另一个 git 存储库并添加所有文件。将该存储库克隆到其他地方。请注意,克隆存储库中缺少子存储库中的文件。如何让 Git 添加嵌套存储库中的所有文件?请注意,我不需要子模块 - 我还希望添加嵌套存储库中的文件。

git
3个回答
1
投票

您可能确实想要一些非常类似于子模块的东西(但可能不是字面子模块)。例如,一个由 N 个子项目 (N > 1) 组成的大型项目似乎相当常见,出于良好的源和/或组织原因,每个子项目都应该有自己的 git回购。

子模块允许您拥有一个大的“超级容器”,只需调用所有子模块即可:

super
    sub1
    sub2
    sub3

这里每个子模块都是独立的(无论如何,就其所知/关心而言),“超级”仅收集三个子模块。

问题是,在开发过程中,您经常(但并非总是)想要每个子项目的“分支上最新的内容

devel
”。然而,子模块会跟踪特定的提交——提交 sub1 的 e01ab7c、sub2 的 58125f7 等,这可能不是“最新的”。您当然可以进入每个子项目并“git co devel”来移动分支,然后转到超级项目并修复每个子模块以指向该分支,但如果您可以告诉 git 肯定会很方便“给我每个子模块的分支
devel
的提示”。

但是 git 不会这么做。我们使用一个庞大的(并且有些片状的)脚本来实现这些目标。 (它还收集跨越多个子模块的提交,因为有时更改会影响,例如,上述示例中的

sub1
sub3
。)


0
投票

你的问题还没弄清楚,我就给你几个答案吧。

如果您实际上不再关心这个子目录作为单独的存储库,而只想将其折叠到父存储库中,即您根本不需要嵌套存储库,只需将存储库的contents复制到.您也可以简单地从已克隆的目录中删除 .git 目录。

如果您确实想要一个嵌套存储库,并进行适当处理,那么您需要一个子模块 - 这是存储库中的存储库,使用

git submodule
命令进行管理。查看联机帮助页或在线文档

如果您想同时拥有这两种方式,您可以使用

git-subtree
,它可以让您将单独的存储库合并到子树中,然后将其拆分以将其合并回另一个存储库。它并非没有复杂性,因此在决定使用它之前一定要熟悉它的文档。


0
投票

@卡斯卡贝尔:

我在尝试创建 MPLab Harmony3 配置快照时遇到了同样的问题。我实际上并不关心其中有什么,只是这样我可以在 MCC 中更改它,提交它,然后使用 git clone 进行复制。

我知道这并不是一件愚蠢的事情,因为 Harmony3 生成重复配置是一个巨大的痛苦。

如果有更好的方法,我很想听听。

谢谢, 大卫

PS:提前道歉在这个问题中提出另一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.