It's rather funny this is popping up right now, in a sorry kinda way. Had
the same trouble with SF and somehow I'm not really feeling 'up to it' to
get my SF stuff going again. If I'd been 20 years younger I would
concisely summarize this emotion as:
- keep the mailing lists on SF (they're fine)
- migrate the rest to github/git
- bonus track on this CD: pretty pictures a.k.a. graphs
Anyway, just recently started doing some crm114 sponsored work and first
stage is getting the mess into git (now my only used VCS and used for
everything; it's become 'Sanctioned State Policy' in Hobbelt County) and
The big boon (for me) with git is that
1) 'intelligent merging which actually works with this one' so I (and
others) can more easily track someone else's work, while keeping our own
edits too [**]
2) If you 'want to try something', the handling cost of adding a branch is
negligible, thanks to #1: when you're happy about the trial, you go 'git
merge' and maybe have to resolve a couple of conflicts and presto, joining
lanes of development are easy. If you're so-so about it, you can go and git
3) You can carry your git repos with you on different machines, all 'live',
no Internet required. Think: copy on travel laptop, copy on machine at the
other home, etc. (You sync the buggers by either brute force rsync if you're
a single pony show and know what you're doing 100.0% of the time, or you do
it properly by having them refer to each other as just another set of
'remote repositories' which you can fetch and merge; doing it this way
protects you from nuking the 'latest work' when you're not really awake
while playing keyboard monkey and 'git merge' is smart enough to zip through
the merge unassisted, so issue command ('git remote update && git merge
...') and be done, locate bed to finally sleep, no worries, because when you
fubarred it, you'll have 100% chance at recovery in the morning by doing the
same in the (now correct) from-to direction.
And if you screw up badly for days on end, the edit will wait for you and
not disappear: the next time you do it right it's either merged
automatically or triggers a 'conflict' you can quickly resolve and
everything'll be honky dory from then on, once again. (Contrast this with my
ugly SVN experience, where SVN merge fubarred my work in a very subtle way,
causing me to fall back to my old way of doing merges: Beyond Compare, i.e.
100% manually. Now I still use Beyond Compare, but only for conflict
resolution, not for validating merges any more. I trust git because it's
proven trustworthy for a year without failure.)
Github gives me pwetty pictuwes to gawk at when I'm fazing out in the
evening, so the burden to see what someone (else) has been doing is
lightened: I can hover over the dots in the graph and 'get a feel for it'
much easier then when I'd have to read a ChangeLog / diff log, particularly
when there's been branching and merging going on.
(drag right/left to see some ugly first merges in there)
For a 'real network graph', just look at the dots and colours of:
(the latter is a full import of the googlecode original repo: I went nuts
trying to find out what everybody had been doing _exactly_ where it sounded
like it was of interest to my use case, so I pulled it into github and let
it rip; ahhh... clickable graph! lovely!
The right edge is showing me abusing 'git merge' to fast-track the testing
of various available patches)
[For the graph-hungry there's also the [un?]pleasant surprises you can glean
from looking at your 'punchcard' and 'impact' graphs after a while. I made a
couple of discoveries there, so they're not just 'cool' for me.]
I don't know about y'all, but I can handle graphs like that even on those
bad days when raw 'diffs' are synonym to eyewatering 'WTF?'
E.g.: click on the nodes in the yerazunis branch to see the diffs. Note that
this is NOT 'good use of git' as it merely logs full releases, so you see
huge loads of changes per revision; once you've got git installed (either
command line, TortoiseGit or your own GUI favorite, you're bound to see
behavioural change in yourself and graphs like the next one with every
little edit getting its own comment and revision:
(see the activity on June 29, 2011: small bits of action per revision most
of the time; very basic linear development, it's me re-activating my little
bit of TRE work and the TRE 0.8.0 release plus import from my backup of
Ville's darcs repo)
[*] The publicly available Yerazunis releases, as copied off SF before, are
in the 'yerazunis' branch, but I didn't have several known releases in my
current archives (any fillers out there, BTW?), for instance the
BlameBarack, so that 'yerazunis' branch is bloody darn flaky in terms of
The 'master' branch in there is just tracking all my own public releases,
for starters. It's a bit of a mess, so not an example of 'this is how you do
it'. All it shows is my lack of using a workable VCS (thank you, CVS, for
one more corrupted repo) for crm114 before.
Yes, now I know git I can finally admit it: CVS sucks poles. So does SVN. As
does VSS, but everybody with a brain knew _that_ one already. I've always
been of two minds about using a VCS for project X, because there always were
some niggling intangibles that had me loath 'em rather than plain love 'em.
After one year of working with git, I can state that every new project is
done, consistently, with git, without the 'doesn't feel right/whole' goblin
calling in and zero relapse into not using the VCS any more. All the older
projects that get attention are moving into git as well, irrespective of
whether they are maintained in different VCSs or none at all.
I get scared on the subject of losing work, but the way git works allows me
to copy the stuff around, make backups any way I like (file copy is fine)
and know for certain that I can obtain all after a crash - this has
happened: my solution was to take the backup git archive and clone it. In
another case I did list the backup as a 'remote repository' and did a 'git
merge' because I didn't trust it as it came off a spectacularly crashed (yet
new) HD. Couple of holes in my history, but my latest was alive and kicking.
All my public work (and my private work since one month as well) is being
moved out to github: I get remote backup that way plus lovely tools, so
Right now I'm working on making the GerH crm114 master branch compile out of
the [git]box again + upgrading my goods to bleeding edge BillY's. We'll see.
[**] 'git merge' has been proven excellent to my criteria/measurements:
used for about a year now, something around 1.5M LOC overall, multiple
projects, small and large, and zero faults in the automatic merge (as in:
'git merge' making the wrong choice). Meanwhile, one of my projects (not
crm114) saw a 'sync-ing altered branch with someone else's public origin
repository' cost decrease from 4 hours per sync to .5 - 1.0 hours per sync
on an otherwise unaltered sync schedule (hours which require your
concentrated attention as you need to think about what is happening and
which choice to make for every 'conflict') - a life saver. (This was a move
from SVN @ 4h to GIT @ 0.5-1h cost and my first serious large-scale git
crm114 is a special case as GerH builds differ a lot form 'vanilla BillY',
if only for the 'long doesn't mean it's safe/portable' disparity in there.
git notices all those little edits, so it's careful when merging.
> I remember when Sourceforge was easy to use. Now it's harder
> to use Sourceforge than it is to actually write the program you
> wanted to write in the first place.
> Grumble grumble. Time for a new alternative.
> - Bill
Met vriendelijke groeten / Best regards,
mobile: +31-6-11 120 978