将Git子模块设置为浅克隆&稀疏结账?

时间:2011-06-04 18:25:33

标签: git github clone git-submodules sparse-checkout

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

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

  1. 稀疏结账:仅查看子模块的某些文件。
  2. 浅克隆:仅克隆子模块的某个SHA1。
  3. 如何为Git子模块设置上述设置?

3 个答案:

答案 0 :(得分:15)

您可以像normal sparse checkout一样对子模块进行稀疏检查。请记住每个模块的sparse-checkout文件都在.git/modules/<mymodule>/info/。但是,正如git 1.7 sparse checkout feature中所讨论的那样,稀疏结账就是这样:结账。您无法移动文件或共享设置。

答案 1 :(得分:13)

git1.8.4 (July 2013)addition git shallow update for submodulegit submodule update --depth 1),您现在可以进行自定义更新

  

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

请参阅commit 6cb5728c43f34a7348e128b44b80d00b9417cb19

  

用户可以将submodule.$name.update设置为“!command”,这将导致运行“command”而不是结帐/合并/ rebase。   这允许用户更精细地控制更新的完成方式。

     

签名:Chris Packham <judge.packham@gmail.com>

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


2016年8月更新(3年后)

使用Git 2.10(2016年第3季度),您将可以

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

有关详情,请参阅“Git submodule without extra weight”。

答案 2 :(得分:5)

子模块不能执行回购的部分。您应该查看subtree merge