GIT中的子树

时间:2018-07-06 17:50:48

标签: git git-submodules git-subtree

这可能是一个简单的问题,但我仍在学习和理解GIT ... 在我看来,通过测试一些事情,当您将一个子模块添加到Git存储库中时,您可以签入分支,并正在签入该添加的子模块,以便可以将其推送到远程存储库中,而其他人则可以仓库也将获得有关子模块的添加信息。

当我拥有相同的仓库并添加另一个仓库作为子树时,在我看来,您只是将内部仓库添加到本地GIT实例中,因为当我签入分支时,我看不到任何方式其他人检查该仓库将获得信息,使他们能够提取已添加的子树。正确吗-提取远程仓库的每个用户都必须手动添加到子树的链接?

2 个答案:

答案 0 :(得分:1)

git submodule init将从克隆存储库后添加的子模块中提取代码。

只要添加了新的子模块,git就会创建一个.gitmodules文件,并为您添加的子模块提供文件

.gitmodules文件存储项目URL和本地子目录映射。

[submodule "mysubmodule"]
path = Mysubmodule
url = https://theurl

您将需要提交并同时推送.gitmodules文件和子模块文件。

在克隆的存储库中完成git子模块初始化时,它将获取所有链接的子模块代码。

答案 1 :(得分:0)

使用git子树时,子树的整个存储库都将合并到子目录中的父存储库中,因此,其他用户将不必运行其他命令即可访问其他存储库内容。

但是,他们不会看到其他回购的历史记录,也不会跟踪那里正在进行的提交。使用git子树,更多的是在历史记录中添加一个标记,使维护者可以轻松地通过将子树中所做的更改有选择地合并并从父级回购中拆分出来,来推动和拉取子树中的更改。

FWIW之后,我进入了git subrepo,我发现它具有与git subtree相同的优点,但缺点却更少。它们的工作方式相同。