将Git子模块设置为浅克隆&;稀疏结帐?
许多供应商Objective-C库(例如,将Git子模块设置为浅克隆&;稀疏结帐?,git,github,clone,git-submodules,sparse-checkout,Git,Github,Clone,Git Submodules,Sparse Checkout,许多供应商Objective-C库(例如,FacebookIOSSDK)指示您将其repo文件/目录的某个子集复制到您的Xcode项目中。这样做的一个问题是,您不知道供应商代码的版本。另一个原因是,如果您对供应商代码进行了更改,那么通过Git贡献您的更改并不容易 作为一种解决方案,我想将每个供应商库添加为我的项目repo的Git子模块,并进行一些额外设置(例如,在.gitmodules文件中)。这样,如果其他人克隆了我的项目并执行了git子模块更新--init,他们的repo和子模块将与我的状态
FacebookIOSSDK
)指示您将其repo文件/目录的某个子集复制到您的Xcode项目中。这样做的一个问题是,您不知道供应商代码的版本。另一个原因是,如果您对供应商代码进行了更改,那么通过Git贡献您的更改并不容易
作为一种解决方案,我想将每个供应商库添加为我的项目repo的Git子模块,并进行一些额外设置(例如,在.gitmodules
文件中)。这样,如果其他人克隆了我的项目并执行了git子模块更新--init,他们的repo和子模块将与我的状态相同,因为他们将使用我设置的相同默认设置:
如何设置Git子模块的上述设置?子模块不能执行部分回购。您应该改为签出。您可以使用与相同的方法对子模块进行稀疏签出。只需记住每个模块的
稀疏签出
文件位于.git/modules//info/
中。但是,正如中所讨论的,稀疏签出就是这样的:签出。您无法移动文件或共享设置。在(git子模块更新-深度1
)中,您现在可以进行自定义更新:
除了从“重新基础、合并或签出分离”中进行选择外,“子模块更新”还允许使用自定义命令,通过“submodule.*.update
”配置变量更新子模块的工作树
见:
用户可以将子模块$name.update设置为“”!命令
,这将导致运行“命令
”,而不是签出/合并/重基。
这允许用户更细粒度地控制更新的完成方式
签字人:Chris Packham
这意味着您可以对“命令
”进行版本设置,然后将其用于任何子模块更新(通过子模块。$name.update
设置)。
如果需要,该脚本可以执行稀疏签出
2016年8月更新(3年后)
使用Git 2.10(2016年第三季度),您将能够
git config -f .gitmodules submodule.<name>.shallow bool
git config-f.gitmodules子模块..浅bool
请参阅“”,了解更多信息。我认为您不能这样做,但您可以提交这样一个脚本:请注意,git子模块现在可以执行自定义更新:请参阅+1以获得一个好的解决方案(感谢@takoi)。创建子模块,然后使用稀疏签出功能过滤工作树中显示的文件/目录。在@johnhunter Link上有一个简单的如何进行稀疏签出的方法。wayback机器上有一个版本的博客:VonC,但是你建议使用什么命令来进行稀疏签出呢?我不知道它是什么。@ThomasVanderStichele一个执行稀疏签出的脚本,与此类似:!command
不再起作用:“请注意,出于安全原因,此处有意忽略!command表单。”@saji您在哪个上下文/OS/policy中看到了它!(shell执行)由于安全原因被忽略?@VonC My bad。好像是!子模块中的命令
表单..中不允许更新
,但在“常规”配置文件中不允许更新。这是因为提交了。gitmodules
,而。git/config
未提交。此注释是关于旧版本的git,因此不再有效