【发布时间】:2018-07-28 00:48:02
【问题描述】:
我想添加一个引用特定(非主)分支的子模块。下面由于--depth=1只会抢master分支,所以命令必然会失败;
git submodule add -b myBranch --depth=1 git@host.com:some/large/repo
因为submodule add 不支持--single-branch,这是否意味着我唯一的选择是克隆整个repo?
【问题讨论】:
标签: git
我想添加一个引用特定(非主)分支的子模块。下面由于--depth=1只会抢master分支,所以命令必然会失败;
git submodule add -b myBranch --depth=1 git@host.com:some/large/repo
因为submodule add 不支持--single-branch,这是否意味着我唯一的选择是克隆整个repo?
【问题讨论】:
标签: git
--深度 深度
创建一个浅克隆,其历史被截断为指定 提交的数量。 暗示
--single-branch除非--no-single-branch用于获取所有分支尖端附近的历史记录。--[no-]单分支
仅克隆导致单个分支尖端的历史记录, 由
--branch选项或主分支指定 遥控器的 HEAD 指向。 当使用 --depth 选项,这是默认的,除非--no-single-branch用于获取所有分支尖端附近的历史记录。 进一步提取到生成的存储库只会更新 用于该选项的分支的远程跟踪分支 初始克隆。如果遥控器的 HEAD 没有指向任何 进行--single-branch克隆时的分支,没有远程跟踪 分支已创建。
因此,如果git submodule add 使用git clone 执行克隆,那么在您的用例中--single-branch 是隐含的。但是,只有在git submodule add 将-b 选项转发给git clone 时,它才能正常工作。
实现预期结果的有保证的方法(不对git submodule add 的内部工作做任何假设)是使用您选择的选项自行到git clone 子模块存储库,然后将现有目录添加为子模块:
git clone -b myBranch --single-branch --depth=1 git@host.com:some/large/repo large_repo
git submodule add -b myBranch git@host.com:some/large/repo large_repo
git 子模块添加 选项 存储库 [路径]
...
path 是克隆子模块存在于 超级项目。如果 path 不存在,则子模块由 从命名的 URL 克隆。 如果 路径 确实存在并且已经是有效的 Git 存储库,然后将其添加到变更集中而不进行克隆。
【讨论】:
git submodule add 不支持--single-branch,如问题中所述。但是,第二部分看起来是合法的。
git submodule add 支持--single-branch。我的意思是git submodule add -b myBranch --depth 1 调用git clone -b myBranch --depth 1,而后者将暗示--single-branch。
--single-branch 应该存在于submodule add,因为submodule add --depth 的存在,即使它不存在?
git submodule add 将它的一些工作委托给git clone,所以如果它将-b 和--depth 选项传递给git clone,那么克隆将在--single-branch 模式下隐式执行。但是,如果您有疑问,请使用更安全的第二种方法(这就是我将其包含在答案中的原因)。
--single-branch 与submodule add 一起使用?