Ich habe mich für Git entschieden, aus diesen Gründen:
Ich fand Git auf der Befehlszeile hilfreicher und das Auftreten dort etwas gelungener als bei Mercurial, auch wenn die vielen Optionen und Schalter von Git anfangs etwas einschüchtern. Eigene Automatisierungen durch das programmatische Aufrufen von Befehlen und das Abgreifen ihrer Ausgaben gingen mir bei Git daher etwas leichter von der Hand. Bspw. nutze ich für die automatische Versionierung Informationen aus dem Projektarchiv.
Bei Git kann man auswählen, welche entfernten Linien in das lokale Projektarchiv kopiert werden sollen und welche von denen nachverfolgt werden sollen. Mercurial übernimmt immer die Informationen zum gesamten Projektarchiv. Nichts abwählen oder auslassen zu können, war für mich irgendwie wider dem Prinzip "So viel wie nötig, so wenig wie möglich". (Aber diese Information ist mittlerweile einige Jahre alt.)
Ich habe mit Subversion angefangen und es meistens über TortoiseSVN bedient. Ich bin dort aber schon auf die Befehlszeile gewechselt, so dass beim Umstieg auf eine dezentrale Versionsverwaltung die grafische Bedienung keine Rolle mehr spielte -- mit einer Ausnahme: Die Betrachtung der Versionshistorie. Dafür bieten sowohl Git (gitk) als auch Mercurial (Befehl ist mir entfallen) gute grafische Betrachter, oder man nutzt doch wieder Hilfssoftware (TortoiseGit, TotoiseHg,...), womit ich mich aber nicht näher auskenne.
Git unterstützt es, ein Subversion- in einem Git-Projektarchiv zu halten. Damit deckt man viel ab, wenn man Fremdbibliotheken in ihrer Originalversionsverwaltung halten will. Für Mercurial gibt es eine Erweiterung, um ein Git- in einem Mercurial-Projektarchiv zu halten. (Das ist auch eine ältere Information, vielleicht gibt es da heute mehr.)
Mit Mercurial kann man Dateien explizit umbenennen, Git macht das nur implizit.
Mercurial for Git Users
A Collection of how Git compares to other Version Control Software
Git vs. Mercurial: Please Relax
Mercurial and Git: a technical comparison
Mercurial vs. Git: Why Mercurial?
Und bezüglich der Molularität:
Git Submodule Tutorial
Zu guter Letzt: Allgemein ist es sicherlich weniger ein ausschlaggebender Grund, aber doch ein bestätigendes Ereignis meiner Entscheidung für Git: Der Befehl "git bisect" ließ sich vergleichsweise leicht automatisieren. Mercurial hat sich diesen Befehl zwar irgendwann einmal souverän abgeguckt, aber hat die schöne Automatisierungsgrundlage ("git bisect run") nicht übernommen.
Weil ich für die Automatisierung mit Delphi nichts im Netz fand, habe ich dafür selbst etwas geschrieben und das Ergebnis veröffentlicht, denn es war dennoch ein gewisser Aufwand, den sich andere vielleicht nicht machen müssen -- ganz besonders, weil es (hoffentlich) ein seltener Anwendungsfall ist. Mal gucken, ob es jemandem nützt...? Mehr Informationen gibt es hier:
Panthrax Qualitas. Hinweis zum Projekt: Das Projekt ist erst seit August veröffentlicht, und nicht groß in die Welt getragen. Der Name ist eigentlich der interne Projektname, einen externen Projektnamen hat das Projekt nie (noch nicht?) erhalten. Ernsthafte Vorschläge werden gern angehört.