<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: Tag bazaar</title>
    <link>http://blog.zabiello.com/articles/tag/bazaar</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Git, Bazaar, Mercurial - Subversion pod obstrza&#322;em</title>
      <description>&lt;p&gt;&#346;wiat technologii IT zmienia si&#281; coraz szybciej. Nie min&#281;&#322;o wiele lat od dosy&#263; masowego przechodzenia &lt;a href="http://pl.wikipedia.org/wiki/CVS"&gt;&lt;span class="caps"&gt;CVS&lt;/span&gt;&lt;/a&gt; do &lt;a href="http://pl.wikipedia.org/wiki/Subversion"&gt;Subversion&lt;/a&gt; a ju&#380; zanosi si&#281; na kolejn&#261; rewolucj&#281;. Tak jak wcze&#347;niej atakowany by&#322; &lt;span class="caps"&gt;CVS&lt;/span&gt;, teraz atakowany jest Subversion. Atakowany jest przez &lt;strong&gt;rozproszone&lt;/strong&gt; systemy kontroli wersji.&lt;/p&gt;


	&lt;h2&gt;Czym jest system rozproszony (distributed)?&lt;/h2&gt;


	&lt;p&gt;&lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; jest przyk&#322;adem &lt;strong&gt;centralnego&lt;/strong&gt; systemu wersjonowania. Zawsze mamy do czynienia z centralnym repozytorium kodu. Jakakolwiek pr&#243;ba &#347;ci&#261;gni&#281;cia nowszych wersji plik&#243;w wymaga posiadania po&#322;&#261;czenia z serwerem zawieraj&#261;cym interesuj&#261;ce nas repozytorum. Jakakolwiek aktualizacja zmian w repozytorum wymaga znowu po&#322;&#261;czenia si&#281; z centralnym repozytorium. Systemy rozproszone dzia&#322;aj&#261; zupe&#322;nie inaczej.&lt;/p&gt;


	&lt;p&gt;Po pierwsze, nie posiadaj&#261; &#380;adnego centralnego repozytorium. &#346;ci&#261;gni&#281;cie projektu polega na &lt;strong&gt;sklonowaniu&lt;/strong&gt; danego repozytorium na dysku lokalnym. Wszelkie lokalnie dokonywane zmiany nale&#380;y dodawa&#263; do swojego, lokalnego repozytorium. Nie jest potrzebne posiadanie aktywnego po&#322;&#261;czenia z internetem. Co w wypadku, kiedy pierwotne repozytorium si&#281; zmieni&#322;o i chcemy zaktualizowa&#263; swoje? Nic trudnego.&lt;/p&gt;


	&lt;p&gt;Drug&#261;, pot&#281;&#380;n&#261; r&#243;&#380;nic&#261; w stosunku do Subversion jest &#322;atwo&#347;&#263; z jak&#261; w systemie rozproszonym scala si&#281; dowolne odga&#322;&#281;zienia (branches) kodu. Subversion jest bardzo tu kiepskie. System rozproszony pozwala zatem posiada&#263; najnowsz&#261; wersj&#281; kodu oryginalnego w&#322;&#261;cznie z naszymi poprawkami. Je&#347;li chcemy wys&#322;a&#263; nasze zmiany do autora projektu, mo&#380;na to tak&#380;e uczyni&#263;. Je&#347;li autor uzna, &#380;e nasze zmiany s&#261; warto&#347;ciowe i godne tego aby je do&#322;&#261;czy&#263;, stosuje podobny mechanizm scalania odga&#322;&#281;zie&#324;.&lt;/p&gt;


	&lt;p&gt;Trzeci&#261; istotn&#261; r&#243;&#380;nic&#261; jest brak za&#347;miecania projektu dziesi&#261;tkami folder&#243;w o nazwie &lt;code&gt;.svn&lt;/code&gt; (W Subversion ka&#380;dy wewn&#281;trzny folder, aby podlega&#322; wersjonowaniu, musi posiada&#263; w &#347;rodku taki dodatkowy folder). Systemy rozproszone zwykle tworz&#261; jeden, jedyny folder w g&#322;&#243;wnym katalogu i nie wymagaj&#261; aby wszystkie wewn&#281;trzne foldery posiada&#322;y go r&#243;wnie&#380;.&lt;/p&gt;


	&lt;p&gt;W praktyce, porz&#261;dnie prowadzone projekty u&#380;ywaj&#261;ce Subversion stosuj&#261; jakie&#347; formalne regu&#322;y dodawania zmian w kodzie. Np. zabrania si&#281; &amp;#8220;commitowania&amp;#8221; kodu, kt&#243;ry nie przeszed&#322; pozytywnie wszystkich test&#243;w jednostkowych. Problem w tym, &#380;e od chwili zgrania sobie &#378;r&#243;de&#322; na dysk, tracimy wszelk&#261; mo&#380;liwo&#347;&#263; wersjonowania naszych ma&#322;ych, lokalnych zmian (kt&#243;re niekoniecznie musz&#261; by&#263; pozbawione b&#322;&#281;d&#243;w). Czasami chcemy si&#281; cofn&#261;&#263; do jakiej&#347; wcze&#347;niejszej zmiany i nie mo&#380;emy. Subversion wersjonuje tylko kod w centralnym repozytorium. System rozproszony pozwala za&#347; na takie &#347;ledzenie lokalnych zmian i to nawet w spos&#243;b niezale&#380;ny od &#347;ci&#261;gni&#281;tego kodu z repozytorium Subversion. Niezale&#380;ny, bo mo&#380;na troch&#281; &amp;#8220;oszukiwa&#263;&amp;#8221; system u&#380;ywany w pracy. :) Po &#347;ci&#261;gni&#281;ciu kodu z &lt;span class="caps"&gt;SVN&lt;/span&gt;, mo&#380;na doda&#263; sobie lokalnie system rozproszony i kontrolowa&#263; swoj&#261; histori&#281; lokalnych zmian w spos&#243;b nieinwazyjny dla Subversion.&lt;/p&gt;


	&lt;h2&gt;Git, Mercurial i Bazaar&lt;/h2&gt;


	&lt;p&gt;Aktualnie, najbardziej licz&#261;ce si&#281; systemy rozproszone to &lt;a href="http://git.or.cz/"&gt;Git&lt;/a&gt;, &lt;a href="http://www.selenic.com/mercurial/wiki/"&gt;Mercurial&lt;/a&gt; i &lt;a href="http://bazaar-vcs.org/"&gt;Bazaar&lt;/a&gt;.&lt;/p&gt;


	&lt;h3&gt;Git&lt;/h3&gt;


	&lt;p&gt;Pierwotnie stworzony przez Linusa Torvaldsa do zarz&#261;dzania kodem j&#261;dra systemu Linux, &lt;a href="http://git.or.cz/"&gt;Git&lt;/a&gt; zaczyna dosy&#263; przebojowo zdobywa&#263; popularno&#347;&#263;. Pomijaj&#261;c oczywist&#261; wy&#380;szo&#347;&#263; systemu rozproszonego nad system centralnego repozytorium, trzeba podkre&#347;li&#263;, &#380;e Git bardzo szybki. Niezr&#243;wnanie szybszy od Subversion, szybszy te&#380; od Mercurial i Bazaar. Coraz wi&#281;cej projekt&#243;w zaczyna przechodzi na Git&amp;#8217;a (np. konkurent &lt;a href="http://rubyonrails.pl"&gt;Rails&#243;w&lt;/a&gt; &amp;#8211; &lt;a href="http://merbivore.com/"&gt;Merb&lt;/a&gt; trzyma &#378;r&#243;d&#322;a repozytorium Git&amp;#8217;a, zobacz te&#380; &amp;#8220;Contributing to Merb&amp;#8221; &amp;#8211; &lt;a href="http://gweezlebur.com/2008/2/1/so-you-want-to-contribute-to-merb-core-part-1"&gt;Part 1&lt;/a&gt; i &lt;a href="http://gweezlebur.com/2008/2/9/contributing-to-merb-part-2"&gt;Part 2&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;Tak&#380;e (napisany w Ruby) system do aktualizacji projekt&#243;w na serwerze (deploying) &amp;#8211; &lt;a href="http://www.capify.org/"&gt;Capistrano&lt;/a&gt; &amp;#8211; posiada &lt;a href="http://github.com/guides/deploying-with-capistrano"&gt;wsparcie dla Git&amp;#8217;a&lt;/a&gt;.  Du&#380;a rol&#281; w popularyzacji Git&amp;#8217;a czyni&#261; serwisy takie jak &lt;a href="https://github.com/"&gt;github.com&lt;/a&gt; czy &lt;a href="http://gitorious.org"&gt;gitorious.org&lt;/a&gt; gdzie mo&#380;na za&#322;o&#380;y&#263; darmowe konto dla swoich projekt&#243;w. A do &#347;ledzenia b&#322;&#281;d&#243;w i zg&#322;aszania poprawek kodu trzymanego w githubie mo&#380;na u&#380;y&#263; serwisu &lt;a href="http://lighthouseapp.com"&gt;http://lighthouseapp.com&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://railscasts.com"&gt;Railscasts.com&lt;/a&gt; znany serwis ze dziesi&#261;tkami darmowych film&#243;w edykacyjnych dla Rails&#243;w, doda&#322; niedawno &lt;a href="http://railscasts.com/episodes/96"&gt;screencast opisuj&#261;cy integracj&#281; Git&amp;#8217;a z Rails&lt;/a&gt;. Troch&#281; d&#322;u&#380;szy film na ten temat jest dost&#281;pny te&#380;&#160;w serwisie &lt;a href="https://peepcode.com/products/git"&gt;peepcode.com&lt;/a&gt;. Zobacz tak&#380;e poni&#380;sz&#261; prezentacj&#281; Linusa Torvarldsa n/t &lt;span class="caps"&gt;GIT&lt;/span&gt;&amp;#8217;a. Linus nie przebiera w s&#322;owach krytyki wobec Subversion, nazywaj&#261;c go po prostu g&#322;upim pomys&#322;em. Subversion to tylko poprawiony, stary &lt;span class="caps"&gt;CVS&lt;/span&gt;. Nie wnosi jednak nic specjalnie nowego i jego koniec jest bliski. ;)&lt;/p&gt;


&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4XpnKHJAok8&amp;#38;hl=en"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4XpnKHJAok8&amp;#38;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;

	&lt;h3&gt;Mercurial&lt;/h3&gt;


	&lt;p&gt;&lt;a href="http://www.selenic.com/mercurial"&gt;Mercurial&lt;/a&gt;, to system rozproszony napisany w Pythonie. Z definicji jest wi&#281;c multiplatformowy (bie&#380;&#261;ca implementacja Git&amp;#8217;a dla win32 jest dosy&#263; s&#322;aba). Zasadniczo niewiele si&#281; r&#243;&#380;ni od Git&amp;#8217;a. Jest troch&#281; wolniejszy, nie ma (przynajmniej ja nie znam) jakich&#347; popularnych darmowych kont do trzymania projekt&#243;w. Ale jego zalet&#261; jest wspomniana wy&#380;ej multiplatformowo&#347;&#263; (dzia&#322;a na win32 bardzo dobrze) oraz integracja z edytorem Netbeans 6 (jeszcze trwaj&#261; prace nad integracj&#261; z Git&amp;#8217;em). Firma Sun wybra&#322;a te&#380; Mercurial jako nast&#281;pc&#281; dla Subversion. S&#261; te&#380; mniejsze firmy kt&#243;re zdecydowa&#322;y si&#281; na Mercurial z powodu lepszej integracji z systemem Windows, ale s&#261; gotowe przej&#347;&#263; na szybszego Git&amp;#8217;a jak tylko zostanie poprawiona jego wersja dla win32.&lt;/p&gt;


	&lt;h3&gt;Bazaar&lt;/h3&gt;


	&lt;p&gt;&lt;a href="http://bazaar-vcs.org/"&gt;Bazaar&lt;/a&gt;, podobnie jak Mercurial, napisany zosta&#322; w Pythonie. Nie ma wi&#281;c problem&#243;w z dzia&#322;aniem pod systemem innym ni&#380; &lt;span class="caps"&gt;POSIX&lt;/span&gt;. Jest to dosy&#263; ciekawy system, bo potrafi pracowa&#263; zar&#243;wno jako system centralny jak i rozproszony. Jego tw&#243;rcy s&#261; mocno przekonani o wy&#380;szo&#347;ci Bazaar nad Git, Mercurial i Subversion, o czym &#347;wiadczy zamieszczone przez nich &#347;mia&#322;e &lt;a href="http://bazaar-vcs.org/BzrWhy"&gt;por&#243;wnanie z tymi systemami&lt;/a&gt;. (Niekt&#243;re stare por&#243;wnania Git&amp;#8217;a z Bazaar podkre&#347;la&#322;y znaczn&#261; przewag&#281; szybko&#347;ci Git&amp;#8217;a, ale niestety najcz&#281;&#347;ciej dotyczy&#322;y one starej, wolniejsze wersji Bazaar. Od wersji 1.0 poprawiono jednak znacznie wydajno&#347;&#263; i ten argument troch&#281;&#160;st&#281;pi&#322; swoje ostrze krytyki).&lt;/p&gt;


	&lt;p&gt;Bazaar posiada, podobnie jak Git, serwer z darmowymi kontami na projekty &amp;#8211; &lt;a href="http://doc.bazaar-vcs.org/latest/en/tutorials/using_bazaar_with_launchpad.html"&gt;launchpad&lt;/a&gt;. To mo&#380;e pom&#243;c spopularyzowa&#263; ten system. Bazaar ma dost&#281;pny wygodny &lt;a href="http://bazaar-vcs.org/BzrEclipse"&gt;plugin do Eclipse&lt;/a&gt;. Co do Netbeans 6, s&#261; jakie&#347; plany, ale &lt;a href="https://lists.ubuntu.com/archives/bazaar/2007q4/033568.html"&gt;na razie nie wiadomo&lt;/a&gt; czy i kiedy dodadz&#261; wsparcie.&lt;/p&gt;


	&lt;h3&gt;Updates&lt;/h3&gt;


	&lt;p&gt;&lt;em&gt;2008-03-23&lt;/em&gt;&lt;/p&gt;


U&#380;ytkownicy &lt;span class="caps"&gt;OSX 10&lt;/span&gt;.5.2 (Leoparda) instaluj&#261; Gita za pomoc&#261; MacPort&#243;w (warto doda&#263; wariant +svn aby mie&#263; dost&#281;p do skrypty git-svn; warianty dost&#281;pne dla Git&amp;#8217;a sprawdza si&#281; za pomoc&#261; komendy &lt;code&gt;port variants git&lt;/code&gt;, a od&#347;wie&#380;enie listy port&#243;w: &lt;code&gt;sudo port -d sync&lt;/code&gt;).
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_bash "&gt;sudo port install git-core +svn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Je&#347;li instalacja wywali si&#281; z powodu problem&#243;w z SQlite3, nale&#380;y doinstalowa&#263; gmake, czyli:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_bash "&gt;sudo su
port install gmake
port clean sqlite3
port install sqlite3
port install git-core +svn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 19 Mar 2008 12:00:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:52c31377-58b0-4ab0-8c7b-da934a08c64d</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2008/03/19/distributed-vcs</link>
      <category>git</category>
      <category>mercurial</category>
      <category>bazaar</category>
      <category>python</category>
      <category>subversion</category>
      <category>vcs</category>
    </item>
  </channel>
</rss>
