On Tue, Nov 28, 2006 at 11:32:55AM +0100, Jim Meyering wrote:
Sylvain Beucler [EMAIL PROTECTED] wrote:
On Mon, Nov 27, 2006 at 10:41:49PM +0100, Jim Meyering wrote:
Hi Sylvain,
Do you know of a good way to sync a git repository to cvs?
Ideally, it'd happen upon each commit or push, via a hook.
Currently I'm manually invoking a tiny script based on
git-cvsexportcommit. I think it's based om an example I saw in git's
Documentation dir or in a man page.
Sylvain, in case you haven't been following bug-gnulib, we're planning to
convert gnulib development from CVS to git. But it doesn't always work.
For example, it doesn't preserve executable bits on new files. Yep,
I need to fix and/or report that bug. This is particularly relevant,
because one of the conditions of switching gnulib, IMHO, must be to
retain an automatically-up-to-date CVS repository. That way, only
developers who contribute regularly have to learn/use git.
Everyone else can stick with CVS.
Hi,
Thanks for keeping me updated about this. Feel free to Cc:
savannah-hackers-public@gnu.org about this anytime.
Thanks for Cc'ing them.
I've Cc'd bug-gnulib, too.
I haven't investigated git-cvs pipelines, so I don't have much to
say about it (do you mean uni- or bi-directional, btw?).
One-way: git-cvs. At least, that's my plan:
to make the cvs repository read-only, except
when being updated to reflect a git commit.
FYI, here's my git-cvs script.
(theoretically, a git commit hook would run this)
#!/bin/sh
# Push git changes (that are in the master repo) into the CVS repository.
export GIT_DIR=/cu.git # git repo
set -e
cd /cu-cvs # checked out cvs working directory
for sha1 in $(git-cherry cvs-head | sed -n 's/^+ //p'); do
git-cvsexportcommit -c -p -v $sha1
git-tag -f -m most recent version that has been sync'd to cvs cvs-head
$sha1
done
I saw this though:
http://www.kernel.org/pub/software/scm/git/docs/git-cvsserver.html
Yes, I've read about that.
It may be an option if/when we're willing to dump the CVS
repository altogether. At least for now, I'd prefer to
have the option to switch back to using good-ol' CVS if
by some fluke, a problem arises.
That sounds reasonable :)
On the other hand, if it's stable enough, it'd sure be simpler
than having to hassle with sync'ing via commit hooks...
Apparently this gives
- a way to stick to the 'cvs' command-line when accessing a git repo
(export CVS_SERVER=git-cvsserver)
- a way to access a git repo through the CVS pserver protocol
(I'd need to attach that daemon to another IP because Savannah's git
and cvs are on the same machine)
Could that help?
I can't guarantee I can set that up securely at Savannah but I can
investigate the tools some more if that can help.
That'd be great.
If you could hook one up to coreutils, that might be a good test case...
BTW, I've converted gnulib's (as of a day or two ago) CVS repo into a
git repository (with proper User Name [EMAIL PROTECTED] labels), so if
there's a way to put up a trial git repository, let me know...
I created a 'gnulib' repository, with temporarily denyNonFastforwards
= false so you can perform multiple upload tests there.
(I say temporarily because since the option essentially allows
removing history (i.e. overwriting heads/master arbitrarily), it can't
be enabled for a real repository).
I haven't setup an auto-packing commit hook so may need to have me do
that. I'm planning to add something like in post-update:
export GIT_DIR=coreutils.git
git-count-objects
# If 5120k
git repack
git prune
--
Sylvain