Is a full clone the only way to submodule add a branch?

前端 未结 1 1915
隐瞒了意图╮
隐瞒了意图╮ 2021-01-12 16:55

I want to add a submodule that references a specific (non-master) branch. The following will only grab the master branch due to --depth=1, so the command will

相关标签:
1条回答
  • 2021-01-12 17:49

    From the documentation of git-clone:

    --depth depth

    Create a shallow clone with a history truncated to the specified number of commits. Implies --single-branch unless --no-single-branch is given to fetch the histories near the tips of all branches.

    --[no-]single-branch

    Clone only the history leading to the tip of a single branch, either specified by the --branch option or the primary branch remote’s HEAD points at. When creating a shallow clone with the --depth option, this is the default, unless --no-single-branch is given to fetch the histories near the tips of all branches. Further fetches into the resulting repository will only update the remote-tracking branch for the branch this option was used for the initial cloning. If the HEAD at the remote did not point at any branch when --single-branch clone was made, no remote-tracking branch is created.

    Thus, if git submodule add performs the cloning with git clone, then in your use case --single-branch is implied. However, it will work correctly only if git submodule add forwards the -b option to git clone.

    A guaranteed way of achieving the desired result (without making any assumptions about inner workings of git submodule add) is to git clone the submodule repository on your own using the options of your choice and then add the existing directory as a submodule:

    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 options repository [path]

    ...

    path is the relative location for the cloned submodule to exist in the superproject. If path does not exist, then the submodule is created by cloning from the named URL. If path does exist and is already a valid Git repository, then this is added to the changeset without cloning.

    0 讨论(0)
提交回复
热议问题