Git子模块。如何使它们完全独立?

Git子模块。如何使它们完全独立?,git,github,Git,Github,我是Github的快乐用户。随着时间的推移,我积累了一些不相关的小玩具回购。我现在想创建一个容器repo——称之为playpen,将我的各种玩具项目作为git子模块拉到父playpen下面,然后吹到源玩具repo。这些玩具只能放在玩具棚里。当我尝试使用这个食谱时:我发现了一个大问题。看,我想要完全的回购协议,让他们只住在playpen下面。当我继续在github中吹走回购协议时,我无法跟踪playpen中的链接。嗯 有人能告诉我怎么做吗?提前谢谢 欢呼, Doug子模块是将存储库链接在一起的一种

我是Github的快乐用户。随着时间的推移,我积累了一些不相关的小玩具回购。我现在想创建一个容器repo——称之为playpen,将我的各种玩具项目作为git子模块拉到父playpen下面,然后吹到源玩具repo。这些玩具只能放在玩具棚里。当我尝试使用这个食谱时:我发现了一个大问题。看,我想要完全的回购协议,让他们只住在playpen下面。当我继续在github中吹走回购协议时,我无法跟踪playpen中的链接。嗯

有人能告诉我怎么做吗?提前谢谢

欢呼,
Doug

子模块是将存储库链接在一起的一种方式,但每个子模块都是它自己完整的自包含存储库。当您将存储库添加为另一个存储库的子模块时,您只是将存储库链接在一起,而不是将数据移动到父存储库中。因此,如果不断开此链接,则无法删除作为子模块的存储库。

子模块是将存储库链接在一起的一种方式,但每个子模块都是它自己完整的自包含存储库。当您将存储库添加为另一个存储库的子模块时,您只是将存储库链接在一起,而不是将数据移动到父存储库中。因此,如果不断开此链接,则无法删除作为子模块的存储库。

您可以将各种存储库合并到一个存储库中,但不能与子模块合并。虽然我建议的方法有严重的缺点。合并玩具项目后,它们不再作为单独的项目。你不能只承诺一个项目,你必须同时承诺所有项目。类似地,您不能只分支一个项目,每个分支都是所有项目的分支。因此,如果您使用了多个分支,或者将来可能希望分支单个项目,那么请使用单独的存储库

如果您仍然希望合并各种存储库,那么您可以使用来自的部分想法。尽管您不打算保留旧的存储库,但您永远不需要使用子树合并

子树合并策略文档中的重要部分是以下命令,您应该从新容器存储库中运行这些命令:

$ git remote add -f Bproject /path/to/B
$ git merge -s ours --no-commit Bproject/master
$ git read-tree --prefix=dir-B/ -u Bproject/master
$ git commit -m "Merge B project as our subdirectory"
因为您要删除原始存储库,所以还可以删除您在开始时添加的远程存储库,这样它就不会把事情弄得一团糟

$ git remote rm Bproject

此时,您的容器存储库包含Bproject。可以重复这些步骤以合并到其他项目中。但是,正如我之前提到的,只有主分支被合并,您的项目可能拥有的任何其他分支都不会被合并。

您可以将各种存储库合并到一个存储库中,但不能与子模块合并。虽然我建议的方法有严重的缺点。合并玩具项目后,它们不再作为单独的项目。你不能只承诺一个项目,你必须同时承诺所有项目。类似地,您不能只分支一个项目,每个分支都是所有项目的分支。因此,如果您使用了多个分支,或者将来可能希望分支单个项目,那么请使用单独的存储库

如果您仍然希望合并各种存储库,那么您可以使用来自的部分想法。尽管您不打算保留旧的存储库,但您永远不需要使用子树合并

子树合并策略文档中的重要部分是以下命令,您应该从新容器存储库中运行这些命令:

$ git remote add -f Bproject /path/to/B
$ git merge -s ours --no-commit Bproject/master
$ git read-tree --prefix=dir-B/ -u Bproject/master
$ git commit -m "Merge B project as our subdirectory"
因为您要删除原始存储库,所以还可以删除您在开始时添加的远程存储库,这样它就不会把事情弄得一团糟

$ git remote rm Bproject
此时,您的容器存储库包含Bproject。可以重复这些步骤以合并到其他项目中。然而,正如我之前提到的,只有主分支被合并,您的项目可能拥有的任何其他分支都不会被合并