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 firstname.lastname@example.org: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
--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.
git merge --squash.
If your remote is shallow and you want to merge from it, compress that merge into a single commit without the need to copy a history of commits (which shallow refs hide).
Well on Linux repo server... this
git config --local --add receive.shallowUpdate true
resulted in this being added to the repo config file.
[receive] shallowUpdate = true
So maybe if you can add that to the repo config file.