完全克隆是子模块添加分支的唯一方法吗?

时间:2016-06-29 03:20:51

标签: git

我想添加一个引用特定(非主)分支的子模块。以下只会因--depth=1而占用主分支,因此该命令将不可避免地失败;

git submodule add -b myBranch --depth=1 git@host.com:some/large/repo

由于submodule add不支持--single-branch,这是否意味着我唯一的选择是克隆整个回购?

1 个答案:

答案 0 :(得分:2)

来自documentation of git-clone

  

- 深度 深度

     

创建一个浅层克隆,其历史记录被截断为指定的   提交次数。 隐含--single-branch,除非--no-single-branch   用于获取所有分支的提示附近的历史记录。

     

<强> - [无糖]单分支

     

仅克隆导致单个分支的提示的历史记录,   由--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 submodule add 选项 存储库 [路径]

     

...

     

path 是克隆子模块中存在的相对位置   上层项目。如果 path 不存在,则创建子模块   从指定的URL克隆。 如果 路径 确实存在并且已经有效   Git存储库,然后将其添加到变更集中而不进行克隆