许多供应商的Objective-C库(例如facebook-ios-sdk
)指示您将其repo的文件/目录的某个子集复制到Xcode项目中。这样做的一个问题是你不知道你有什么版本的供应商代码。另一个原因是,如果您对供应商代码进行更改,则通过Git提交更改并不容易。
作为一个解决方案,我想将每个供应商库添加为项目repo的Git子模块,并添加一些额外的设置(例如,在.gitmodules
文件中)。这样,如果另一个人克隆了我的项目,并git submodule update --init
,他们的回购&子模块将具有与我相同的状态,因为它们将使用我设置的相同默认设置:
如何为Git子模块设置上述设置?
答案 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 submodule(git 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。