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.

  • How can I get `find` to ignore .svn directories?
  • What causes svn error 413 Request Entity Too Large?
  • How to display a specific user's commits in svn log?
  • SVN Commit failed with syntax error, unexpected '
  • Android Studio - unable to merge from SVN branch
  • Get all projects in SVN that have svn:externals to a certain repository
  • Also, if you could, please recommend any books on the subject that you find useful.

  • TortoiseSVN very slow over proxy if Windows internet explorer proxy settings are not set and using only TortoiseSVN proxy settings
  • Can git be integrated with Xcode?
  • How do I implement revisions with neo4j?
  • Safe master-master setup with git? (writable git mirror)
  • Hosted subversion recommendations or suggestions
  • child branch and parent branch synching themselves
  • 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

    Revision control

    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
    • rollbacks
    • conflict resolution
    • exclusive vs. non-exclusive checkout
    • continuous integration
    • Test-driven development & automated unit tests vis-a-vis source control systems
    • forking

    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

    Git Baby is a git and github fan, let's start git clone.