On Fri, Mar 15, 2019 at 7:17 PM Robert P. J. Day <rpjday@xxxxxxxxxxxxxx> wrote: > > > probably doing something idiotic but i'm enumerating variations of > shallow cloning, and tried the following: > > $ git clone --shallow-exclude=master https://github.com/django/django.git > Cloning into 'django'... > fatal: the remote end hung up unexpectedly > $ > > it is entirely reproducible, and some googling suggests that this > represents an error at the *other* end, which in some weird way does > not support that clone option. that seems strange ... should this > option work? am i using it incorrectly? > > wait, hang on ... i just picked one of django's topic branches at > random, and this did succeed: Yeah i think when you request shallow clone, by default it only gets one branch (see --single-branch, often 'master'). So when you specify --shallow-exclude you essentially say 'give me master branch but exclude everything from master'. I should probably make it print a friendlier message than simply terminateing like that (it's still a guess, I haven't tried it out) > $ git clone --shallow-exclude=stable/2.0.x https://github.com/django/django.git > Cloning into 'django'... > remote: Enumerating objects: 33112, done. > remote: Counting objects: 100% (33112/33112), done. > ... etc etc ... > $ > > but all this gave me was the master branch. i clearly don't understand > what this option is supposed to do. You're saying 'give me master branch, exclude everything that is reachable from stable/2.0.x'. If there's nothing in common between master and this branch, you get full 'master' branch. Otherwise you get a shallow 'master' branch. This option is meant to give you another way to cut the history. Instead of saying 'give me X latest commits' with --shallow, you could say 'give me commits since this cut point' and the cut point is often a tag, on the same branch. Using an unrelated bracnh or tag could give some surprising result. -- Duy