Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Git子模块设置为浅克隆&;稀疏结帐?_Git_Github_Clone_Git Submodules_Sparse Checkout - Fatal编程技术网

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

将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和子模块将与我的状态

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

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

  • 稀疏签出:仅签出子模块的某些文件
  • 浅层克隆:只克隆子模块的某个SHA1

  • 如何设置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,因此不再有效