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

时间:2009-10-11 17:25:33

标签: git github

我是Github的快乐用户。随着时间的推移,我累积了一些不相关的小玩具回购。我现在想创建一个容器回购 - 称它为围栏,将我的各种玩具项目作为git子模块拉到母围栏下面,并吹走源玩具回购。玩具应该只住在围栏中。当我尝试使用这个食谱:http://git.or.cz/gitwiki/GitSubmoduleTutorial我发现了一个大问题。看,我想完全回购并让他们只住在游戏围栏下面。当我继续吹走github中的回购时,我无法跟踪围栏中的链接。咦?

有人可以向我解释如何做到这一点吗?提前致谢

欢呼, 道格

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

您可以将各种存储库合并到一个存储库中,但不能与子模块合并。虽然我可以建议剂量的方法有严重的缺点。合并您的玩具项目后,他们不再作为单独的项目。您不能只提交一个项目,您必须同时提交所有项目。同样,您不能只分支其中一个项目,每个分支都是所有项目的分支。因此,如果您使用了多个分支机构,或者您将来有可能想要分支单个项目,那么请坚持使用单独的存储库。

如果您仍然想要合并各种存储库,那么您可以使用how to use the subtree merge strategy中的部分想法。虽然由于您不打算保留旧存储库,因此您永远不需要使用子树合并。

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

$ 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

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