Appendix A. Comparison Table

Table A.1. Commands

OperationSubversionMercurialGitVeracity
Createsvnadmin createhg initgit initvv init
Checkoutsvn checkout[a][b]vv checkout
Commitsvn commithg commitgit commit[c]vv commit
Updatesvn updatehg updategit checkoutvv update
Addsvn addhg addgit add[d]vv add
Edit  git add[e] 
Deletesvn deletehg removegit rmvv remove
Renamesvn movehg renamegit mvvv rename
Movesvn movehg renamegit mvvv move
Statussvn statushg statusgit statusvv status
Diffsvn diffhg diffgit diffvv diff
Revertsvn reverthg revert[f]vv revert
Logsvn loghg loggit logvv log
Tagsvn copy[g]hg tag[h]git tagvv tag[i]
Branchsvn copy[j]hg branchgit branchvv branch
Mergesvn mergehg mergegit mergevv merge
Resolvesvn resolvehg resolve vv resolve
Locksvn lock[k][l]vv lock[m]
Clone hg clonegit clonevv clone
Push hg push[n]git push[o]vv push[p]
Pull hg pull[q]git fetch[r]vv pull[s]

[a] In Mercurial, the repository instance is stored inside working copy.

[b] In Git, the repository instance is stored inside working copy.

[c] Without -a, commits only those things which have been explicitly added to the git index.

[d] git add is also used to notify Git of a modified file.

[e] Or, automatic when using git commit -a.

[f] git checkout can be used to revert the contents of a file. There is a git revert command but it is used to alter changesets that have already been committed.

[g] Tag appears as a directory in the repository tree. Causes a commit.

[h] Tags are stored in a version-controlled text file. Causes a commit.

[i] Tags are stored in a database DAG.

[j] Branch appears as a directory in the repository tree. Causes a commit.

[k] Lock is unsupported by Mercurial.

[l] Lock is unsupported by Git.

[m] Requires network connection to the upstream repository instance.

[n] Requires --new-branch when pushing a new branch.

[o] By default, pushes only the branches which already exist on the other side.

[p] By default, pushes all changesets in all DAGs.

[q] Does not update the working copy without -u.

[r] git pull is equivalent to pull followed by update.

[s] Does not update the working copy without -u.