Co ludzie tutaj postrzegają jako względne mocne i słabe strony Git, Mercurial i Bazaar?
Moim zdaniem mocną stroną Gita jest przejrzysta konstrukcja i bardzo bogaty zestaw funkcji. Uważam również, że jest to najlepsze wsparcie dla repozytoriów wielooddziałowych i zarządzania przepływami pracy z wieloma gałęziami. Jest bardzo szybki i ma mały rozmiar repozytorium.
Ma kilka przydatnych funkcji, ale przyzwyczajenie się do nich wymaga trochę wysiłku. Obejmują one widoczny pośredni ara (indeks) między obszarem roboczym a bazą danych repozytorium, co pozwala na lepszą rozdzielczość scalania w bardziej skomplikowanych przypadkach, inkrementalne comitting i comitting z brudnym drzewem; wykrywanie zmian nazw i kopii przy użyciu heurystyki podobieństwa zamiast śledzenia ich za pomocą jakiegoś rodzaju identyfikatorów plików, co działa dobrze i które pozwalają na obwinianie (dodawanie adnotacji), które może śledzić ruch kodu w plikach, a nie tylko hurtowe zmiany nazw.
Jedną z jego wad jest to, że obsługa MS Windows pozostaje w tyle i nie jest pełna. Inną dostrzeganą wadą jest to, że nie jest tak dobrze udokumentowany jak na przykład Mercurial i jest mniej przyjazny dla użytkownika niż konkurencja, ale się zmienia.
Moim zdaniem siła Mercuriala polega na jego dobrej wydajności i niewielkim rozmiarze repozytorium, w dobrym wsparciu dla MS Windows.
Główną wadą jest moim zdaniem fakt, że lokalne oddziały (wiele oddziałów w jednym repozytorium) są nadal obywatelami drugiej kategorii iw dziwny i skomplikowany sposób implementują tagi. Również sposób, w jaki radzi sobie ze zmianą nazw plików, był nieoptymalny (ale ta zmiana się zmieniła). Mercurial nie obsługuje połączeń ośmiornic (z więcej niż dwoma rodzicami).
Z tego, co słyszałem i czytałem, główne zalety Bazaar to łatwe wsparcie dla scentralizowanego przepływu pracy (co jest również wadą, ze scentralizowanymi koncepcjami widocznymi tam, gdzie nie powinno), śledzenie zmian nazw zarówno plików, jak i katalogów.
Jego główną wadą jest wydajność i rozmiar repozytorium dla dużych repozytoriów z długą nieliniową historią (wydajność poprawiła się przynajmniej dla niezbyt dużych repozytoriów), fakt, że domyślnym paradygmatem jest jedno ranczo na repozytorium (można jednak ustawić udostępnianie danych) i scentralizowane koncepcje (ale to także z tego, co słyszałem).
Git jest napisany w C, skryptach powłoki i Perlu, i można go używać skryptów; Mercurial jest napisany w C (rdzeń, dla wydajności) i Pythonie i zapewnia API dla rozszerzeń; Bazaar jest napisany w Pythonie i zapewnia API dla rozszerzeń.
Jakie kwestie należy wziąć pod uwagę, rozważając każdy z nich ze sobą i porównując je z systemami kontroli wersji, takimi jak SVN i Perforce?
Systemy kontroli wersji, takie jak Subversion (SVN), Perforce czy ClearCase, to scentralizowane systemy kontroli wersji. Git, Mercurial, Bazaar (a także Darcs, Monotone i BitKeeper) to rozproszone systemy kontroli wersji. Rozproszone systemy kontroli wersji pozwalają na znacznie szerszy zakres przepływów pracy. Pozwalają na użycie opcji „opublikuj gdy gotowe”. Mają lepszą obsługę rozgałęziania i scalania oraz przepływów pracy z wieloma gałęziami. Nie musisz ufać ludziom, którzy mają dostęp do zobowiązań, aby móc w łatwy sposób uzyskać od nich wkład.
Jakie czynniki wziąłbyś pod uwagę podczas planowania migracji z SVN do jednego z tych rozproszonych systemów kontroli wersji?
Jednym z czynników, które warto rozważyć, jest wsparcie dla inetract z SVN; Git ma git-svn, Bazaar ma bzr-svn, a Mercurial ma rozszerzenie hgsubversion.
Zastrzeżenie: Jestem użytkownikiem Git i drobnym współpracownikiem i oglądam (i uczestniczę) na liście mailingowej git. Znam Mercurial i Bazaar tylko z ich dokumentacji, rozmaitych dyskusji na IRC i list mailingowych oraz postów na blogach i artykułów porównujących różne systemy kontroli wersji (z których niektóre są wymienione na stronie GitComparison na Git Wiki).