Code Monger, OpenSource, Software, Techblog

Rozproszone systemy kontroli kodu

12 07, 2007 o 21:55:35 Dodaj komentarz Poziom: 0 Permalink

Od jakiegoś czasu poszukuję systemu kontroli kodu na własne potrzeby. Domyślnie używałem Subversion po pewnym czasie przesiadłem się jednak na Bazaar. Obecnie używam bzr(Bazaar) do przechowywania i wersjonowania zmian w /etc.

Ale przecież jest tyle innych systemów kontroli kodu...

Subversion

Z Subversion jest jeden problem: rozgałęzianie (ang. branching) jest po prostu major PITA. Łącząc (ang. merge) kod wielokrotnie między gałęziami trzeba zawsze zapisywać co już zostało złączone i w jaki sposób, bo nie wybrnie się z konfliktów.

Oczywiście w swoich projektach jeśli chcę wypróbować jakąś funkcjonalność mogę zawsze wziąć świeżą kopię z repo, poeksperymentować i scalić zmiany ręcznie. PITA.

Drugi ważny minus Subversion to niemożność samodzielnego hostowania. Pod tym pojęciem rozumiem to, że mając dowolny hosting nie dam rady na nim postawić repo dostępnego zdalnie; żaden usługodawca nie pozwoli mi postawić repo, uruchomić zdalnego serwera (protokół svn://) ani podpiąć się pod Apache (protokoły http:// i DAV).

Jest łatwiej, jeśli ma się konto shellowe na serwerze. Można wtedy skorzystać z dostępu svn+ssh:// do repozytorium (dzięki Dozzie i Mysz za sprostowanie!)

Bazaar

Za główne atuty Bazaara uważam jego przenoszalność (Bazaar napisany jest w Pythonie) oraz możliwość umieszczenia repozytorium na zdalnym hostingu.

Jego największą wadą jest to, że jest napisany w Pythonie :) Żeby go używać konieczne jest zainstalowanie Pythona – a to nie zawsze rozwiązanie, choć przyznaję, że to najmniejszy problem (bo nie jest problemem na dowolnym kompie zainstalować interpreter; nikt się nie pogniewa). Znacznie ważniejszy problem to prędkość: zanim Bazaar się rozpędzi mija nieco czasu; podobnie przy większych operacjach typu diff, czy merge. Z wersji na wersję jest coraz szybciej ale…

Mercurial

To kolejny system, który chcę wypróbować w praktyce. Jedyny problem jaki znalazłem na razie to fakt, że Mercurial nie umie wypchnąć zmian do zdalnego repozytorium przez protokół FTP (co umie Bazaar).

Choć jest napisany w Pythonie to jest szybszy (sporo!) od Bazaara.

Niewątpliwym plusem dla Mercuriala jest fakt, że sam Linus Torvalds wymienia go jednym tchem obok GITa.

Niedawno Automaciej przedstawiał problem z pamiętaniem i scalaniem zmian nazw katalogów podczas jednoczesnej pracy wielu osób na tym samym kodzie. Z przyjemnością stwierdzam, że Mercurial ów test przechodzi i prawidłowo scala zmiany.

Git

Git ma jedną, ogromną dla mnie, wadę: nie działa na Windows. To znaczy działa, ale tylko w środowisku Cygwina. Ponadto mocno wykorzystuje POSIX -owe operacje na plikach, co niekoniecznie dobrze odbija się na wydajności w Windows.

Poza tą wadą, z testów na sieci wynika, że faktycznie jest obecnie najszybszym DSCM.

Git nie przeszedł testu Automacieja. Jednak jak mówi sam Torvalds: Git śledzi repozytorium na poziomie treści, a nie systemu plików (cokolwiek to oznacza).

Podsumowując: będę czekał na to co stanie się z Bazaarem, na chwilę obecną zastosuję Mercuriala, a w przyszłości spróbuję Gita (bo jest kompilowany i tym samym ma najmniej zależności) gdy tylko pojawi się jakiś fajny fork dla Windows.

Otagowano: , , , , , , , , ,

Komentarze do wpisu

Możesz śledzić odpowiedzi poprzez kanał RSS. Możesz dodać komentarz lub zostawić ślad (trackback) ze swojego bloga.

#

Stanisław 'dozzie' Klekot

> Jednak jak mówi sam Torvalds: Git śledzi repozytorium na poziomie treści, a nie systemu plików (cokolwiek to oznacza).

Oznacza to mniej więcej tyle, że zapamiętywane są całe pliki, a nie tylko różnice między kolejnymi wersjami. A że pliki są zapisywane pod adresami opartymi o skrót SHA-1, to dwa identyczne pliki zajmują w repo tylko połowę z łącznego rozmiaru. Przydaje się to przy repozytoriach z dużymi plikami, np. repozytoriach pakietów binarnych. Extended Slackware dostało takie właśnie repozytorium. W branchach są trzymane całe snapshoty z danego dnia.

Git ma jedną podstawową zaletę: można go bezkarnie używać do umobilnienia kopii roboczej Subversion. Robisz checkout, piszesz, piszesz i commitujesz do gita, a na koniec wprowadzasz zmiany do Subversion.

2007 07 12, 23:05:08

#

Dentharg

Ale to oznacza, że rozmiar repo jest większy niż w systemach gdzie przechowuje się delty/diffy, tak?

2007 07 12, 23:07:06

#

Stanisław 'dozzie' Klekot

Wbrew pozorom nie. Kopia robocza X-serwera X.Org zajmuje 62MB, z czego 25MB to repozytorium git, a najstarszy zapamiętany commit pochodzi z 1999 roku.

2007 07 13, 00:25:59

#

Smox

A Mercurial jest taki szybki bo najważniejsze rzeczy ma napisane C :)
Bazaar to bardzo fajny system i naprawdę prężnie się rozwija!

2007 07 13, 00:28:51

#

MySZ

Co do SVN, to o ile dobrze pamiętam, można go sobie zainstalować na koncie gdzie dają shella, i łączyć się i commitować po ssh. Oczywiście lepiej nie dawać dostępu osobom postronnym do takiego repo, ale to samo chyba dotyczy łączenia się po ftp ;)

2007 07 13, 08:57:53

#

Dentharg

Niestety tak się nie do końca da. Po SSH i owszem, ale to musi być protokół svn+ssh:// – zatem serwer SVNowy musi stać.

2007 07 13, 08:58:51

#

Stanisław 'dozzie' Klekot

Bzdura, nie musi stać. Wystarczy że svnserve będzie można uruchomić na zdalnym shellu.

2007 07 13, 09:12:09

#

Dentharg

Ale czy to nie oznacza postawienia serwera i otwarcia zdalnego portu? No i wymaga dostępu do shella ;)

2007 07 13, 09:13:20

#

MySZ

Postawienie serwera SSH – tak ;)
A co do shella to pisałem :)

2007 07 13, 09:25:06

#

Dentharg

Racja :)
Chodziło mi bardziej o to, że dla dozzie’go uruchomienie svnserve nie oznacza postawienia serwera svn..

2007 07 13, 09:27:18

#

MySZ

Polecam: http://svnbook.red-bean.com/en/1.2/svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.sshauth

2007 07 13, 09:29:28

#

Dentharg

O. Faktycznie. No to zwracam dozziemu honor :) Najważniejsze zdanie to chyba

The important thing to understand here is that the Subversion client is not connecting to a running svnserve daemon
Zawsze mi się wydawało, że to wymaga postawienia serwera. Sam używałem tylko dostępu svn:// (w firmie też go stosujemy) i nie zagłębiałem się w materię svn+ssh://. Dzięki za sprostowanie!

2007 07 13, 09:31:24

#

Automaciej

Napisałem tutorial o tym jak można używać Git i Bazaar z Subversion. Jeżeli miałbyś jakieś uwagi, byłbym wdzięczny! :-)

2007 07 14, 13:31:50

Dodaj komentarz

Textile Lite włączony ( szczegółowy opis znaczników ):