I want to create a sparse and shallow clone of a git repository at a certain tag.
This is what I am currently doing:
git init avatica-tmp
cd avatica-tmp
git remote add origin https://github.com/apache/calcite-avatica/
git config core.sparsecheckout true
echo "core/src/main/protobuf/*" >> .git/info/sparse-checkout
git pull --depth=1 origin rel/avatica-1.10.0
It works correctly, but throws an error:
remote: Counting objects: 531, done.
remote: Compressing objects: 100% (381/381), done.
remote: Total 531 (delta 147), reused 280 (delta 51), pack-reused 0
Receiving objects: 100% (531/531), 963.03 KiB | 233.00 KiB/s, done.
Resolving deltas: 100% (147/147), done.
From https://github.com/apache/calcite-avatica
* tag rel/avatica-1.10.0 -> FETCH_HEAD
fatal: update_ref failed for ref 'HEAD': cannot update ref 'refs/heads/master': trying to write non-commit object fe4f0b4ea3e2ee4f3b2e82329363a7945493a8c9 to branch 'refs/heads/master'
I get this error with Git 2.11.0 on Ubuntu 17.04 and Git 2.13.2.windows.1 on Windows 10 64-bit. I am not attempting to clone to a mapped drive.
What causes this error and how do I avoid it?
You are trying to pull an annotated tag into your current branch with a shallow clone in an empty repository and I guess it's the problem as it's trying to set your local
master
branch to point to the tag and git doesn't like it.A solution is to use fetch then checkout the fetched tag: