Recs.
Updated
A distributed version control system with an emphasis on speed, data integrity, and support for cheap, non-linear branching.
Specs
Pros
Pro Fast
With Git, nearly all operations are performed locally, giving it a huge speed advantage over centralized systems that constantly have to communicate with a remote server. In addition, Git uses delta encoding to only transmit the changed pieces of files across the network, saving time in large repos.
Pro Used by many open source programmers
The popularity of Git has changed quite a bit over the past recent years, (leaving aside SubVersion as a competitor within the same type of tool as Git), it has become one of the most commonly known used tool for Distributed Version Control Systems for users of all kinds, including projects of all types. You'll have an easier time getting people already involved in open source to contribute than if they had to learn another SCM.
Pro Good documentation
Git documentation covers everything from revision control system basics to Git specific features in a short and clear way.
Pro Ref log
The ref log is one of the greatest (not commonly known) features of git. With it you can:
- Undo almost every history changing operation (including git reset or git rebase or even undo an undo)
- Compare results of an operation with the state before that operation
- Revive accidentally lost branches
- See per branch/ref what operations are executed upon them
Because of this you never have to worry whether a command destroys your (committed) data or history. You can always try freely and go back if it's not to your likings.
Pro Simple storage model
Gits storage model is quite simple. Once you understand it, git's sometimes hard to grasp CLI methods become clearer.
Once you know the power of the CLI, you can do anything with it.
This is also one of the reasons why data corruption is rare, easy to check and usually easy to fix.
Pro Great CLI
The CLI is the most powerful frontend of Git, due to it's subcommand-oriented design, it's reliable and gets you to know more about what's the purpose of each command.
Cons
Con Commands too close to implementation details and strange documentation
Git really suffers from the lack of abstraction made during its conception. Just as a proof, a generator of git-like man pages has been created to celebrate that weirdness.
That said, the documentation is getting better and better; even so, you must grasp the internals (=implementation details) to really make full use of git.
Con Steep learning curve
The large number of commands and functions that Git provides can be discouraging for beginners. Learning how Git works can be a difficult concept to grasp at first.
Con File locking issues on Windows
Due to the Windows file system, e.g. a git gc (garbage collect) process sometimes cannot complete because Windows is locking files that are in use so that they cannot be deleted.
This often occurs when an IDE is monitoring a repository during such a process.
Con Slow on Windows
Though it definitely has improved in recent versions, Git on Windows is still slower than on Unix-based operating systems.
That said, almost everything is slower on Windows than the equivalent on a Unix based os. And also, it is still quick enough and (with most operations) quicker than other SCMs.
Con It's unclear whether tags are pushed or point to a different commit
In contrast to branches, tags don't track remote tags, so it is not possible to judge from the locally available data whether a tag exists in a remote repository or points to the same commit as a tag in the remote repository.
Recommendations
Comments
Flagged Pros + Cons
Con Poor handling of binary data
Binary files (images, music... etc) are not handled so efficiently when there are many versions, since each version must be stored locally (which is unavoidable with distributed version management). nevertheless it is an issue.
However, there is a git extension available (git LFS) that addresses this issue.
Con Not reliable storage
The repository is a bunch of files that can easily be ruined by some accident.
Out of Date Pros + Cons
Con Binary files shouldn't be tracked
Git doesn't handle binary files (bins, images, archives, etc.). Once someone starts tracking them, removing them completely from the history is a bit of a mess (filter-branch + all cloned repo's have to rebase, etc.).