First, we will introduce the important basis for comparison between several Version Control Software. For more details, refer to the link below:
*Version Library Model): Describes the relationship between copies of multiple source code versions. There are two modes: Client/Server and distributed. In Client/Server mode, each user accesses the master database of the server through the client. Each client only needs to save copies of the files it is concerned with and working copy) only after the changes are submitted to the server can other users see the changes to the corresponding file. In distributed mode, the copies of source code version libraries are equivalent entities. In addition to the Working Copies, users' machines also have historical information about local version libraries.
*Concurrency Model): Describes how to manage conflicts when changing or editing the same working copy/file at the same time to avoid meaningless data, with exclusive locks and merge modes. In the exclusive lock mode, only the user who sends a request and obtains the exclusive lock of the current file can modify the file. In merge mode, users can edit or change files at will, but they may be notified of conflicts at any time (two or more users edit the same file at the same time ), therefore, version control tools or users need to merge changes to solve such conflicts. Therefore, almost all distributed version control software adopts the merge Method to Solve concurrency conflicts.
*History Model): Describes how to store file changes in the version library. There are two modes: snapshot and change set. In snapshot mode, the version library stores the working copies before and after the change. In change set mode, the version library saves the working copies before the change, only the information about changes after the changes are saved.
*Scope of change): Describes whether the version number is for a single file or the entire directory tree.
*Network protocols): Describes the network protocol used for synchronization between multiple version libraries.
*Atomic commit): Describes whether all changes can be submitted or merged at the time of submission, or no changes will occur.
*Partially clone (partial checkout/clone): Whether to copy only the specified sub-directories in the version library.
Name |
Version Library Model |
Concurrency Mode |
Historical Mode |
Change Scope |
Network Protocol |
Atomic committing |
Partially cloned |
CVS |
Client-server |
Merge |
Changeset |
File |
Pserver, SSH |
No |
Yes |
SVN |
Client-server |
3-way merge, recursive merge, octopus merge |
Changeset and snapshot |
Tree |
Custom (SVN), svn m (SVN) over SSH, HTTP and SSL (usingwebdav) |
Yes |
Yes |
Git |
Distributed |
Merge or lock |
Snapshot |
Tree |
Custom, custom over SSH, rsync, HTTP/https, email, Bundles |
Yes |
No |
Reference Links:
Http://en.wikipedia.org/wiki/Comparison_of_revision_control_software#cite_note-47
Http://www.softeng.rl.ac.uk/media/uploads/publications/2010/03/cvs-svn.pdf
Http://www.smashingmagazine.com/2008/09/18/the-top-7-open-source-version-control-systems/
Http://jon.limedaley.com/plog/archives/2004/10/15/version-control-comparison
Differences Between Trunk and branch in version control software:
Trunk is the main line in the software development process. It stores the information created from the version Library to the current one. Branch-a branch in the software development process that stores information from a specific point of the version Library (not necessarily when the version library is created) to the current. The Branch is mainly used for exploratory or experimental development of new functions without affecting other trunk users. It can also be merged into trunk after the new functions are completed.