Hello,

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:
  http://git.sv.gnu.org/gitweb/?p=emacs.git;a=summary

Use this command to check out a copy of the repository (277MB)[*]
  git-clone git://git.sv.gnu.org/emacs.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.
  http://git.sv.gnu.org/gitweb/?p=coreutils.git

I've been mirroring gnulib's upstream CVS to git for some time,
  http://git.sv.gnu.org/gitweb/?p=gnulib.git
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: http://meyering.net/dVCS

Jim

----------
#!/bin/bash
# Sync a local git repository from a remote emacs CVS repository.

# Omit the cvs config file, so its rules don't interfere.
cvs_config_file=emacs/CVSROOT/config
cvs_hist_file=emacs/CVSROOT/history

rsync -aivz --progress \
    --delete \
    --delete-excluded \
    --exclude=MODULES.html,v \
    --exclude=$cvs_config_file \
    --exclude=$cvs_hist_file \
    rsync://cvs.sv.gnu.org:/sources/emacs 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

cvs_repo=$PWD/emacs-rsync/emacs

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       \
  emacs

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


_______________________________________________
emacs-pretest-bug mailing list
emacs-pretest-bug@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-pretest-bug

Reply via email to