In a typical "regular" git clone, one ends up with .git/config
as follows:
[remote "origin"]
url = [email protected]:orgname/reponame.git
fetch = +refs/heads/*:refs/remotes/origin/*
and then git show origin/HEAD
works fine.
However, I don't want all branches to be fetched, only prod
and ones prefixed with jakub/
, so my .git/config
is as follows:
[remote "origin"]
url = [email protected]:orgname/reponame.git
fetch = +refs/heads/prod:refs/remotes/origin/prod
fetch = +refs/heads/jakub/*:refs/remotes/origin/jakub/*
(I didn't do a git clone
, but created a .git/config
like above, and then did git fetch
).
However, with that setup, git show origin/HEAD
no longer works:
fatal: ambiguous argument 'origin/HEAD': unknown revision or path not in the working tree.
I tried to add the following to .git/config
but it doesn't work:
fetch = +refs/heads/HEAD:refs/remotes/origin/HEAD
$ git fetch
fatal: couldn't find remote ref refs/heads/HEAD
What's the proper way to make origin/HEAD
work with partial fetching?
If the HEAD branch of the remote repository is one of the branches configured in your fetch refspecs, then this should work:
git remote set-head origin -a
This will query the remote for its HEAD and set origin/HEAD
to point to the corresponding remote-tracking branch in your repository.
If the remote HEAD points to a branch thst is not covered by your fetch refspec, then you would have to add a fetch refspec for that branch, fetch it, and then run the above command.