# New to git: sorry for obvious question.

8 messages from 2008-02-04 to 2008-02-04. Participants: Paul Gardiner, Matthieu Moy, Boaz Harrosh, Luciano Rocha.
Thread: https://gitlist.dev/t/11865

## Paul Gardiner, 2008-02-04 09:56

Subject: New to git: sorry for obvious question.
Message-ID: <47A6E130.7090909@glidos.net>
URL: https://gitlist.dev/e/47A6E130.7090909%40glidos.net

```
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, 2008-02-04 10:27

Subject: Re: New to git: sorry for obvious question.
Message-ID: <vpq4pcp6moq.fsf@bauges.imag.fr>
URL: https://gitlist.dev/e/vpq4pcp6moq.fsf%40bauges.imag.fr
In-Reply-To: <47A6E130.7090909@glidos.net>

```
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.

-- 
Matthieu

```

## Paul Gardiner, 2008-02-04 10:41

Subject: Re: New to git: sorry for obvious question.
Message-ID: <47A6EBBD.9060500@glidos.net>
URL: https://gitlist.dev/e/47A6EBBD.9060500%40glidos.net
In-Reply-To: <vpq4pcp6moq.fsf@bauges.imag.fr>

```
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).

```

## Luciano Rocha, 2008-02-04 10:50

Subject: Re: New to git: sorry for obvious question.
Message-ID: <20080204105006.GA15855@bit.office.eurotux.com>
URL: https://gitlist.dev/e/20080204105006.GA15855%40bit.office.eurotux.com
In-Reply-To: <47A6E130.7090909@glidos.net>

```
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/*"

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;

```

## Boaz Harrosh, 2008-02-04 10:51

Subject: Re: New to git: sorry for obvious question.
Message-ID: <47A6EE2B.7050500@panasas.com>
URL: https://gitlist.dev/e/47A6EE2B.7050500%40panasas.com
In-Reply-To: <47A6EBBD.9060500@glidos.net>

```
On Mon, Feb 04 2008 at 12:41 +0200, Paul Gardiner <osronline@glidos.net> wrote:
> 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

```

## Paul Gardiner, 2008-02-04 12:04

Subject: Re: New to git: sorry for obvious question.
Message-ID: <47A6FF6B.1000103@glidos.net>
URL: https://gitlist.dev/e/47A6FF6B.1000103%40glidos.net
In-Reply-To: <20080204105006.GA15855@bit.office.eurotux.com>

```
Luciano Rocha wrote:
> 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, 2008-02-04 13:10

Subject: Re: New to git: sorry for obvious question.
Message-ID: <47A70ECE.2040606@panasas.com>
URL: https://gitlist.dev/e/47A70ECE.2040606%40panasas.com
In-Reply-To: <20080204105006.GA15855@bit.office.eurotux.com>

```
On Mon, Feb 04 2008 at 12:50 +0200, Luciano Rocha <luciano@eurotux.com> wrote:
> 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, 2008-02-04 14:17

Subject: Re: New to git: sorry for obvious question.
Message-ID: <47A71E8F.6030104@glidos.net>
URL: https://gitlist.dev/e/47A71E8F.6030104%40glidos.net
In-Reply-To: <47A70ECE.2040606@panasas.com>

```
Boaz Harrosh wrote:
> 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?

```
