首先我们来解释一下子树和子模块的主要区别是什么:
它们都用于在现有存储库中创建另一个存储库。主要区别在于 gitsubmodule
是独立的自包含存储库,同时subtree
将日期存储在父(原始)存储库中。
Now let's dig in and explain in more details:
有没有更简单的例子可供我参考?
Submodule
is a 独立的git 项目,以便代码将被检出到新建文件夹在根文件夹下,它不是主分支的一部分。
您的根文件夹将包含一个子模块文件,您必须init && update
它存在于你制作的每一个克隆中。
# Add the desired submodule to your code base
git submodule add <url>
您必须运行两个命令:
git submodule init
初始化您的本地配置文件,以及
git submodule update
从该项目中获取所有数据并检查超级项目中列出的相应提交:
所以完整的脚本是这样的:
git submodule add <url>
git submodule init
git submodule update
您只需位于根文件夹中,然后添加子模块文件夹即可。
git submodule add <url>
现在,当您克隆项目时,您只需初始化并更新子模块
git submodule init
git submodule update
Git 1.8.2 提供了一个新选项 --remote
git submodule update --remote --merge
将从每个子模块的上游获取最新更改,将它们合并,并检查子模块的最新版本。
git subtree
Git 子树允许您将任何存储库插入为另一个存储库的子目录
非常类似于submodule
但主要区别在于代码的管理位置。在子模块中,内容放置在单独的存储库中并在那里进行管理,这允许您将其克隆到许多其他存储库。
subtree
将内容作为根项目的一部分进行管理,而不是在单独的项目中进行管理。
您无需写下如何设置它并了解如何使用它,您只需阅读这篇优秀的文章即可解释这一切。
https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/