There are a lot of answers stating that git 1.9 removes limitations of shallow clones. Nevertheless, I'm using 2.6.1 and still having the following basic issue:
First, I create an empty repo somewhere:
cd /tmp
mkdir target
cd target
git init
Then, I shallow clone some repo and add the above repo as remote:
cd /tmp
git clone --depth 1 [email protected]:muennich/urxvt-perls.git
cd urxvt-perls
git remote add target /tmp/target
Finally, I push this repo to the remote:
git push target master
But then I get:
! [remote rejected] master -> master (shallow update not allowed)
error: failed to push some refs to '/tmp/target'
What am I missing here?
I'm answering my own question.
I tried going the other way around and adding urxvt-perls
as a remote for target
, then fetching from there. This fails because of the same reason but led me closer to a solution. From the git-fetch
man:
--update-shallow
By default when fetching from a shallow repository, git fetch
refuses refs that require updating .git/shallow. This option
updates .git/shallow and accept such refs.
Now, using this option allows the shallow fetch. So the previous question becomes: Is it possible to specify that --update-shallow
behavior while pushing? Well, there is an option for that:
receive.shallowupdate
If set to true, .git/shallow can be updated when new refs require
new shallow roots. Otherwise those refs are rejected.
I'm still trying to set this in github and the likes, though.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With