[Top][All Lists]

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

[Savannah-hackers-public] git mirror of emacs CVS repository

From: Jim Meyering
Subject: [Savannah-hackers-public] git mirror of emacs CVS repository
Date: Sun, 06 May 2007 22:49:08 +0200


I am maintaining a read-only GIT mirror of the Emacs CVS repository.
Here's how to access it:

web interface to the read-only public mirror:;a=summary

Use this command to check out a copy of the repository (277MB)[*]
  git-clone git://

FYI, I converted coreutils to git about a year ago and haven't looked back.
Maintaining a read-only mirrored-to-cvs repository is mostly automatic.

I've been mirroring gnulib's upstream CVS to git for some time,
but we will soon switch to using git "upstream" and mirroring
to CVS, as for coreutils.

[*] the Emacs CVS repository currently weighs in at 404MB.

Why bother?

I'm using git for projects I control, and find that I am less and less
tolerant of the abysmal (by comparison) performance of CVS and SVN, not
to mention their relative dearth of functionality.  As a result, I find
it worthwhile to mirror projects I follow to git and to use the mirror,
even if it's just to run "git pull" (rough equivalent of "cvs update")
once in a while.

Why/how is git better, you wonder?  Because with a git repository, I have
the entire history at my fingertips, "git diff" usually completes in O(1)
time (it looked like magic, the first time I tried it), update-from-remote
is much faster than with CVS.  Most day to day commands touch only the
local disk -- no network access required.  The only reason to use the
net is to "git-push" (i.e commit/publish) your changes, and of course, to
pull changes from others.  Using git makes off-line development feasible,
and since branches have minimal cost, the idea of developing on "topic
branches" is finally catching on.

How frequently do I sync the mirror?

    Currently it's only manual, whenever I think about it,
    but it'd be trivial to automate to run say every 20min.

How did I set it up?

    I ran the script below.  The first time, it took many hours (somewhere
    between 5 and 7 just to perform the all-local cvs->git conversion).
    Each subsequent run takes just a few minutes.

    The only hard part was in constructing the cvs-commit-username ->
    [real-name,email] map (called umap-final, below).  More than half
    of those entries were derived using heuristics applied to emacs'
    own cvs logs and ChangeLog files, others came from savannah's mysql
    DB (thanks to Sylvain Beucler for that idea), and the rest I looked
    up more or less manually.  So if something is wrong, let me know.
    I've included it below.

Why do I prefer git over mercurial?

    I wrote that up here:


# Sync a local git repository from a remote emacs CVS repository.

# Omit the cvs config file, so its rules don't interfere.

rsync -aivz --progress \
    --delete \
    --delete-excluded \
    --exclude=MODULES.html,v \
    --exclude=$cvs_config_file \
    --exclude=$cvs_hist_file \
    rsync:// emacs-rsync \
  | tee rsync-log

# If there are no changed files, stop right away.
grep '^>' rsync-log || exit 0

# We've omitted the config file, but it's expected.  Create it empty.
: > emacs-rsync/$cvs_config_file


rm -rf .cvsps
# Set HOME, so cvsps leaves its .cvspsrc file here, not in ~/.
HOME=$PWD git-cvsimport \
  -A $PWD/umap-final    \
  -d $cvs_repo          \
  -v -C emacs.git       \

GIT_DIR=emacs.git/.git \
  git-push ssh+git:// master:refs/heads/master

Here's the umap-final file:
[there are also a dozen or so entries that I'm using in the glibc mirror,
 which is not yet ready]

3diff=Brian Youmans <address@hidden>
JYavner=Jonathan Yavner <address@hidden>
abraham=Per Abrahamsen <address@hidden>
acmacm=Alan Mackenzie <address@hidden>
aj=Andreas Jaeger <address@hidden>
akochoi=Andrew Choi <address@hidden>
albinus=Michael Albinus <address@hidden>
alex=Alex <address@hidden>
andrewi=Andrew Innes <address@hidden>
aoliva=Alexandre Oliva <address@hidden>
as=Alex Schroeder <address@hidden>
bfox=Brian J. Fox <address@hidden>
bje=Ben Elliston <address@hidden>
bkey1=Ben Key <address@hidden>
blaak=Ray Blaak <address@hidden>
bob=Robert J. Chassell <address@hidden>
boris=Boris Sitsker <address@hidden>
bothner=Per Bothner <address@hidden>
brendan=Brendan Kehoe <address@hidden>
bwarsaw=Barry A. Warsaw <address@hidden>
cadilhac=Micha�l Cadilhac <address@hidden>
cd=Carsten Dominik <address@hidden>
cdominik=Carsten Dominik <address@hidden>
coxs=Stan Cox <address@hidden>
cph=Chris Hanson <address@hidden>
cyd=Chong Yidong <address@hidden>
dak=David Kastrup <address@hidden>
dann=Dan Nicolaescu <address@hidden>
davem=David S. Miller <address@hidden>
deego=D Goel <address@hidden>
devnull=Joel N. Weber II <address@hidden>
dje=Doug Evans <address@hidden>
djm=David MacKenzie <address@hidden>
dominik=Carsten Dominik <address@hidden>
dpe=David Ponce <address@hidden>
drepper=Ulrich Drepper <address@hidden>
eggert=Paul Eggert <address@hidden>
eliz=Eli Zaretskii <address@hidden>
enberg=Henrik Enberg <address@hidden>
eric=Eric Heintzmann <address@hidden>
ericding=Eric Ding <address@hidden>
erik=Erik Sandberg <address@hidden>
fp=Frederic Pierresteguy <address@hidden>
friedman=Noah Friedman <address@hidden>
fx=Dave Love <address@hidden>
geoffk=Geoff Keating <address@hidden>
gerd=Gerd Moellmann <address@hidden>
gildea=Stephen Gildea <address@hidden>
gkm=Greg McGary <address@hidden>
gm=Glenn Morris <address@hidden>
hag=Daniel Hagerty <address@hidden>
handa=Kenichi Handa <address@hidden>
harder=Jesper Harder <address@hidden>
hexmode=Mark A. Hershberger <address@hidden>
ian=Ian <address@hidden>
jai=Jaeyoun Chung <address@hidden>
jakub=Jakub Jelinek <address@hidden>
jas=Simon Josefsson <address@hidden>
jasonr=Jason Rumney <address@hidden>
jbailey=Jeff Bailey <address@hidden>
jdsmith=J.D. Smith <address@hidden>
jet=Masatake YAMATO <address@hidden>
jhd=Jan Dj�rv <address@hidden>
jimb=Jim Blandy <address@hidden>
jla=Joseph Arceneaux <address@hidden>
joelh=Joel Ray Holveck <address@hidden>
johnw=John Wiegley <address@hidden>
jpb=Jay Belanger <address@hidden>
jpw=John Paul Wallington <address@hidden>
jurta=Juri Linkov <address@hidden>
jvromans=Johan Vromans <address@hidden>
kai=Kai Gro�johann <address@hidden>
karl=Karl Berry <address@hidden>
kenner=Richard Kenner <address@hidden>
kettenis=Mark Kettenis <address@hidden>
kfogel=Karl Fogel <address@hidden>
kfstorm=Kim F. Storm <address@hidden>
kifer=Michael Kifer <address@hidden>
kitaro=Raul Acevedo <address@hidden>
kwzh=Karl Heuer <address@hidden>
larsi=Lars Magne Ingebrigtsen <address@hidden>
law=Linda A. Walsh <address@hidden>
legoscia=Magnus Henoch <address@hidden>
lektu=Juanma Barranquero <address@hidden>
lh=Lars Hansen <address@hidden>
liberte=Daniel LaLiberte <address@hidden>
lorentey=L�‘rentey K�roly <address@hidden>
lute=Lute Kamstra <address@hidden>
m061211=Martin Rudalics <address@hidden>
marcelo=Marcelo Toledo <address@hidden>
mast=Martin Stjernholm <address@hidden>
mathiasdahl=Mathias Dahl <address@hidden>
mdb=Mark D. Baushke <address@hidden>
mdub=Mike Williams <address@hidden>
meissner=Michael Meissner <address@hidden>
melissa=Melissa Weisshaus <address@hidden>
meyering=Jim Meyering <address@hidden>
mib=mib <address@hidden>
miles=Miles Bader <address@hidden>
mituharu=YAMAMOTO Mitsuharu <address@hidden>
monnier=Stefan Monnier <address@hidden>
mrs=Mike Stump <address@hidden>
mthunder=Steve Morningthunder <address@hidden>
mtr=Martin Thorsen Ranang <address@hidden>
mycroft=Taufik <address@hidden>
nickrob=Nick Roberts <address@hidden>
noel=Noel Cragg <address@hidden>
os10000=Oliver Seidel <address@hidden>
pbreton=Peter Breton <address@hidden>
pfeiffer=Daniel Pfeiffer <address@hidden>
pj=Pavel Jan�k <address@hidden>
pjr=Richard M. Stallman <address@hidden>
pmr-sav=pmr-sav <address@hidden>
pmr=Paul Reilly <address@hidden>
pot=Francesco Potorti` <address@hidden>
psg=Peter S Galbraith <address@hidden>
psmith=Paul D. Smith <address@hidden>
raeburn=Ken Raeburn <address@hidden>
ramprasadb=Ramprasad B <address@hidden>
rao=Paul Fisher <address@hidden>
rassilon=Bill Tutt <address@hidden>
reingold=Edward M. Reingold <address@hidden>
rfrancoise=Romain Francoise <address@hidden>
rlb=Rob Browning <address@hidden>
rms=Richard M. Stallman <address@hidden>
rogue=Christopher Zaborsky <address@hidden>
roland=Roland McGrath <address@hidden>
rost=Markus Rost <address@hidden>
rsteib=Reiner Steib <address@hidden>
rth=Richard Henderson  <address@hidden>
rudy=Rudy Gevaert <address@hidden>
rv=Rajesh Vaidheeswarran <address@hidden>
satyakid=Satyaki Das <address@hidden>
schwab=Andreas Schwab <address@hidden>
sds=Sam Steingold <address@hidden>
seidel=Oliver Seidel <address@hidden>
simon=Simon Marshall <address@hidden>
sk=Suraj Kumar <address@hidden>
spiegel=Andre Spiegel <address@hidden>
stephen=Stephen Eglen <address@hidden>
swift=Matt Swift <address@hidden>
tale=Tomislav Tandaric < address@hidden>
tamm=Steven Tamm <address@hidden>
tege=Torbjorn Granlund <address@hidden>
teirllm=Luc Teirlinck <address@hidden>
terra=Morten Welinder <address@hidden>
thomas=Thomas Bushnell, BSG <address@hidden>
tower=Leonard "Len" H. Tower Jr. <address@hidden>
tromey=Tom Tromey <address@hidden>
ttn=Thien-Thi Nguyen <address@hidden>
tzz=Teodor Zlatanov <address@hidden>
uid65566=Richard M. Stallman <address@hidden>
uid65598=Kim F. Storm <address@hidden>
uid65600=John Wiegley <address@hidden>
uid65604=Sam Steingold <address@hidden>
uid65610=Michael Kifer <address@hidden>
uid65615=Thien-Thi Nguyen <address@hidden>
uid65618=Miles Bader <address@hidden>
uid65620=Kenichi Handa <address@hidden>
uid65624=Benjamin Rutt <address@hidden>
uid65625=Jason Rumney <address@hidden>
uid65627=Eli Zaretskii <address@hidden>
uid65629=Andreas Schwab <address@hidden>
uid65630=Stefan Monnier <address@hidden>
uid65632=Paul Eggert <address@hidden>
uid65641=Per Abrahamsen <address@hidden>
uid65818=Karl Berry <address@hidden>
uid65992=John Paul Wallington <address@hidden>
uid66361=Markus Rost <address@hidden>
uid66490=Martin Stjernholm <address@hidden>
uid66518=Jan Dj�rv <address@hidden>
uid66762=David Kastrup <address@hidden>
uid66918=Glenn Morris <address@hidden>
uid66976=Simon Josefsson <address@hidden>
uid67111=Steven Tamm <address@hidden>
uid67241=Nick Roberts <address@hidden>
uid67419=Jonathan Yavner <address@hidden>
uid67483=Stephen Eglen <address@hidden>
uid68116=Vinicius Jose Latorre <address@hidden>
uid68472=Luc Teirlinck <address@hidden>
uid68798=Lars Hansen <address@hidden>
uid69204=Benjamin Rutt <address@hidden>
viniciusjl=Vinicius Jose Latorre <address@hidden>
voelker=Geoff Voelker <address@hidden>
walters=Colin Walters <address@hidden>
wilson=Jim Wilson <address@hidden>
winkler=Roland Winkler <address@hidden>
wl=Werner Lemberg <address@hidden>
wmperry=William M. Perry <address@hidden>
wohler=Bill Wohler <address@hidden>
zappo=Eric M. Ludlam <address@hidden>
zsh=ShengHuo ZHU <address@hidden>

reply via email to

[Prev in Thread] Current Thread [Next in Thread]