Git development
 help / color / mirror / Atom feed
* A simple script to do the reverse of git-push
@ 2005-08-08 21:25 Johannes Schindelin
  2005-08-08 22:42 ` Junio C Hamano
  0 siblings, 1 reply; 4+ messages in thread
From: Johannes Schindelin @ 2005-08-08 21:25 UTC (permalink / raw)
  To: git

[-- Attachment #1: Type: TEXT/PLAIN, Size: 912 bytes --]

Hi list,

I mentioned in another mail that I needed the opposite of git-push, namely 
getting all heads, and if they are strict parents of the local refs, just 
update them.

Well, Junio pointed out that it's easy using the available tools, and he 
was right. The result is attached (and tested...).

This script makes it easy to work with a central repository, multiple 
heads and users, in a CVS style: to start your day, you call the attached 
script, and after you have committed something, you can do a push on the 
repository. Sometimes, the push fails, then you have to pull that branch 
in order to merge it before trying a push again.

BTW, if you are lazy, like me, you just pull from Junio once in a while 
and do a "make test". Turns out there is a missing dependency though:

peek-remote.o: cache.h

which in my case lead to a git-peek-remote program which was unable to 
peek any ref.

Ciao,
Dscho

[-- Attachment #2: Type: TEXT/PLAIN, Size: 930 bytes --]

#!/bin/sh

. git-sh-setup-script || die "Not a git archive"

. git-parse-remote "$@"
repo="$_remote_repo"

git-ls-remote-script --heads "$repo" | while read sha1 refname; do
	shortname=$(basename $refname)
	if [ -e $GIT_DIR/$refname ]; then
		if [ $sha1 = $(cat $GIT_DIR/$refname) ]; then
			echo $shortname up to date. 1>&2
			continue
		fi
	fi

	git-cat-file commit $sha1 >/dev/null 2>&1 ||
	git-fetch-script $repo $shortname

	if [ ! -e $GIT_DIR/$refname ]; then
		echo Got new head $shortname 1>&2
		echo $sha1 > $GIT_DIR/$refname
	else
		origsha1=$(cat $GIT_DIR/$refname)
		if [ -z "$(git-rev-list $origsha1 ^$sha1)" ]; then
			echo Updated head $shortname 1>&2
			echo $sha1 > $GIT_DIR/$refname
		else
			saveref=$GIT_DIR/FETCH_HEAD_$shortname
			echo Error: $shortname not a child of remote head 1>&2
			echo "	Saved remote head to $saveref" 1>&2
			echo $sha1 > $saveref
		fi
	fi
done


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-08-11 22:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-08-08 21:25 A simple script to do the reverse of git-push Johannes Schindelin
2005-08-08 22:42 ` Junio C Hamano
2005-08-08 23:38   ` Johannes Schindelin
2005-08-11 22:18   ` Petr Baudis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox