On Fri, Mar 06, 2009 at 09:36:25AM +0000, Drew Taylor wrote: > I've been trying to figure out how to worm git into our workflow at > $work where we currently are using CVS. I tried to import the CVS repo > to git a couple different ways but was spectacularly unsuccessful both > times.
I've just taken my CVS repo from sourceforget and imported it into git just fine. The recipe was: Get a local copy of the entire repo: $ rsync -av rsync://drhyde.cvs.sourceforge.net/cvsroot/drhyde/ $HOME/cvs-repo Build and install cvsps, which you can get from here if your OS doesn't have a pre-built package of it. You need version 2.1 or higher (2.1 is the most recent stable release): http://www.cobite.com/cvsps/cvsps-2.1.tar.gz Import. This may take a Very Long Time, and needs absolute paths: $ git cvsimport -av -d $HOME/cvs-repo -C /path/to/new/git-repo cvs-module-name I found that cvsimport didn't like this file in my CVS repo. http://drhyde.cvs.sourceforge.net/viewvc/drhyde/perlmodules/Number-Phone/lib/Number/Phone/UK/Data.pm?view=log It's a huge binary, with several *very* large changes in its history, so I'm not surprised as it's egregious CVS-abuse. It probably ran into my ulimit settings. I couldn't be bothered to investigate though, and just removed it from the repo by hand, and then added the most recent version of the file into the newly created git repo afterwards, thus losing its history: I also found that after cvsimport had died and I'd removed the offending file from the CVS repo (don't forget to remove the history log as well!), I then had to delete the newly created git repo and start the import again - it didn't like continuiing where it had left off, despite the doco I was following indicating that that should work. Finally, once the import has succeeded, prepare it for access by multiple users and clean up so you're not tempted to work in the git checkout you just created - you probably want to treat it as a traditional CVS repo: $ cd /path/to/new/git-repo [delete everything in this dir apart from the .git directory] $ mv .git repo.git $ sudo chgrp -R gitusers repo.git $ find repo.git -mindepth 1 -type d |xargs chmod ug+rwx,g+s $ GIT_DIR=repo.git git repo-config core.sharedrepository true You can then checkout thus: $ git clone /path/to/new/git-repo/repo.git working-copy/ or over ssh: $ git clone hostname:/path.... You update your working copy thus: $ git pull Remember that 'git commit' in your checkout only checks in locally, to "commit" to the server: $ git push All of that seems to Work For Me and I can fiddle with my code on either my laptop or my desktop and it behaves just like CVS. I'd do some rather more rigourous testing with multiple concurrent users doing updates before relying on it though! git++ # CVS with offline commits -- David Cantrell | London Perl Mongers Deputy Chief Heretic What profiteth a man, if he win a flame war, yet lose his cool? _______________________________________________ Boston-pm mailing list [email protected] http://mail.pm.org/mailman/listinfo/boston-pm

