88 lines · 1.9 KB · Text
RawDownload
#!/bin/rc -e rfork ennl='' remote=$1local=$2 if(~ $#remote 0){	echo usage: $0 'remote [local]' >[1=2]	exit usage}if(~ $#local 0)	local=`{basename $remote .git} if(test -e $local){	echo $local already exists >[1=2]	exit exists}	fn clone{	mkdir -p $local/.git	mkdir -p $local/.git/objects/pack/	mkdir -p $local/.git/refs/heads/		cd $local		dircp /sys/lib/git/template .git	echo '[remote "origin"]' 				>> .git/config	echo '	url='$remote					>> .git/config	echo '	fetch=+refs/heads/*:refs/remotes/origin/*'	>> .git/config	{git/fetch $remote >[2=3] | awk '		/^remote/{			if($2=="HEAD"){				headhash=$3				headref=""			}else{				gsub("^refs/heads", "refs/remotes/origin", $2)				if($2 == "refs/remotes/origin/master" || $3 == headhash)					headref=$2				outfile = ".git/" $2				system("mkdir -p `{basename -d "outfile"}")				print $3 > outfile				close(outfile)			}		}		END{			if(headref != ""){				remote = headref				gsub("^refs/remotes/origin", "refs/heads", headref)				system("mkdir -p `{basename -d .git/" headref"}");				system("cp .git/" remote " .git/" headref)				print "ref: " headref > ".git/HEAD"			}else if(headhash != ""){				print "warning: detached head "headhash > "/fd/2"				print headhash > ".git/HEAD"			}		}	'} |[3] tr '\x0d' '\x0a'	x=$status	if(! ~ $x '|')		exit $0:^' '^$"x 	tree=/mnt/git/branch/heads/master/tree	echo checking out repository...	if(test -f .git/refs/remotes/origin/master){		cp .git/refs/remotes/origin/master .git/refs/heads/master		git/fs		@ {builtin cd $tree && tar cif /fd/1 .} | @ {tar xf /fd/0}		x=$status		if(! ~ $x '')			exit 'checkout: '^$"x		for(f in `$nl{walk -f $tree | sed 's@^'$tree'/*@@'}){			if(! ~ $#f 0){				idx=.git/index9/tracked/$f				mkdir -p `{basename -d $idx}				walk -eq $f > $idx			}		}	}	if not{		echo no master branch >[1=2]		echo check out your code with git/branch >[1=2]	}} clone