After enthusiastically playing around with Git for a few days, I wanted to share my expirence. It is an extremly powerful, yet (by now) easy to learn version control tool. More and more I start to share Linus Torvalds opinion that everyone who does not use Git is “ugly and stupid”
Here are some key advantages compared to the version control tools I have previously used (RCS, CVS, SVN):
- Truely distributed (every developer has his own repository), therefore, its fast and disconnected operation is no problem at all
- Native handling of branches. The working copy of your branch will be exactly where your original trunk was (no problems with absolute paths [beware!]). Moreover, while branching is not too difficult with other systems, with git even merging is not only easy but fun. It is so much fun that I deliberatly create several development branches just to be able to merge them later. So you can develop every feature in its own branch. When you get distracted and have to do some other work just make a preliminary commit and switch to another branch, continue working there and at any time switch back.
- Merge history. When you merge several branches you will retain the full history of all branches that you merged.
- Amendable Commits. Like mentioned previously, it is no problem if you botch a commit, because you forgot a file. Just amend your last commit.
- Objects are tracked by content (actually their SHA1 hashes). If you synchronize your repository with someone else’s who happens to share a few commits, files or tags (because you have worked together before) these overlaps will be detected and can be incorporated into your version history. Your history is secured against corruption: The content can be verified to still produce the same hash it had when it was checked in. This makes it possible to give a sensible meaning to signing commits (e.g. for approval).
In short this is one of the nicest software development tools I have stumbled upon recently. You should definitely take a look.