Git:如何将第三方库克隆到我的应用程序的子目录';s存储库?

Git:如何将第三方库克隆到我的应用程序的子目录';s存储库?,git,git-clone,Git,Git Clone,我正试图找出正确的方法将第三方库(Janrain中的engage.iphone)克隆到我自己应用程序的目录结构中,这样我就可以获取最新的更改,并将它们与我在本地所做的任何更改合并。我还希望第三方库(与我的更改合并)在我推送自己的应用程序时包含在git repo中 结构应该是这样的: myApp/ <- this is my app, which is its own git repo external/ engage.iphone/ <- this is t

我正试图找出正确的方法将第三方库(Janrain中的engage.iphone)克隆到我自己应用程序的目录结构中,这样我就可以获取最新的更改,并将它们与我在本地所做的任何更改合并。我还希望第三方库(与我的更改合并)在我推送自己的应用程序时包含在git repo中

结构应该是这样的:

myApp/  <- this is my app, which is its own git repo
    external/
        engage.iphone/ <- this is the 3rd party library I want to keep up-to-date
    mySource1.h
    mySource2.m
    ...

myApp/子模块是实现这一点的最简单方法

使用子模块有两种常见的方法-添加新模块和初始化现有模块

添加新的子模块

从本地存储库的根目录运行:

git子模块添加外部/engage.iphone

add
命令用于最初将子模块添加到存储库时,而不是使用现有子模块克隆存储库时)。它将另一个存储库添加到存储库根目录中的.gitmodules文件中,该存储库可以位于本地或远程路径上(请记住,如果发布存储库,其他开发人员需要访问该存储库!),然后将存储库克隆到指定的位置<代码>外部/engage.iphone
在上述示例中。在这个阶段,您的系统上有子存储库文件,它在本地存储库的配置文件.gitmodules文件中作为子模块列出

但是,您可能不会自己添加子模块

初始化现有子模块

如果您要克隆一个已经添加了子模块的存储库,那么情况会有所改变。在这种情况下,.gitmodules文件将在其中列出子模块以及从中检索它们的位置,但是您的本地存储库配置对它们一无所知,并且您的系统上还不存在实际的文件。首先,您需要初始化子模块:

git子模块init

这将运行.gitmodules中列出的所有存储库,并将它们添加到.git/config中。Git现在知道了存储库,但实际上还没有克隆它,所以运行:

git子模块更新

您可以随时运行此命令来更新已注册的子模块,即克隆丢失的子模块

git子模块同步

运行此命令可将所有子模块更新到其远程头,除非在添加子模块时指定了特定的提交!指定特定子模块将仅同步该子模块

在真正的git方式中,
init
命令可以与
update
组合使用,以节省时间:

git子模块更新--init

当然,一旦您了解了.gitmodules和.git/config使用的布局(类似于配置中的分支和远程部分),就可以随时手动更新它们


所有细节都可以在手册页()中找到。

谢谢。我现在遇到了这个错误:“在.gitmodules中找不到路径'engage.iphone/Contrib/json framework'的子模块映射…”。。。有什么想法吗?。。。当我运行“git submodule init”时会发生这种情况@SteveN您是如何运行add命令的?它在你的.gitmodules中放了什么?我不记得具体的“add”命令,但我确信我尽可能地将它与你的建议类似。下面是.gitmodules中的内容:[子模块“external/janrain/engage.iphone”]path=external/janrain/engage.iphone url=[子模块“external/JSON”]路径=外部/JSON url=git://github.com/stig/json-framework.git@SteveN engage.iphone存储库不包含.gitmodules文件,因此git不知道从何处获取其中包含的子模块。