gitshellshallow-clone

how to use git "--unshallow" with a "--single-branch" clone?


I first shallow-cloned a repo with depth=1.

cd $folder_path
git init
git remote add $my_remote $url_to_repo
git fetch $my_remote $my_branch --depth=1
git reset --hard $my_remote/$my_branch
cd -

I then tried to unshallow the local clone by running twice this

if [[ ! -z "$(git rev-parse --is-shallow-repository)" ]]; then
    echo "STILL SHALLOW"
    git fetch $my_remote $my_branch --unshallow 
fi

I got "STILL SHALLOW" twice, and step by step still the same...

$ git rev-parse --is-shallow-repository
--is-shallow-repository
$ git fetch $my_remote $my_branch --unshallow 
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 16 (delta 8), reused 0 (delta 0)
Unpacking objects: 100% (16/16), done.
From ssh://my_git_url.git
 * branch              my_branch -> FETCH_HEAD
$ git rev-parse --is-shallow-repository
--is-shallow-repository

So what am I doing wrong? how to use --unshallow ?


Solution

  • git rev-parse --is-shallow-repository is supposed to return true or false so using if [[ ! -z "$(git rev-parse --is-shallow-repository)" ]] always is treated as TRUE because even false (returned by command) is not an empty string.

    It seems your version of git doesn't support rev-parse --is-shallow-repository sub-command and it turns out in that case any flag would be returned as output:

    $ git rev-parse --repo-is-not-shallow-anymore

    $ --repo-is-not-shallow-anymore

    Because of following error your repo is not shallow and no further action is required:

    fatal: --unshallow on a complete repository does not make sense