Learning Version Control, and learning it well
Where should I start learning about version control systems? I’ve used SVN, Team Foundation, and Sourcesafe in the past but I don’t really feel like I grasp it completely, and my team doesn’t seem to grasp it either.
Which points are the most important to master? I realise this differs from VCS to VCS, but for the sake of this question we can assume that Subversion is the VCS I’m the most interested in learning about.
Also, if you could, please recommend any books on the subject that you find useful.
13 Solutions collect form web for “Learning Version Control, and learning it well”
The wikipedia article on Revision Control is a great place to start
When trying to teach my colleagues, I found getting him to understand the vocabulary at the end was a great way to start to introduce him to source code control techniques.
Don’t know what a branch is? Go find out and how they work 🙂
There’s a free online subversion book at Version Control with Subversion which provides an invaluable reference.
I found this useful Source Control HOWTO by Eric sink
I think the most important points one has to learn regarding source control systems are the following:
- the value of small, frequent check-ins/commits
- tagging, branching and merging
- conflict resolution
- exclusive vs. non-exclusive checkout
- continuous integration
- Test-driven development & automated unit tests vis-a-vis source control systems
If you’ve got these major concepts covered, that’s pretty much most of the things you’ll ever need to know for source control 🙂
There are a couple of free ebooks on the subject. Try:
Version Control With Subversion: Version Control with
Subversion Version Control (PDF): Subversion Version Control
I have read and would recommend the former. Haven’t read “Subversion Version Control”, but it looks pretty in-depth.
To answer your question re: Which are the most important points to master I would suggest that after you get through the whole checking in and out process, rolling back to old versions and performing diffs you should take a look at branching. Branching can help you deal with the pain of being in the middle of a large change and suddenly needing to perform a bug fix and deploy it to production without the mixing in the half done stuff you are working on.
I think the Subversion documentation is a good place to start. I found that Wikipedia doesn’t really help, since it only covers a ‘fundamental’ point of view.
In the Subversion Book that alex mentioned, I’d especially recommend Chapter 1, although that might be on a level that’s too low if you already have some experience with Svn. Chapter 4 covers branching and merging in detail, but it’s quite technical.
What helped me a lot is the Daily Use Guide in the TortoiseSVN documentation; it covers the most important operations in a tutorial style.
I guess the most important things you need to grasp are branching, merging and tagging. Understanding those takes time and practice, so I’d strongly recommend a small pet project in a local repository, so you can experiment. I think it’s important to realize is that the whole system is diff-based: a merge is nothing more than automatically applying the changes that have been made in one branch to the code in another branch, instead of correcting the code yourself. Stuff like conflicts (which took me quite a lot of time to understand) are just consequences of that.
But of course, I’m still learning as well 🙂
I also, like you, never really felt a 100% comfortable with SVN or SourceSafe.
Check out Mercurial. Quickstart and Cheatsheets
also a great cheat sheet from DongWoo Lee (his site seems down so I scanned it and uploaded onto mine)
With Mercurial everything seemed a lot more smooth and easy not sure why because it’s not that different in commands to others.
I am not sure how much experience you have with version control systems, but for someone who has no prior knowledge about the concept I recommend reading the first few chapters of the Subversion book. Some of the things described there are specific to Subversion, but many of the concepts are “universal” for version control systems and how to work with them.
I think it’s very important that people make an effort in trying to understand the main concepts and rationales behind version control systems before starting to use them. All too often I see developers only using a small subset of their system’s features because they don’t understand the underlying concepts and therefore either don’t see the point in using what they consider “advanced” or “unnecessary” features, or they are simply afraid to do so in fear of breaking something or causing problems for the project.
Having experienced this phenomenon with many developers in the past, I recently wrote up a summary of what I consider best practices for version control on my blog.
Read this: How Software Evolves
Check out GIT. A talk on it here.
IMHO, the best network resource for Configuration Management would be The ACME Project by Brad Appleton
You should read about all SCM patterns and Anti patterns.
All SCM technical terms are well defined on this site and there are many articles on branching techniques, agile SCM and other important stuff.
This, probably, will give you enough theoretical background to handle any specific version tool.
As to a Subversion book, it is probably will be the Official Subversion book which was mentioned above. It is available online for free or you can purchase a hard copy.
IMHO, this is THE book: Berczuk’s book on SCM patterns
Version control by example by Eric Sink is good and easy to follow