将Git子模块设置为浅克隆和稀疏检出?

ma1*_*w28 19 git clone github git-submodules sparse-checkout

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

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

  1. 稀疏结账:仅查看子模块的某些文件.
  2. 浅克隆:只克隆子模块的某个SHA1.

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

gwo*_*pq9 15

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

  • @johnhunter Link死了 (2认同)

Von*_*onC 14

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

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

请参阅commit 6cb5728c43f34a7348e128b44b80d00b9417cb19:

用户可以设置submodule.$name.update为' !command'将导致' command'运行而不是checkout/merge/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
Run Code Online (Sandbox Code Playgroud)

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