If you are stuck using cvs in your dayjob, you may still get some mileage out of git. I will not discuss the cvs-git roundtrip tools, but rather how you can use git as a simple personal workflow enhancement.
First time setup
After installing git, remember to set your name and email in the global settings:
git config --global user.name "Your Name" git config --global user.email email@example.com git config --global core.excludesfile ~/.gitignore
See ‘man git-config’ for other cool settings…
Using git locally
I mainly use Git as a local “convenience” of sorts with CVS. I check out a module from CVS, and then do the following inside the toplevel directory:
git init git add . git commit -m 'initial import'
NOTE: for this to work best, I have a global
~/.gitignore on ‘CVS’ and ‘.cvsignore’, to avoid versioning cvs metafiles in the local git repository…
Then, I can work with the files locally, and commit small changes to git, revert my changes, etc. Whenever I feel like integrating new changes from other people, I do a
I can then use ‘
git status‘ and ‘
git diff‘ to look at what has happened, and resolve conflicts etc.
If I have made local changes not in CVS, I commit it to CVS. If I have made many small changes in git, this then ends up as a nice “atomic” bigger commit to CVS.
Once CVS is up-to-date with my changes, I usually then just commit everything change in CVS to git with
git commit -a -m 'cvs sync'
If I do this several times without intervening local check-ins, I use the
--amend option to
git commit, to just add the new changes to the previous commit.
Using local branches and rebasing on CVS head
For the “advanced” user, it is very cool to do own development on a branch, and just leave the master to be in sync with CVS.
git branch my_branch git checkout my_branch ... work ... git commit ...whatever...
I then switch back to master to sync with cvs, and then rebase the branch on head
git checkout master cvs update git commit -a -m 'cvs sync' git checkout my_branch git rebase master (possibly fix merge conflicts and...) git rebase --continue
Now, the branch is updated to be as if from the tip of HEAD, so future merges to CVS are easier.