Thread (4 messages) flat view 4 messages, 4 authors, 2016-06-15

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help