Git 将子模块文件永久添加到主存储库

Git 将子模块文件永久添加到主存储库,git,git-submodules,Git,Git Submodules,我有一个普通的存储库$main,没有子模块。在它里面,我使用git clone将库$lib添加到/3rdparty/$lib中 另外,$lib存储库包含我初始化和更新的几个子模块 所以$main注意到$lib的子模块是子mobule,不会将它们的文件推送到$main中 我可以将此子模块永久添加到$main中吗?如果$lib是一个子模块(正如您所说,我想您克隆了它),$lib应该被识别为git repo并添加为子模块,$lib本身应该跟踪它自己的子模块 $main不应该在$lib中找到任何内容,如

我有一个普通的存储库$main,没有子模块。在它里面,我使用
git clone
将库$lib添加到/3rdparty/$lib中

另外,$lib存储库包含我初始化和更新的几个子模块

所以$main注意到$lib的子模块是子mobule,不会将它们的文件推送到$main中

我可以将此子模块永久添加到$main中吗?

如果$lib是一个子模块(正如您所说,我想您克隆了它),$lib应该被识别为git repo并添加为子模块,$lib本身应该跟踪它自己的子模块

$main不应该在$lib中找到任何内容,如果它找到了,就会出现问题

从技术上讲,您应该能够将子模块添加到超级项目中,并将其作为子模块添加到其中一个超级项目子模块中,但是在签出和工作树更新过程中可能会发生冲突,这真的很糟糕

您还应该使用git子模块add,而不是在超级项目中进行git克隆。git子模块add(以及子模块init/update等)将把.git dir放在superprojects.git dir中,这将允许git更好地处理子模块(例如,在不需要它们时从工作树中删除它们)


作为底线,您不能推送文件,您可以添加对文件的更改以提交,您可以推送提交。

$lib不是$main的子模块,我手动将$lib克隆到$main内的目录中,因此$main可以查找$lib的文件,但不能查找$lib子模块的文件。我认为手动添加回购协议是一种糟糕的做法,但我确实需要避免使用子模块。(因为主项目不使用子模块,所以build server get source by git clone而不使用submodules init,而且我没有访问build server设置的权限。)您不知道如何从$main隐藏$lib子模块的基本子模块,或者以任何其他方式避免子模块吗,实际上,您不应该看到$lib中的文件(也不应该在$libs子模块中看到),因为git将威胁到作为子模块(添加或不添加)的工作树中的git repos。子模块的替代品是子树,请看:但是我建议您修复构建系统。当然还有其他糟糕的解决方案,比如删除或隐藏.git目录,将所有内容作为常规文件添加,然后在需要更新时重新克隆。好吧,我会尝试子树,谢谢。我想知道为什么git clone在默认情况下不能递归地获取所有源代码。