**NOTE:** This is a workflow for committers. The good news is that non-committer git-svn is simpler still! ==== First, some helpful bash aliases ==== Adjust to taste, of course, but alias show='for i in `git remote show`; do git remote show $i; done' alias dif='git diff' alias co='git checkout' alias ci='git checkin' alias branch='git branch' alias status='git stat' alias upall='for i in `branch|colrm 1 2|grep -vf ~/.dead-git-branches`; do co $i; git pull; done' That last once is extra-fancy -- just branch names you no longer want to work with in ~/.dead-git-branches to ignore them forever more ==== Rely on the kindness of strangers ==== In this case, I'm relying on the kindness of Bill Erickson who set up ESI's git mirror (sync'd every 3 minutes, IIRC) - Init your git $ mkdir ~git/ILS $ cd ~git/ILS $ git init $ git config branch.autosetupmerge true - Pick a git mirror of the official svn repository. There are [[code_repositories|several]]. - Add it as a read/write remote $ git remote add eg-esi git+ssh://git.esilibrary.com/home/evergreen/evergreen-equinoxor $ git remote add eg-esi git://git.esilibrary.com/git/evergreen-equinox.gitfor read-only. Then grab it: $ git fetch eg-esi - Add the svn repo for dcommit'ing * Put this in your .git/config [svn-remote "svn"] url = svn://svn.open-ils.org/ILS fetch = trunk:refs/remotes/trunk branches = branches/*:refs/remotes/* tags = tags/*:refs/remotes/tags/* * Grab it$ git svn fetch(**WARNING:** this takes about 4 hours. There are other ways to do it, but this is the simplest I've found) ==== Get to work ==== - Create your topic branch$ co -b fun_stuff eg-esi/master - Do fun_stuff - Commit said fun_stuff$ ci -a -m 'it really was fun' - Lather, rinse, repeat ==== Sharing is caring ==== - Make sure you're up to date$ git pullIt should know where to pull from, but if git gets confused use$ git pull eg-esi master - Optionally, interactively rebase to squash away some of your commits$ git rebase -i HEAD~`git log --oneline master..|wc -l`This rebases the entire commit stream since branching including upstream merges, so beware! In particular, only squash the commits in your local branch, not merged from upstream ... seriously, don't. - Let others see you junk$ git push eg-esi fun_stuff ==== Can't think of anything witty for "merge" ... so, How To Merge ==== - Update your svn stuffs$ git svn fetch - Update your git stuffs$ git pull - Test pushing your changes up$ git svn dcommit --dry-runYou can use the tree-ish output from that to check your changes$ dif {hash}^1 {another hash} - Actually push your changes$ git svn dcommit Profit!