I know its late but here is the solution,
First,let's do a partial clone to truncate the amount of info coming down:
git clone --depth 1 <url>
it will clones the repository with the minimum git history. however,cloning with ‘–depth 1′ does not let you push your changed to your remote repo.
Now fetch the rest with :
git fetch --depth=1000000
(Update Oct/3/2013) for git version >= 1.8.3,
git fetch --unshallow
note:
‘git fetch –unshallow’ is basically an alias for ‘git fetch –depth=2147483647′.
Pushing from a shallow clone isn’t guaranteed; the recommended workflow is to submit a patch(git format-patch) from your shallow clone. Though git clone manual states that a shallow clone cannot push, having a common commit history between your shallow clone and origin will allow the shallow clone to push through. But be warned that your shallow clone will be in trouble if the origin reworks the commit history.(source article: why-cant-i-push-from-a-shallow-clone).