Previously my mechanism of checking into CVS from git caused problems: I plucked changes off of my work branch and reapplied them to the HEAD of the master branch with git rebase --onto, leaving local changes that I never want to commit back in the local branch. Then I committed, then went back to the master branch and pulled from CVS again where I had to fix things because my ignored CVS directories were telling CVS I had newer versions of files than my master branch actually had. This resulted in files appearing to CVS to be modified when they were not (and the modifications appeared to be reversions of the changes I had just checked in).
My new procedure avoids this, exercises more of git's neat features, and permits me to keep my own individual changes sitting in my repository's master branch forever instead of turning into just one big lump pull from CVS (possibly combined with other unrelated changes).
Branch definitions:
Here's my procedure:
git checkout work git checkout -b work-cvs
git rebase --onto master local work-cvs
g diff --name-status master
git diff master
git log
git checkout master git merge work-cvs
git branch -d work-cvs
git checkout local git merge master git checkout work git merge local
We'll see how this goes. Seems much, much better than before. Definitely better than tracking CVS directories in some or all of my branches, which I was considering.
I tried using the git-cvs interfaces when I first started this adventure, but after working fine a couple of times for small changes, it choked up on a series of 8 or more patches from git, leaving the CVS repository in an unforgiveably (but not unrecoverably) broken state. The last thing I want to happen while I'm getting to know git is for my git activity to be noticed in this way.