繁体   English   中英

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

[英]How can I get git to add files already tracked under another git repository?

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

您可能确实希望非常类似于子模块(但可能不需要文字子模块)。 例如,一个大型项目由一定数量的N个子项目组成(N> 1),这似乎很普遍,出于良好的来源和/或组织原因,每个子项目都应具有自己的git。回购。

子模块允许您拥有一个大的“超级容器”,该容器可以简单地调用所有子模块:

super
    sub1
    sub2
    sub3

在这里,每个子模块都是独立的(据其所知/在乎),而“ super”仅收集这三个模块。

问题是,在开发过程中,您经常(但并非总是)想要从每个子项目中获取“分支devel最新信息”。 但是,子模块跟踪特定的提交-提交sub1的e01ab7c,sub2的58125f7等,这可能不是“最新的”。 当然,您可以进入每个子项目并使用“ git co devel”移动分支,然后转到超级项目并修复每个子模块以指向该子模块,但是如果您可以告诉git一定会很方便。 “只是让我了解每个子模块的分支devel技巧”。

但是git不会那样做。 我们使用大量的脚本(虽然有些不稳定)来实现这些目标。 (它还会收集跨多个子模块的提交,因为有时更改会影响例如上述示例中的sub1sub3 。)

您尚未澄清您的问题,所以我给您一些答案。

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

如果您确实希望嵌套库能够得到适当的处理,那么您需要一个子模块-这是一个回购中的一个回购,由git submodule命令管理。 请查看联机帮助页或在线文档

如果您想同时使用这两种方法,则可以使用git-subtree ,它可以将单独的存储库合并到子树中,然后将其拆分以将其合并回另一个存储库中。 它并非没有复杂性,因此在决定使用它之前,请务必熟悉其文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM