Re: git clone downloads objects that are in GIT_OBJECT_DIRECTORY

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Junio C Hamano <junkio@xxxxxxx> wrote:
> Shawn Pearce <spearce@xxxxxxxxxxx> writes:
> 
> > Benjamin LaHaise <bcrl@xxxxxxxxx> wrote:
> >> 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.
-
: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]