Hi, I have script which wraps git-cvsimport and git-cvsexport, called "git-cvs". The main aim of the script is to automate the steps for tracking a CVS repository with the git-cvs* commands. It's not currently as sophisticated as git-svn, it's undoubtably flawed and isn't foolproof (e.g. exports to CVS of merged git histories can be problematic), but I find it useful, because a lot of the nitty-gritty is done for me. I'd like to ask: - Is this at all useful to anyone else in it's current form? - Is there any prior art I should be aware of? (Presumably most people just roll their own scripts, like I have) - Bearing in mind that it's a work-in progress, are there any suggestions for improvement? The script can be found in its current state here: http://github.com/wu-lee/git-cvs/ There's no installer, but the script is self-contained and just needs to be on the execution $PATH (as well as git and cvs). Given a CVS repository at $CVS_ROOT, tracking a module $CVS_MODULE can be done like this: # Create a git repo git init # Initialise git-cvs's config file echo cvsroot=$CVS_ROOT >.git-cvs echo cvsmodule=$CVS_MODULE >>.git-cvs # First pull gets cvs files using git-cvsimport # (optionally you can supply the option # --author-file <authormap> for pass-through # to git-cvsimport -A on subsequent invocations) git-cvs pull # hack hack... # Push the files back into CVS with git-cvsexportcommit # (This pushes the commits master..remotes/cvs/cvshead by default, # or cvsworking/NAME..remotes/cvs/NAME for each CVS branch NAME) git-cvs push # Pull the changes back into remote/cvs/cvshead and # (a messy part I've not found a way round yet) throw away our # locally merged commits git-cvs pull git reset --hard master # More hacking... # Repeat push/pull steps as needed Some other points: - Changes in CVS get pulled back, including multiple branches. - An author-mapping file can be supplied as for cvs-import -A - The script creates local CVS working directories .git/git-cvs/cvscheckout/NAME, one for each CVS branch NAME. - Git's master branch tracks CVS's HEAD branch. - A git branch cvsworking/NAME is created to track each CVS branch NAME. - Edits in these branches get pushed back to the appropriate CVS branches. - Verbose subcommand output currently goes into .git/git-cvs/logs. - Invoking git-cvs with no parameters gets information about the options. - In an emergency, a list of commit ids can be supplied to git-cvs push. - Written in Perl, uses only core modules (tested with v5.8.8) - There is a small test suite in t/, run individually or with "prove/*.t" Thanks, Nick -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html