子模块是完成此任务的最简单方法。
使用子模块有两种常见的方法——添加新的和初始化现有的。
添加新的子模块
从本地存储库的根目录运行:
git submodule add <repository> external/engage.iphone
.
该add
命令适用于您最初将子模块添加到存储库时,而不是当您克隆具有现有子模块的存储库时)。它将另一个可以在本地或远程路径上的存储库(请记住,如果您发布存储库,其他开发人员需要访问它!)到存储库根目录中的 .gitmodules 文件,然后将存储库克隆到您指定的位置;external/engage.iphone
在上面的例子中。在这个阶段,您的系统上有子存储库文件,它在 .gitmodules 文件(本地存储库的配置)中列为子模块。
但是,您可能不会自己添加子模块...
初始化现有子模块
如果您正在克隆一个已经添加了子模块的存储库,情况会发生一些变化。在这种情况下,.gitmodules 文件将列出其中的子模块以及从中检索它们的位置,但是您的本地存储库配置对它们一无所知,并且您的系统上尚不存在实际文件。首先,您需要初始化子模块:
git submodule init
这将运行在您的 .gitmodules 中列出的所有存储库,并将它们添加到您的 .git/config 中。Git 现在知道存储库,但实际上还没有克隆它,所以运行:
git submodule update
您可以随时运行此命令来更新已注册的子模块,即克隆缺失的子模块。
git submodule sync <submodule>
运行此命令将所有子模块更新到其远程 HEAD,除非您在添加子模块时指定了特定提交!指定一个特定的子模块只会同步那个。
在真正的 git 方式中,该init
命令可以与update
节省时间的命令结合使用:
git submodule update --init
.
当然,一旦你了解了它们使用的布局(类似于配置中的分支和远程部分),你总是可以手动更新你的 .gitmodules 和 .git/config 。
所有细节都可以在手册页(kernel.org 版本)中找到。