Re: git clone downloads objects that are in GIT_OBJECT_DIRECTORY
From: Shawn Pearce <hidden>
Date: 2016-06-15 22:42:21
Junio C Hamano [off-list ref] wrote:
Shawn Pearce [off-list ref] writes:quoted
Benjamin LaHaise [off-list ref] wrote:quoted
Hi folks, Doing a fresh git clone git://some.git.url/ foo seems to download the entire remote repository even if all the objects are already stored in GIT_OBJECT_DIRECTORY=/home/bcrl/.git/object . Is this a known bug? At 100MB for a kernel, this takes a *long* time.I believe it is a known missing feature. :-) git-clone doesn't prep HEAD to have some sort of starting point so the pull it uses to download everything literally downloads everything as nothing is in common.You would first 'clone -l -s' from your local repository and then clone into that from whatever remote, perhaps.
Yea but that's about as much fun as creating a bare repository by hand. (Which I've been doing up until this thread prompted me to read git-clone.sh and learn the existance of --bare.) It might be nicer if the user could place a list of locally (here locally being possibly remote but closer network-wise) available repositories which should be considered as sources for faster cloning. When cloning a remote repository git-clone would try to examine each of the designated repositories to see if any of them have commits in common with the remote; if so clone off that and then pull from the remote, but designating the remote as `origin'. This could be ugly if you have a large number of locally available candidates or if the candidates are many (e.g. 1000s) commits behind the remote being cloned. But it would save the user from pulling down 100+MB of objects they already have while making it very convient to establish a new repository+working directory based on someone else's publically available repository. Or we could just tell the user to create their own clone script, e.g. kernel-clone: #!/bin/sh git-clone -l -n -s ~/kernel-base "$2" && cd "$2" && echo "URL: $1" >.git/remotes/origin && echo "Pull: master:origin" >>.git/remotes/origin && git-pull But it would be better if it was more integrated, and somehow slightly more automatic... -- Shawn.