Learn why decentralized version control is good for you, and how to use it to full effect.
While not directly Python-related, version control should be mandatory knowledge for every single software developer out there. Knowing your tools will make you more productive and will let you concentrate more on the actual code.
Lately, decentralized version control has been all the rage. I aim to show you why, and what great benefits you will get from it, even if you work alone.
While the principles apply to any decentralized version control -- they are closer to each other than people normally expect -- I am most familiar with git, and will be talking about that.
This talk should apply equally to free software projects or for proprietary in house development.
aka hg
aka.. err..
aka bzr
aka TLA aka Baz
aka mtn
eh, screw it
aka bk
git is to bk like Plan 9 is to AIX
git is a fast, content-addressable, decentralized and symmetrically ad hoc synchronizable, cryptographically verified Ventiesque filesystem, stored as a Merkle tree-inspired directed acyclic graph of tags, commits, trees and blobs, in that order, with SHA-1 pointers as edges, backed by a POSIX filesystem, with both a simple storage format and a space- and seek-efficient, compressed delta chained pack format
Venti: http://plan9.bell-labs.com/sys/doc/venti.html
Merkle tree: http://en.wikipedia.org/wiki/Merkle_tree
parallel allocation
no sequential numbers
SHA-1
... but we can do that during sprints, if you want?
Fetch (/pull) and push are the only operations using the network. Thus, they are the only ones suffering from delays due to slow network -- every other operation is completed nearly immediately. They are also the only operations needing e.g. SSH authentication.
Write once!
Cannot mutate commits, can only rewrite everything after that point in the history (for all routes through the DAG).
pending in branches / other repos
policy per-repo / per-branch / per-person
when to branch
where to branch from
when to merge where
who merges
always ;)
current main branch head
last release
"known good"
bugfixes: earliest supported where bug is found




devel/stable
v1.x, v1.1, master
"next"
releases, settling period?
between developers


Can do a development spike or a prototype, using the version control system as a mere backup mechanism with no concern to commit quality, and later combine/split commits to build atomic incremental changes with related unit tests. Can use temporary branches that are not public, and there's no need to publish the "ugly" work.
Questions?
Slides will be on eagain.net. See also articles/git-for-computer-scientists
Want git tutorial?
Use gitosis!