threads / discuss / 11865

New to git: sorry for obvious question.

Subject: New to git: sorry for obvious question.

## tl;dr

8 messages between Feb 4, 2008 and Feb 4, 2008.

replies: 7people: 4as markdown or json

Paul Gardiner· Feb 4, 2008, 09:56 UTC · lore
Hi,

I've moved a project from CVS on sourceforge to git on repo.or.cz. I want a local mirror on my own home server, so that it appears amongst the projects shown by my own gitweb set up, and so it gets caught by my backup system. I've created the mirror with

   git clone --bare <remote-url> <local-dir>

and that seems fine. But how do I now keep it up to date. I was guessing a cron job doing some sort of git pull, but pull doesn't look to work on --bare proj.git type repositories.

Any help most apprecieated.
Cheers,
	Paul.
Matthieu Moy· Feb 4, 2008, 10:27 UTC · re: Paul Gardiner · lore

Re: New to git: sorry for obvious question.

Paul Gardiner <osronline@glidos.net> writes:
Show 12 quoted lines
> Hi,
>
> I've moved a project from CVS on sourceforge to git on repo.or.cz.  I
> want a local mirror on my own home server, so that it appears amongst
> the projects shown by my own gitweb set up, and so it gets caught by
> my backup system.  I've created the mirror with
>
>   git clone --bare <remote-url> <local-dir>
>
> and that seems fine.  But how do I now keep it up to date.  I was
> guessing a cron job doing some sort of git pull, but pull doesn't
> look to work on --bare proj.git type repositories.

You probably want "git fetch". Actually, "git pull" does a fetch first (get the remote revisions that you don't have), and then a merge with your working tree.

-- 
Matthieu
Paul Gardiner· Feb 4, 2008, 10:41 UTC · re: Matthieu Moy · lore

Re: New to git: sorry for obvious question.

Matthieu Moy wrote:
Show 18 quoted lines
> Paul Gardiner <osronline@glidos.net> writes:
> 
>> Hi,
>>
>> I've moved a project from CVS on sourceforge to git on repo.or.cz.  I
>> want a local mirror on my own home server, so that it appears amongst
>> the projects shown by my own gitweb set up, and so it gets caught by
>> my backup system.  I've created the mirror with
>>
>>   git clone --bare <remote-url> <local-dir>
>>
>> and that seems fine.  But how do I now keep it up to date.  I was
>> guessing a cron job doing some sort of git pull, but pull doesn't
>> look to work on --bare proj.git type repositories.
> 
> You probably want "git fetch". Actually, "git pull" does a fetch first
> (get the remote revisions that you don't have), and then a merge with
> your working tree.

Yeah, that's what I thought, but it doesn't seem to work with --bare repositories that are of the form proj.git, rather than having a dir proj containing checkout files and a .git folder. Both pull and fetch say that it isn't a git repository (although I can view it under gitweb, and I can clone and pule from it).

Boaz Harrosh· Feb 4, 2008, 10:51 UTC · re: Paul Gardiner · lore

Re: New to git: sorry for obvious question.

On Mon, Feb 04 2008 at 12:41 +0200, Paul Gardiner <osronline@glidos.net> wrote:
Show 26 quoted lines
> Matthieu Moy wrote:
>> Paul Gardiner <osronline@glidos.net> writes:
>>
>>> Hi,
>>>
>>> I've moved a project from CVS on sourceforge to git on repo.or.cz.  I
>>> want a local mirror on my own home server, so that it appears amongst
>>> the projects shown by my own gitweb set up, and so it gets caught by
>>> my backup system.  I've created the mirror with
>>>
>>>   git clone --bare <remote-url> <local-dir>
>>>
>>> and that seems fine.  But how do I now keep it up to date.  I was
>>> guessing a cron job doing some sort of git pull, but pull doesn't
>>> look to work on --bare proj.git type repositories.
>> You probably want "git fetch". Actually, "git pull" does a fetch first
>> (get the remote revisions that you don't have), and then a merge with
>> your working tree.
> 
> Yeah, that's what I thought, but it doesn't seem to work with --bare
> repositories that are of the form proj.git, rather than having a dir 
> proj containing checkout files and a .git folder. Both pull and fetch
> say that it isn't a git repository (although I can view it under gitweb,
> and I can clone and pule from it).
> 
> 
git-remote update is your friend then
Boaz
Luciano Rocha· Feb 4, 2008, 10:50 UTC · re: Paul Gardiner · lore

Re: New to git: sorry for obvious question.

On Mon, Feb 04, 2008 at 09:56:00AM +0000, Paul Gardiner wrote:
Show 12 quoted lines
>  Hi,
> 
>  I've moved a project from CVS on sourceforge to git on repo.or.cz.  I
>  want a local mirror on my own home server, so that it appears amongst
>  the projects shown by my own gitweb set up, and so it gets caught by
>  my backup system.  I've created the mirror with
> 
>    git clone --bare <remote-url> <local-dir>
> 
>  and that seems fine.  But how do I now keep it up to date.  I was
>  guessing a cron job doing some sort of git pull, but pull doesn't
>  look to work on --bare proj.git type repositories.

You want git fetch. Git pull also updates the working copy, which you don't have.

Also, git clone --bare doesn't set up the origin configuration, and I
have to do it by hand:
  git config remote.origin.url "$url"
  git config remote.origin.fetch "+refs/heads/*:refs/heads/*"

As for keeping clones up to date, I include a script I use daily for that purpose.

-- 
Luciano Rocha <luciano@eurotux.com>
Eurotux Informática, S.A. <http://www.eurotux.com/>


#!/bin/bash

cd /media/stuff/src || exit 1

lockf=/tmp/.uprepo.lock
lockfile -60 -l 36000 -r 20 $lockf || exit 1

TL=$((20*60))

running()
{
	kill -0 $* &> /dev/null
}

tl()
{
	local max=$(($1+SECONDS))
	shift
	exec "$@" &
	while running $! &> /dev/null && [ $max -ge $SECONDS ]; do sleep 1; done
	if running $!; then
		kill $! &> /dev/null
		sleep 1
		kill -9 $! &> /dev/null
	fi
}

trap "rm -f $lockf" EXIT

shopt -s dotglob

for i in *.git */*.git; do
	[ -h "$i" ] && continue
	[ -d "$i" ] || continue

	d="${i%/.git}"

	echo $d
	if [ "$d" = "$i" ]; then
		(cd "$d" && tl $TL git fetch) 2>&1 | nocr
	elif [ -d "$i/svn" ]; then
		(cd "$d" && tl $TL git svn fetch) 2>&1 | nocr
	elif [ -e "$d/.cvsurl" ]; then
		(cd "$d" && tl $TL git cvsimport $(<.cvsurl)) 2>&1 | nocr
	elif [ -e "$d/.svnurl" ]; then
		(cd "$d" && tl $TL git svnimport -r $(<.svnurl)) 2>&1 | nocr
	else
		(cd "$d" && tl $TL git pull) 2>&1 | nocr
	fi
done

for i in */*.hg */*/*.hg; do
	[ -h "$i" ] && continue
	[ -d "$i" ] || continue

	d="${i%/.hg}"

	echo $d
	(cd "$d" && tl $TL hg pull)
done

for i in */*_darcs; do
	[ -h "$i" ] && continue
	[ -d "$i" ] || continue

	d="${i%/_darcs}"

	echo $d
	(cd "$d" && tl $TL darcs pull -aq)
done

for i in */.svn; do
	[ -h "$i" ] && continue
	[ -d "$i" ] || continue

	d="${i%/.svn}"

	echo $d
	(cd "$d" && tl $TL svn up -q)
done

for i in */CVS; do
	[ -h "$i" ] && continue
	[ -d "$i" ] || continue

	d="${i%/CVS}"

	echo $d
	(cd "$d" && tl $TL cvs -Q -z3 up -P)
done


#!/usr/bin/perl
use warnings;
use strict;

-t && exec "/bin/cat";

undef $/;

my $in = <>;

$in =~ s/^.*\r(?!\n)//gm;

print $in;
Paul Gardiner· Feb 4, 2008, 12:04 UTC · re: Luciano Rocha · lore

Re: New to git: sorry for obvious question.

Luciano Rocha wrote:
Show 21 quoted lines
> On Mon, Feb 04, 2008 at 09:56:00AM +0000, Paul Gardiner wrote:
>>  Hi,
>>
>>  I've moved a project from CVS on sourceforge to git on repo.or.cz.  I
>>  want a local mirror on my own home server, so that it appears amongst
>>  the projects shown by my own gitweb set up, and so it gets caught by
>>  my backup system.  I've created the mirror with
>>
>>    git clone --bare <remote-url> <local-dir>
>>
>>  and that seems fine.  But how do I now keep it up to date.  I was
>>  guessing a cron job doing some sort of git pull, but pull doesn't
>>  look to work on --bare proj.git type repositories.
> 
> You want git fetch. Git pull also updates the working copy, which you
> don't have.
> 
> Also, git clone --bare doesn't set up the origin configuration, and I
> have to do it by hand:
>   git config remote.origin.url "$url"
>   git config remote.origin.fetch "+refs/heads/*:refs/heads/*"
Brilliant!! That works.

So why wouldn't git-fetch work when, instead of setting up the origin config, I put the url and refspec on the commandline? - not that it matters, just interested.

Cheers,
	Paul.
Boaz Harrosh· Feb 4, 2008, 13:10 UTC · re: Luciano Rocha · lore

Re: New to git: sorry for obvious question.

On Mon, Feb 04 2008 at 12:50 +0200, Luciano Rocha <luciano@eurotux.com> wrote:
Show 22 quoted lines
> On Mon, Feb 04, 2008 at 09:56:00AM +0000, Paul Gardiner wrote:
>>  Hi,
>>
>>  I've moved a project from CVS on sourceforge to git on repo.or.cz.  I
>>  want a local mirror on my own home server, so that it appears amongst
>>  the projects shown by my own gitweb set up, and so it gets caught by
>>  my backup system.  I've created the mirror with
>>
>>    git clone --bare <remote-url> <local-dir>
>>
>>  and that seems fine.  But how do I now keep it up to date.  I was
>>  guessing a cron job doing some sort of git pull, but pull doesn't
>>  look to work on --bare proj.git type repositories.
> 
> You want git fetch. Git pull also updates the working copy, which you
> don't have.
> 
> Also, git clone --bare doesn't set up the origin configuration, and I
> have to do it by hand:
>   git config remote.origin.url "$url"
>   git config remote.origin.fetch "+refs/heads/*:refs/heads/*"
> 
Better do "git-remote add URL" then manual addition as above.
Boaz
Paul Gardiner· Feb 4, 2008, 14:17 UTC · re: Boaz Harrosh · lore

Re: New to git: sorry for obvious question.

Boaz Harrosh wrote:
Show 7 quoted lines
> On Mon, Feb 04 2008 at 12:50 +0200, Luciano Rocha <luciano@eurotux.com> wrote:
>> Also, git clone --bare doesn't set up the origin configuration, and I
>> have to do it by hand:
>>   git config remote.origin.url "$url"
>>   git config remote.origin.fetch "+refs/heads/*:refs/heads/*"
>>
> Better do "git-remote add URL" then manual addition as above.
Would that be git-remote add --mirror origin URL?

← back to recent threads