Intros to git:
- basic git tutorial video 60 min
- git user manual
- git man pages
- git crash course for svn users
- working with a remote repository (github, pull, fetch, push) (video 10 minutes)
- git magic (Ben Lynn)
Working with git and Subversion:
- Basic introduction to using git-svn
- remote tracking branches (also applies to git-svn tracked branches)
Blogs, Opinions:
- Linus Torvalds on git (at google, video 70 minutes)
- staging/index explanation and uses
Books:
- pragmatic-version-control-using-git
- http://progit.org/ (available fully online)
ONGOING NOTES:
my development procedure (to be completed and tested):
- setup git repo by cloning (only) the subversion trunk (but full history!)
- cd d:/git
- git svn clone http://svn1.sbb.ch/polar/client/trunk
- cd trunk
- create a branch for own work
- git checkout -b test3
- get updates from subversion
- frequently (daily?) run "git svn fetch" to pull changes into the remote branch without doing anything - slow because svn need to create diff sets for each change. Run in background.
- rebase/merge master frequently "git svn rebase -m" - puts master and svn in sync
- merge branch locally
- git checkout master // switch to workspace to master
- git merge test3 // merge changes from test3 branch
- git mergetool // to handle conflicts using the graphical tortoisemerge
- git add
// mark merge conflicts as resolved - git commit -m "manually merged conflicts"
- commit to subversion
- ensure master branch and remote git-svn are in sync (git svn rebase -m)
- git svn dcommit
- empty directories in svn must be manually removed
- initial clone for our client/trunk SVN takes several hours (~4h for 2000 revisions)
- fetch, update or rebase takes quite a while (up to 1h - many svn changes because of experiments with mvn release)
Useful-looking at first glance, yet to grok:
git helper scripts
git ready
merging screencast (video 10 minutes)
Noteworthy features of git:
- merges that work unless there really is a conflict
- speed
- staging/index - ability to work on multiple things and separate a commitable set from the resulting mixture of changes, even if changes affect the same files
- easy addition to the most recent commit, shuffling and reordering of commit chunks after the fact
- gitk visual representation of all branches, changes, merges
- distributed - not very relevant in central-SVN context, although useful for local feature branches