21

许多供应商的Objective-C 库(例如,facebook-ios-sdk)指示您将其repo 文件/目录的某个子集复制到您的Xcode 项目中。这样做的一个问题是您不知道您拥有的供应商代码的修订版本。另一个是,如果您对供应商代码进行了更改,那么通过 Git 贡献您的更改并不容易。

作为一种解决方案,我想将每个供应商库添加为我的项目 repo 的 Git 子模块,并带有一些额外的设置(例如,在.gitmodules文件中)。这样,如果另一个人克隆了我的项目并这样做git submodule update --init了,他们的 repo 和子模块将具有与我相同的状态,因为他们将使用我设置的相同默认设置:

  1. 稀疏检出:仅检出子模块的某些文件。
  2. 浅克隆:只克隆子模块的某个 SHA1。

如何为 Git 子模块设置上述设置?

4

3 回答 3

18

使用git1.8.4(2013 年 7 月)除了子模块git submodule update --depth 1)的 git shallow update,您现在可以进行自定义更新

除了从“rebase、merge 或 checkout-detach”中选择之外,“submodule update”还允许使用自定义命令通过“ submodule.*.update”配置变量来更新子模块的工作树。

请参阅提交 6cb5728c43f34a7348e128b44b80d00b9417cb19

用户可以设置submodule.$name.update为 ' !command' 这将导致command运行 ' ' 而不是 checkout/merge/rebase。
这允许用户更细粒度地控制更新的完成方式。

签字人:克里斯·帕克汉姆<judge.packham@gmail.com>

这意味着您可以对 ' command' 进行版本控制,然后您可以将其用于任何子模块更新(通过submodule.$name.update设置)。
如果您愿意,该脚本可以进行稀疏结帐。


2016 年 8 月更新(3 年后)

使用 Git 2.10(2016 年第三季度),您将能够做到

 git config -f .gitmodules submodule.<name>.shallow bool

有关更多信息,请参阅“没有额外重量的 Git 子模块”。

于 2013-07-17T06:49:17.703 回答
17

您可以像正常的稀疏检出一样对子模块进行稀疏检出。只要记住sparse-checkout每个模块的文件进入.git/modules/<mymodule>/info/. 但是,正如git 1.7 sparse checkout feature中所讨论的,稀疏结帐正是:结帐。您无法移动文件或共享设置。

于 2012-08-02T13:33:44.393 回答
3

子模块不能做回购的一部分。您应该改为检查子树合并

于 2011-06-04T21:56:56.523 回答