<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marioosh&#039;s developer diary &#187; GIT</title>
	<atom:link href="http://marioosh.5dots.pl/tag/git/feed/" rel="self" type="application/rss+xml" />
	<link>http://marioosh.5dots.pl</link>
	<description>or something like this</description>
	<lastBuildDate>Mon, 06 Sep 2010 16:23:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Logi gita i kolorowe głowice</title>
		<link>http://marioosh.5dots.pl/2010/07/logi-gita-i-kolorowe-glowice/</link>
		<comments>http://marioosh.5dots.pl/2010/07/logi-gita-i-kolorowe-glowice/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 08:35:20 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Tips&Tricks]]></category>
		<category><![CDATA[GIT]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=478</guid>
		<description><![CDATA[Pracując z Systemem Kontroli Wersji GIT, wyświetlając logi możemy użyć opcji --decorate aby przy każdym commicie była wyświetlana informacja o głowicy (szczyt gałęzi).
W najnowszej wersji GIT&#8217;a poprawiono wyświetlanie i teraz gałęzie są w różnych kolorach. Mocno to polepsza czytelność logów. 
Podobne wpisy:15.03.2010 -- Zdalne, współdzielone repozytorium GIT.11.12.2009 -- Objęcie kontrolą wersji Git nowej aplikacji Rails20.08.2009 [...]]]></description>
			<content:encoded><![CDATA[<p>Pracując z Systemem Kontroli Wersji GIT, wyświetlając logi możemy użyć opcji <code>--decorate</code> aby przy każdym commicie była wyświetlana informacja o głowicy (szczyt gałęzi).<br />
W najnowszej wersji GIT&#8217;a poprawiono wyświetlanie i teraz gałęzie są w różnych kolorach. Mocno to polepsza czytelność logów. </p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F07%2Flogi-gita-i-kolorowe-glowice%2F&amp;linkname=Logi%20gita%20i%20kolorowe%20g%C5%82owice" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>15.03.2010 -- <a href="http://marioosh.5dots.pl/2010/03/zdalne-wspoldzielone-repozytorium-git/" title="Zdalne, współdzielone repozytorium GIT.">Zdalne, współdzielone repozytorium GIT.</a></li><li>11.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/" title="Objęcie kontrolą wersji Git nowej aplikacji Rails">Objęcie kontrolą wersji Git nowej aplikacji Rails</a></li><li>20.08.2009 -- <a href="http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/" title="Praca ze zdalnym repozytorium w GIT">Praca ze zdalnym repozytorium w GIT</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2010/07/logi-gita-i-kolorowe-glowice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zdalne, współdzielone repozytorium GIT.</title>
		<link>http://marioosh.5dots.pl/2010/03/zdalne-wspoldzielone-repozytorium-git/</link>
		<comments>http://marioosh.5dots.pl/2010/03/zdalne-wspoldzielone-repozytorium-git/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 18:19:30 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[git shared repository]]></category>
		<category><![CDATA[git-shell]]></category>
		<category><![CDATA[SSH]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=397</guid>
		<description><![CDATA[Kilka miesięcy temu opisałem jak pracować ze zdalnym repozytorium Git. Został tam opisany najprostrzy sposób jak swój projekt umieścić na serwerze.
Jednak gdy chcemy ten projekt współdzielić z innymi programistami możemy napotkać kilka problemów.
Chciałbym jako uzupełnienie tamtego artykułu napisać krok po kroku jak skonfigurować zdalne repozytorium tak aby kilku programistów mogło się z nim łączyć przez [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/">Kilka miesięcy temu</a> opisałem jak pracować ze zdalnym repozytorium Git. Został tam opisany najprostrzy sposób jak swój projekt umieścić na serwerze.<br />
Jednak gdy chcemy ten projekt współdzielić z innymi programistami możemy napotkać kilka problemów.</p>
<p>Chciałbym jako uzupełnienie tamtego artykułu napisać krok po kroku jak skonfigurować zdalne repozytorium tak aby kilku programistów mogło się z nim łączyć przez ssh. <br/></p>
<p>Czynności, które musimy wykonać po stronie serwera:</p>
<ul>
<li>Wybieramy miejsce na repozytorium, np. &#8220;/opt/repos/git&#8221; i przechodzimy do niego.

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>git</pre></div></div>

</li>
<li>Tworzymy grupę systemową &#8216;git&#8217; i dodajemy do niej użytkowników, którzy mają dostęp do repozytorium</li>
<li>Zmieniamy uprawnienia plików w ten sposób, aby członkowie tej grupy mieli prawo zapisu we wszystkich podfolderach tego katalogu. Zablokować zapis dla innych.

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">chmod</span> o-w .
$ <span style="color: #c20cb9; font-weight: bold;">chgrp</span> <span style="color: #660033;">-R</span> git .
$ <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #660033;">-R</span> g+swX .</pre></div></div>

</li>
<li>Teraz jeżeli chcemy stworzyć nowe repozytorium, to tworzymy nowy katalog:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> sample.git</pre></div></div>

</li>
<li> Następnie inicjujemy współdzielone repozytorium:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git init <span style="color: #660033;">--bare</span> <span style="color: #660033;">--shared</span></pre></div></div>

</li>
</ul>
<p>To wszystko, jak współdziałać z takim repozytorium zostało opisane w <a href="http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/">tym artykule</a></p>
<p>
Jeżeli chcemy aby użytkownik, który został dodany do systemu, miał możliwość tylko korzystania z repozytorium &#8211; chcielibyśmy wyłączyć mu standardowe logowanie to musimy zmienić mu w ustawieniach powłokę z &#8216;/bin/login&#8217;,na &#8216;/usr/bin/git-shell&#8217; . Taka powłoka pozwoli łączyć się tylko i wyłącznie z repozytorium gita. Próbla zalogowania się do systemu spowoduje wyświetlenie komunikatu:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #ff0000;">&quot; fatal: What do you think I am? A shell?&quot;</span></pre></div></div>

<p> <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Udanego gitowania.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2010%2F03%2Fzdalne-wspoldzielone-repozytorium-git%2F&amp;linkname=Zdalne%2C%20wsp%C3%B3%C5%82dzielone%20repozytorium%20GIT." title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>30.07.2010 -- <a href="http://marioosh.5dots.pl/2010/07/logi-gita-i-kolorowe-glowice/" title="Logi gita i kolorowe głowice">Logi gita i kolorowe głowice</a></li><li>11.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/" title="Objęcie kontrolą wersji Git nowej aplikacji Rails">Objęcie kontrolą wersji Git nowej aplikacji Rails</a></li><li>20.08.2009 -- <a href="http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/" title="Praca ze zdalnym repozytorium w GIT">Praca ze zdalnym repozytorium w GIT</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2010/03/zdalne-wspoldzielone-repozytorium-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objęcie kontrolą wersji Git nowej aplikacji Rails</title>
		<link>http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/</link>
		<comments>http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 11:22:05 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=372</guid>
		<description><![CDATA[Za każdym razem, gdy rozpoczynam pracę z projektem, muszę skonfigurować Git, aby repozytorium nie zawierało zbędnych plików.
Cała operacja jest wykonywana w kilku krokach, gdzie pierwszym z nich będzie stworzenie nowej aplikacji rails na naszym komputerze. Następnie musimy zaiinicjować kontrolę wersji.

$ rails my_app
$ cd my_app
$ git init
$ git status
...
# Untracked files:
#   (use "git add [...]]]></description>
			<content:encoded><![CDATA[<p>Za każdym razem, gdy rozpoczynam pracę z projektem, muszę skonfigurować Git, aby repozytorium nie zawierało zbędnych plików.<br />
Cała operacja jest wykonywana w kilku krokach, gdzie pierwszym z nich będzie stworzenie nowej aplikacji rails na naszym komputerze. Następnie musimy zaiinicjować kontrolę wersji.</p>
<p><code lang="bash"><br />
$ rails my_app<br />
$ cd my_app<br />
$ git init<br />
$ git status<br />
...<br />
# Untracked files:<br />
#   (use "git add <file>..." to include in what will be committed)<br />
#<br />
#       README<br />
#       Rakefile<br />
#       app/<br />
#       config/<br />
#       db/<br />
#       doc/<br />
#       log/<br />
#       public/<br />
#       script/<br />
#       test/<br />
</code><span id="more-372"></span></p>
<p>Wydanie komendy <code>git statu</code>s pokazało nam całą strukturę aplikacji, która nie jest objęta kontrolą wersji. Zanim dodamy, powinniśmy wyłączyć kilka plików. Po pierwsze w repozytorium nie potrzebujemy plików dzienników („logów”), które znajdują się w folderze log. Aby je wyłączyć musimy stworzyć plik <code>.gitignore</code> i dodać linijkę <code>log/*.log</code>.<br />
<code lang="bash"><br />
$ echo „log/*.log” >>.gitignore </code>
<p>
Ponowne sprawdznie statusu pozwoli nam zauważyć zmianę, która zaszła w repozytorium.</p>
<p><code lang="bash"><br />
$ git status<br />
…<br />
# Untracked files:<br />
#   (use "git add <file>..." to include in what will be committed)<br />
#<br />
#       .gitignore<br />
#       README<br />
#       Rakefile<br />
#       app/<br />
#       config/<br />
#       db/<br />
#       doc/<br />
#       public/<br />
#       script/<br />
#       test/<br />
nothing added to commit but untracked files present (use "git add" to track)</code>
<p>
Folder log zniknął z listy plików do dodania. Problem polega na tym, że klonująć potem repozytorium, otrzymamy jest bez tego folderu. Gdy uruchomimy aplikację, będą problemy z jej działaniem, ponieważ w tym folderze logi muszą być zapisywane.<br />
Naszym zadaniem zatem jest ustawienie repozytorium tak, aby sam folder znajdował się w nim, a ignorowana powinna być jedynie jego zawartość. Cała powyższa sytuacja dzieję się tak dlatego, że system Git nie śledzi pustych folderów. Wyjściem z tej sytuacji jest trick, polegającym na dodaniu pliku <code>.gitignore</code> w folderze <code>log</code>. Folder nie będzie pusty, a jednocześnie dodany plik, nie będzie miał wpływu na nasz projekt.</p>
<p><code lang="bash"><br />
$ touch log/.gitignore<br />
$ git status<br />
…<br />
# Untracked files:<br />
#   (use "git add <file>..." to include in what will be committed)<br />
#<br />
#       .gitignore<br />
#       README<br />
#       Rakefile<br />
#       app/<br />
#       config/<br />
#       db/<br />
#       doc/<br />
#       log/<br />
#       public/<br />
#       script/<br />
#       test/<br />
nothing added to commit but untracked files present (use "git add" to track)</code>
<p>
Na powyższym listingu widać, że osiągnęliśmy zamierzony efekt. Podobny problem występuje w folderze tmp, którego zawartość również powinna być ignorowana, nie ignorując samgo folderu. Nauczeni powyższym doświadczeniem dodajemy plik .gitignore w tym katalogu, a w <code>.gitignore</code> znajdującym się w głównym folderze aplikacji dopisujemy <code>tmp/**/*</code>. Co oznacza ignorowanie wszystkich plików nawet w podfolderach.<br />
Warto również zignorować dwa foldery z dokumentacją, które niepotrzebnie zajmują miejsce w repozytorium. Po dopisaniu dwóch linijek w głównym pliku <code>.gitignore</code>, powinien on zawierać taką treść:<br />
<code lang="bash"><br />
log/*.log<br />
tmp/**/*<br />
doc/api<br />
doc/app</code><br />
Teraz możemy dodać wszystkie pliki i wykonać początkowe zatwierdzenie.<br />
<code lang="bash"><br />
$ git add .<br />
$ git commit -a -m „rozpoczęcie pracy”<br />
</code></p>
<p>
W praktyce warto przenieść zewnętrzną bibliotekę rails, wewnątrz aplikacji, co pomoże w późniejszym uruchamianiu projektu na serwerze produkcyjnym. Aby to zrobić musimy wykonać komendę rake rails:freeze:gems co spowoduje przeniesienie całego frameworka, do folderu <code>vendor/rails</code>. Aplikacja przeszukuje ten folder w pierwszej kolejności i dopiero gdy go nie znajdzie, to szuka po zainstalowanych w systemie gemach.<br />
Po wykonaniu powyższej komendy wystarczy zatwierdzić kolejną zmianę.<br />
<code lang="bash"><br />
$ git add vendor<br />
$ git commit -a -m „Dodanie frameworku do fodleru vendors”</code><br />
Teraz nie pozostaje nic innego niż rozpoczęcie pracy nad projektem.
</p>
<p>W sumie nie stoi nic na przeszkodzie, aby powyższy zaimplikować w Rails Template, ale o tym jak to się robi, napiszę już niedługo.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F12%2Fobjecie-kontrola-wersji-git-nowej-aplikacji-rails%2F&amp;linkname=Obj%C4%99cie%20kontrol%C4%85%20wersji%20Git%20nowej%20aplikacji%20Rails" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>16.07.2010 -- <a href="http://marioosh.5dots.pl/2010/07/pickle-na-rails3/" title="Pickle na Rails3">Pickle na Rails3</a></li><li>05.03.2010 -- <a href="http://marioosh.5dots.pl/2010/03/rails-template/" title="Rails Template">Rails Template</a></li><li>12.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/automatyczny-start-czyli-rails-templates/" title="Automatyczny start czyli Rails Templates">Automatyczny start czyli Rails Templates</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Praca ze zdalnym repozytorium w GIT</title>
		<link>http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/</link>
		<comments>http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 22:03:19 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=346</guid>
		<description><![CDATA[Jak obiecałem w jednym z poprzednich artykułów opiszę jak wygląda praca z projektem za pośrednictwem zdalnego repozytorium.

Większość projektów nie jest prowadzona samodzielnie, jest w niego zaangażowane kilku (-nastu, -dziesięciu) innych programistów. Każdy z nich może lokalnie prowadzić własną ścieżkę, ale z doświadczenia wiem, że przydaje się jedno wspólne repozytorium. Punkt centralny dla naszej pracy.


Inicjalizacja repozytorium

Przypuśćmy, [...]]]></description>
			<content:encoded><![CDATA[<p>Jak obiecałem w <a href="http://marioosh.5dots.pl/2009/06/gitowy-system-kontroli-wersji/">jednym z poprzednich artykułów</a> opiszę jak wygląda praca z projektem za pośrednictwem zdalnego repozytorium.
<p>
Większość projektów nie jest prowadzona samodzielnie, jest w niego zaangażowane kilku (-nastu, -dziesięciu) innych programistów. Każdy z nich może lokalnie prowadzić własną ścieżkę, ale z doświadczenia wiem, że przydaje się jedno wspólne repozytorium. Punkt centralny dla naszej pracy.
</p>
<p><span id="more-346"></span></p>
<h3>Inicjalizacja repozytorium</h3>
<p>
Przypuśćmy, że posiadamy serwer w domenie <code>projekty.pl</code> i tam chcemy założyć nasze centralne repozytorium. W tym celu logujemy się na naszym serwerze:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">ssh</span> projekty.pl 
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>repos
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> gittutor.git
<span style="color: #7a0874; font-weight: bold;">cd</span> gittutor.git
git <span style="color: #660033;">--bare</span> init
<span style="color: #7a0874; font-weight: bold;">exit</span></pre></div></div>

<p>To wszystko. Wszystkie powyższe komendy za pewne są jasne, tylko jedna może nasuwać pewne niepewności:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> git <span style="color: #660033;">--bare</span> init</pre></div></div>

<p>Co daje nam atrybut &#8211;bare? Otóż w naszym zdalnym repozytorium nie potrzebujemy kopii plików projektu tylko samą informację o repozytorium. To właśnie robi atrybut &#8211;bare &#8211; tworzy strukturę plików repozytorium, do którego możemy się połączyć tylko zdalnie bez plików projketu wewnątrz.
</p>
<p>
Po wylogowaniu się z naszego serwera wracam do naszego projektu na lokalnym komputerze.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>projekty<span style="color: #000000; font-weight: bold;">/</span>gittutor</pre></div></div>

<p>który jest już pod kontrolą wersji. Wydajemy komendę:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git remote add centrala <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git</pre></div></div>

<pre>git remote add</pre>
<p> dodaje nowe zdalne repozytorium,</p>
<pre> centrala</pre>
<p> nasza nazwa tego zdalnego repozytorium,</p>
<pre> ssh://projekty.pl/repos/gittutor.git</pre>
<p> url do tego zdalnego repozytorium.</p>
<p>Sprawdźmy, czy dodano nasze zdalne repozytorium:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git remote show centrala
<span style="color: #000000; font-weight: bold;">*</span> remote centrala
  URL: <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
  HEAD branch: <span style="color: #7a0874; font-weight: bold;">&#40;</span>unknown<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

</p>
<h3>Wysyłanie plików na zdalny serwer</h3>
<p>
Do synchronizacji lokalnego repozytorium ze zdalnym wykonujemy za pomocą komend <code>git push</code> oraz <code>git pull</code>. Spóbujmy wysłać pliki do naszego zdalnego repozytorium:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git push centrala master</pre></div></div>

<p>Jako pierwszy argument podajemy nazwę zdalnego repozytorium, jako drugi lokalny branch, który ma być wysłany.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Counting objects: <span style="color: #000000;">32</span>, done.
Delta compression using up to <span style="color: #000000;">2</span> threads.
Compressing objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">22</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">22</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, done.
Writing objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">32</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">32</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">2.72</span> KiB, done.
Total <span style="color: #000000;">32</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, reused <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
To <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
 <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>new branch<span style="color: #7a0874; font-weight: bold;">&#93;</span>      master -<span style="color: #000000; font-weight: bold;">&gt;</span> master</pre></div></div>

<p>W ten sposób umieściliśmy nasz projekt w zdalnym repozytorium.
</p>
<h3>Klonowanie repozytorium</h3>
<p>
Teraz gdy nasze pliki znajdują się w zdalnym repozytorium możemy je w prosty sposób sklonować (np. dla nowego członka zespołu pracującego nad projektem).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git clone <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
&nbsp;
Initialized empty Git repository <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>projekty<span style="color: #000000; font-weight: bold;">/</span>gittutor2<span style="color: #000000; font-weight: bold;">/</span>gittutor<span style="color: #000000; font-weight: bold;">/</span>.git<span style="color: #000000; font-weight: bold;">/</span>
remote: Counting objects: <span style="color: #000000;">32</span>, done.
remote: Compressing objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">22</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">22</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, done.
remote: Total <span style="color: #000000;">32</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, reused <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
Receiving objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">32</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">32</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, done.
Resolving deltas: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">4</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, done.
&nbsp;
<span style="color: #7a0874; font-weight: bold;">cd</span> gittutor
git remote show
&nbsp;
origin</pre></div></div>

<p>&#8220;origin&#8221; jest domyślną nazwa nadawaną dla zdalnego repozytorium. Zauważmy, że po klonowaniu w naszym projekcie jest ustawione zdalne repozytorium (to z którego klonowaliśmy pliki)  &#8211; nie musimy tego robić ręcznie. </p>
<p/>
<h3>Praca ze zdalnym repozytorium</h3>
<p>
Sprawdźmy jeszcze jeden ciekawy scenariusz &#8211; jeden z programistów zakłada własny projekt od zera i synchronizuje go z naszym zdalnym repozytorium.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">mkdir</span> gittutor3
<span style="color: #7a0874; font-weight: bold;">cd</span> gittutor3
git init
git remote add origin <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;plik2&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> nowy_plik.txt
git add nowy_plik.txt
git commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Dodano nowy plik&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>master <span style="color: #7a0874; font-weight: bold;">&#40;</span>root-commit<span style="color: #7a0874; font-weight: bold;">&#41;</span> 577763f<span style="color: #7a0874; font-weight: bold;">&#93;</span> Dodano nowy plik
 <span style="color: #000000;">1</span> files changed, <span style="color: #000000;">1</span> insertions<span style="color: #7a0874; font-weight: bold;">&#40;</span>+<span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">0</span> deletions<span style="color: #7a0874; font-weight: bold;">&#40;</span>-<span style="color: #7a0874; font-weight: bold;">&#41;</span>
 create mode <span style="color: #000000;">100644</span> nowy_plik.txt</pre></div></div>

<p>Co zrobiłem? Utworzyłem nowy katalog, dodałem go do kontroli wersji (&#8217;init&#8217;) ustawiłem zdalne (dobrze nam znane <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) repozytorium. Następnie dodałem plik i skommitowałem go do lokalnego repozytorium.<br />
Teraz musimy wysłać naszego brancha na serwer. Po nazwie lokalnego musimy podać nazwę pod jaką nasz branch będzie widniał w zdalnym repozytorium (po dwukropku)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git push origin master:fajny_projekt
&nbsp;
Counting objects: <span style="color: #000000;">3</span>, done.
Writing objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">3</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">223</span> bytes, done.
Total <span style="color: #000000;">3</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, reused <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
To <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
 <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>new branch<span style="color: #7a0874; font-weight: bold;">&#93;</span>      master -<span style="color: #000000; font-weight: bold;">&gt;</span> fajny_projekt</pre></div></div>

</p>
<p>Teraz przełączmy się do folderu z którego rozpoczęliśmy pracę</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>gittutor 
<span style="color: #000000; font-weight: bold;">&gt;</span> git remote show centrala
&nbsp;
<span style="color: #000000; font-weight: bold;">*</span> remote centrala
  URL: <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
  HEAD branch: master
  Remote branches:
    fajny_projekt new <span style="color: #7a0874; font-weight: bold;">&#40;</span>next fetch will store <span style="color: #000000; font-weight: bold;">in</span> remotes<span style="color: #000000; font-weight: bold;">/</span>centrala<span style="color: #7a0874; font-weight: bold;">&#41;</span>
    master        tracked
  Local ref configured <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #ff0000;">'git push'</span>:
    master pushes to master <span style="color: #7a0874; font-weight: bold;">&#40;</span>up to <span style="color: #c20cb9; font-weight: bold;">date</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>Widać, że zdalny branch jest widoczny &#8211; jednak w jaki sposób się na niego &#8216;przełączyć&#8217;? Najpierw musimy zaktualizować nasz mirror zdalnego repozytorium:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git fetch centrala
Unpacking objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">3</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, done.
remote: Counting objects: <span style="color: #000000;">3</span>, done.
remote: Total <span style="color: #000000;">3</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, reused <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
From <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor
 <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>new branch<span style="color: #7a0874; font-weight: bold;">&#93;</span>      fajny_projekt -<span style="color: #000000; font-weight: bold;">&gt;</span> centrala<span style="color: #000000; font-weight: bold;">/</span>fajny_projekt
&nbsp;
git remote show centrala
&nbsp;
<span style="color: #000000; font-weight: bold;">*</span> remote centrala
  URL: <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
  HEAD branch: master
  Remote branches:
    fajny_projekt tracked
    master        tracked
  Local ref configured <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #ff0000;">'git push'</span>:
    master pushes to master <span style="color: #7a0874; font-weight: bold;">&#40;</span>up to <span style="color: #c20cb9; font-weight: bold;">date</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>aktualnie skopiowaliśmy zdalny fajny projekt do lokalnego repozytorium.<br />
Można go zobaczyć na liście branchy</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git branch <span style="color: #660033;">-a</span>
<span style="color: #000000; font-weight: bold;">*</span> master
  remotes<span style="color: #000000; font-weight: bold;">/</span>centrala<span style="color: #000000; font-weight: bold;">/</span>fajny_projekt
  remotes<span style="color: #000000; font-weight: bold;">/</span>centrala<span style="color: #000000; font-weight: bold;">/</span>master</pre></div></div>

<p>Jeżeli teraz chcemy dokonać zmian na tym zdalnym repozytorium musimy utworzyć lokalnego brancha, który będzie śledził (tracking) ten zdalny.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git checkout <span style="color: #660033;">--track</span> <span style="color: #660033;">-b</span> fajny_projekt centrala<span style="color: #000000; font-weight: bold;">/</span>fajny_projekt
Branch fajny_projekt <span style="color: #000000; font-weight: bold;">set</span> up to track remote branch fajny_projekt from centrala.
Switched to a new branch <span style="color: #ff0000;">'fajny_projekt'</span></pre></div></div>

<p>Utworzono lokalny branch pod nazwą &#8216;fajny_projekt&#8217; ze zdalnego &#8216;centrala/fajny_projekt&#8217; i od razu zaznaczono go jako aktywny sprawdźmy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git branch <span style="color: #660033;">-a</span> 
<span style="color: #000000; font-weight: bold;">*</span> fajny_projekt
  master
  remotes<span style="color: #000000; font-weight: bold;">/</span>centrala<span style="color: #000000; font-weight: bold;">/</span>fajny_projekt
  remotes<span style="color: #000000; font-weight: bold;">/</span>centrala<span style="color: #000000; font-weight: bold;">/</span>master
&nbsp;
<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">ls</span>
nowy_plik.txt</pre></div></div>

</p>
<p>Mam nadzieję, że wszystko jest zrozumiałe, jest późno &#8211; a o tej godzinie to czasami sam nie do końca wiem co piszę <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . W razie nieścisłości proszę o słówko w komentarzach.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fpraca-ze-zdolnym-repozytorium-w-git%2F&amp;linkname=Praca%20ze%20zdalnym%20repozytorium%20w%20GIT" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>11.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/" title="Objęcie kontrolą wersji Git nowej aplikacji Rails">Objęcie kontrolą wersji Git nowej aplikacji Rails</a></li><li>19.08.2009 -- <a href="http://marioosh.5dots.pl/2009/08/spring-jest-git/" title="Spring jest GIT">Spring jest GIT</a></li><li>17.08.2009 -- <a href="http://marioosh.5dots.pl/2009/08/git-stash/" title="GIT Stash">GIT Stash</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spring jest GIT</title>
		<link>http://marioosh.5dots.pl/2009/08/spring-jest-git/</link>
		<comments>http://marioosh.5dots.pl/2009/08/spring-jest-git/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 10:23:57 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=343</guid>
		<description><![CDATA[Zgodnie z zapowiedziami projekt DM Server prowadzony przez SpringSourcezostał zmigrowany z Subversion na GIT. Jest to już drugi projekt tej grupy, który przeniósł się na ten system kontroli wersji (pierwszy to Grails). 
Jakie są powody takiej zmiany?  Jak mówi Ben Hale zrezygnowano z scentralizowanego systemu kontroli wersji dla taniego tworzenia prywatnych gałęzi w repozytorium, [...]]]></description>
			<content:encoded><![CDATA[<p>Zgodnie z zapowiedziami projekt DM Server prowadzony przez <a href="http://www.springsource.com">SpringSource</a>został zmigrowany z Subversion na GIT. Jest to już drugi projekt tej grupy, który przeniósł się na ten system kontroli wersji (pierwszy to <a href="http://grails.org/">Grails</a>). <span id="more-343"></span><br />
Jakie są powody takiej zmiany?  Jak mówi <a href="http://blog.springsource.com/author/benh/">Ben Hale</a> zrezygnowano z scentralizowanego systemu kontroli wersji dla taniego tworzenia prywatnych gałęzi w repozytorium, które jest w GIT. Jak zauważono od czasu migracji, nikt z członków grupy pracujących nad projektem nie tęskni za svn&#8217;em &#8211; więc migracja okazała się słuszną decyzją.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fspring-jest-git%2F&amp;linkname=Spring%20jest%20GIT" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>11.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/" title="Objęcie kontrolą wersji Git nowej aplikacji Rails">Objęcie kontrolą wersji Git nowej aplikacji Rails</a></li><li>20.08.2009 -- <a href="http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/" title="Praca ze zdalnym repozytorium w GIT">Praca ze zdalnym repozytorium w GIT</a></li><li>17.08.2009 -- <a href="http://marioosh.5dots.pl/2009/08/git-stash/" title="GIT Stash">GIT Stash</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/08/spring-jest-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GIT Stash</title>
		<link>http://marioosh.5dots.pl/2009/08/git-stash/</link>
		<comments>http://marioosh.5dots.pl/2009/08/git-stash/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 21:44:00 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[IntelliJ]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=338</guid>
		<description><![CDATA[
Na codzień pracuję z IntelliJ IDEA. W tym IDE bardzo podoba mi się funkcja &#8220;szufladkowania zmian&#8221; podczas pracy z kontrolą wersji. Na codzień korzystam z Subversion i zdarza mi się z tej funkcji skorzystać. Na czym ona polega? Otóż, zdaża się, że pracujemy nad sporym kawałkiem kodu i już dość dużo zmian poczyniliśmy, gdy nagle [...]]]></description>
			<content:encoded><![CDATA[<p>
Na codzień pracuję z IntelliJ IDEA. W tym IDE bardzo podoba mi się funkcja &#8220;szufladkowania zmian&#8221; podczas pracy z kontrolą wersji. Na codzień korzystam z Subversion i zdarza mi się z tej funkcji skorzystać. Na czym ona polega? Otóż, zdaża się, że pracujemy nad sporym kawałkiem kodu i już dość dużo zmian poczyniliśmy, gdy nagle dostrzeżemy błąd w aplikacji, który chcielibyśmy zmienić, zanim skommitujemy resztę zmian. Powyższa funkcja IntelliJ IDEA pozwala nam na odłożenie dotychczasowej pracy (czyli zmian od ostatniego commita) do szufladki &#8211; po czym, możemy poprawić błąd, scommitować zmiany i następnie z szufladki &#8220;wyjąć&#8221; kod, który napisaliśmy aby kontynuować pracę.
</p>
<p>
Wielce mnie ucieszyło, gdy zobaczyłem podczas pracy z GIT, że ma on taką funkcję wbudowaną out-of-the-box. Nazywa się ona &#8216;Stash&#8217;.<br />
Wykonuje ona operację dokładnie tak jak opisałem powyżej, czyli&#8230;<br />
1. Pracując z dłuższym kawałkiem kodu, mamy już sporo zmian, gdy dostrzegamy błąd aplikacji, który natychmiastowo powinniśmy poprawić.<br />
2. Wykonujemy komendę</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git stash save <span style="color: #ff0000;">&quot;nazwa stasha&quot;</span></pre></div></div>

<p>Wykonanie tej operacji zachowa nasze dotychczasowe zmiany gdzieś na boku, a master tree przywróci do stanu HEAD.<br />
3. Możemy poprawić nasz błąd i wykonać commit</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git commit <span style="color: #660033;">-a</span> <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;bugfix #2382</span></pre></div></div>

<p>4. Przywracamy stan poprzedni, aby kontynuować pracę:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git pop</pre></div></div>

<p>co jednocześnie usunie naszą &#8220;szufladkę&#8221;, jeżeli nie chcemy usuwać aby móc do tego stanu jeszcze wrócić wykonujemy komendę :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git apply</pre></div></div>

<p>5. Kontynuujemy pracę.
</p>
<p>
Git Stash ma więcej możliwości, bo takich wirtualnych szufladek możemy tworzyć dowolną ilość i przywracać stan z każdej z nich. Możemy zatem poprogramować w stylu &#8220;co by było gdyby&#8230;&#8221; i wybrać najbardziej odpowiednią wersję napisanego kodu (dotyczy to zwłaszcza młodych programistów, którzy niejednokrotnie nie są pewni podejmowanych decyzji w programowaniu).</p>
<p>Młody czy stary programista &#8211; polecam GIT i funkcję stash.
</p>
<p>
Więcej o tej komendzie znajdziecie <a href="http://www.kernel.org/pub/software/scm/git/docs/git-stash.html">tutaj</a>.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F08%2Fgit-stash%2F&amp;linkname=GIT%20Stash" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>11.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/" title="Objęcie kontrolą wersji Git nowej aplikacji Rails">Objęcie kontrolą wersji Git nowej aplikacji Rails</a></li><li>20.08.2009 -- <a href="http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/" title="Praca ze zdalnym repozytorium w GIT">Praca ze zdalnym repozytorium w GIT</a></li><li>19.08.2009 -- <a href="http://marioosh.5dots.pl/2009/08/spring-jest-git/" title="Spring jest GIT">Spring jest GIT</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/08/git-stash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Raczkowanie z GIT</title>
		<link>http://marioosh.5dots.pl/2009/06/gitowy-system-kontroli-wersji/</link>
		<comments>http://marioosh.5dots.pl/2009/06/gitowy-system-kontroli-wersji/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 20:12:00 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/2009/06/gitowy-system-kontroli-wersji/</guid>
		<description><![CDATA[W związku z tym, że ostatnio coraz częściej korzystam z systemu kontroli wersji GIT (zamiast używanego przez kilka ostatnich lat Subversion) postanowiłem napisać kilka słów na jego temat.

Wprowadzenie
GIT jest systemem kontroli wersji, którego używał Linus Torvalds podczas pracy nad kernelem linuxa &#8211; z resztą do tej pory kernel jest kontrolowany przez GIT. Główną różnicą od [...]]]></description>
			<content:encoded><![CDATA[<p>W związku z tym, że ostatnio coraz częściej korzystam z systemu kontroli wersji <a href="http://git-scm.com">GIT</a> (zamiast używanego przez kilka ostatnich lat <a href="http://subversion.tigris.org/" target="_blank">Subversion</a>) postanowiłem napisać kilka słów na jego temat.<span id="more-276"></span></p>
<ol>
<li><strong>Wprowadzenie</strong></li>
<p style="text-align: left;">GIT jest <a href="http://pl.wikipedia.org/wiki/System_kontroli_wersji" target="_blank">systemem kontroli wersji</a>, którego używał <a href="http://pl.wikipedia.org/wiki/Linus_Torvalds">Linus Torvalds</a> podczas pracy nad kernelem linuxa &#8211; z resztą do tej pory kernel jest kontrolowany przez GIT. Główną różnicą od svn, która skłoniła mnie do korzystania z niego, jest jego decentralizacja. W Subversion niezbędne jest stworzenie jednego głównego repozytorium które kontroluje nasz projekt. Każdy klient łączy się z tym centralnym repozytorium podczas pracy nad projektem i każda zmiana musi być wysłana na serwer. GIT działa w architekturze P2P repozytorium nie musi być centralne. Może istnieć kilka równoległych, które będą potem synchronizowane. Istnieje nawet możliwość synchronizacji przez mail <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Oczywiście nic nie stoi na przeszkodzie, aby używać centralnego repozytorium, zwłaszcza podczas pracy nad dużym projektem. Niejednokrotnie jednak miałem odwrotną sytuację &#8211; pracowałem nad czymś małym, a mój edytor (vim <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) nie posiada wbudowanej obsługi kontroli wersji. Chcąc objąć projekt kontrolą nie chciało mi się tworzyć repozytorium svn &#8211; bo za dużo roboty. Więc praca którą wykonywałem była &#8216;na żywioł&#8217;. Cofnięcie wersji było równoznaczne z napisaniem kodu od nowa.</p>
<p style="text-align: left;">Od tego czasu ropocząłem korzystanie z git. Sami zobaczcie jakie to proste. Opiszę kilka podstawowych operacji potrzebnych do pracy z lokalnym repozytorium. Jeżeli mi się uda, to w późniejszym czasie opiszę sposoby pracy z repozytorium zdalnym.</p>
<li><strong>Tworzymy projekt</strong></li>
<p>Na początek coś o niezbyt skomplikowanej strukturze :</p>
<div><img class="aligncenter size-medium wp-image-281" title="git_tree" src="http://marioosh.5dots.pl/wp-content/uploads/git_tree-300x87.png" alt="git_tree" width="300" height="87" /></div>
<p>W języku &#8220;GITowym&#8221; projekt, nad którym pracujemy jest nazwany <strong>working tree</strong>.</p>
<p>Wszystko co musimy zrobić, aby objąć projekt kontrolą wersji jest użycie komendy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git init</pre></div></div>

<p>Spowoduje to utworzenie ukrytego folderu <strong>.git</strong>, w którym umieszczane są informacje o naszym projekcie.</p>
<p>W większości systemów kontroli wersji, przechowywanie informacji o plikach umiejscowia się w dwóch miejscach. Bezpośrednio w projekcie lub w centralnym repozytorium. GIT wprowadził coś nowego &#8211; warstwę pośrednią pomiędzy projektem, a repozytorium: <strong>Staging area</strong> (lub <strong>Staging Index</strong>). W indeksie tym przechowywane są informacje o całym naszym projekcie, tu kontroluje się zmiany i w przypadku, gdy jesteśmy ze zmian zadowoleni to je commitujemy do repozytorium. Daje to nam taką korzyść, że nie zaśmiecamy ani projektu, ani repozytorium zbędnymi informacjami.</p>
<li><strong>Staging index</strong></li>
<p>Aby wprowadzić plik do indexu wystarczy wydać komendę:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git add</pre></div></div>

<p>Warto zauważyć, że index przechowuje informacje o wszystkich plikach, nie tylko o plikach zmienionych.</p>
<p>Dodajemy nasz plik do projektu:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git add plik1.txt</pre></div></div>

<p>Oraz cały folder:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git add folder1</pre></div></div>

<p>Teraz wszystkie pliki, które posiadamy znajdują się w <strong>Staging area</strong>.</p>
<p><img class="aligncenter size-medium wp-image-289" title="staging index" src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-4-300x115.png" alt="staging index" width="300" height="115" /></p>
<p>W każdej chwili, możemy zobaczyć, co się zmieniło w naszym projekcie od ostatniego zatwierdzenia (commit) wydając komendę:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git status</pre></div></div>

<p>Pokazywany nam jest raport ze  zmianami w naszym working tree. Pliki mogą być wymienione w dwóch oddzielnych sekcjach raportu: pliki zmienione i dodane do staging area oraz pliki zmienione i nie dodane do staging area.</p>
<li><strong>Zatwierdzanie zmian</strong></li>
<p>Gdy wszystkie zmiany, których dokonaliśmy są OK musimy je zatwierdzić. Dokonujemy tego poleceniem:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git commit</pre></div></div>

<p>otworzy się edytor, gdzie należy wpisać opis commitu. Jeżeli tytuł jest krótki, możemy go wpisać od razu przy commicie za parametrem &#8216;-m&#8217;. Na przykład:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;initial commit&quot;</span></pre></div></div>

<p><img class="aligncenter size-medium wp-image-293" title="commit" src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-5-300x79.png" alt="commit" width="300" height="79" /></p>
<p>W GIT nie nadaje się liczbowych numerów rewizji, tak jak ma to miejsce np. w Subversion. Tutaj każdy commit jest określony kluczem SHA wyliczanym na podstawie zawartości working tree. Dla przykładu w moim prostym projekcie pierwszy commit otrzymał identyfikator:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> 52e0188f4b5f082427cc9df07451cc5daa169f63</pre></div></div>

<p>Może na początku wydawać nam się dziwne takie identyfikowanie wersji, ale jest skuteczne. Zwłaszcza, że musimy pamiętać o architekturze systemu git. Tutaj nie ma centralnego repozytorium i można prowadzić dwa równoległe. Gdy po jakimś czasie zdecydowalibyśmy się na synchronizację to byłby problem, bo w każdym repozytorium znalazłyby się rewizje 1, 2, 3 itd. ale zawartości tych rewizji byłyby różne. Aby zapobiec takim sytuacjom wprowadzono klucz SHA jako identyfikator. Co jednak jeżeli w przyszłości chcielibyśmy cofnąć nasz projekt do któregoś momentu? Czy musimy podać cały klucz? Otóż nie. Wystarczy podać tyle pierwszych znaków ile wystarczy na jednoznaczne zidentyfikowanie. W przypadku na przykład gdy mamy dwie rewizje i klucz każdej zaczyna się od innej literki (albo cyferki) to wystarczy podać pierwszy znak klucza aby jednoznacznie zidentyfikować. Niepisaną regułą jest podawanie 7-iu znaków do identyfikacji rewizji. Jest to wystarczająca w większości przypadków liczba jednoznacznie identyfikująca. Tyle też znaków jest podawanych po zcommitowaniu zmian w raporcie.</p>
<p><img class="aligncenter size-medium wp-image-300" title="Commit_SHA" src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-6-300x114.png" alt="Commit_SHA" width="300" height="114" /></p>
<p>Commit tak samo jak Staging area jest &#8220;stemplem&#8221; całego working tree &#8211; są tam informacje o wszystkich plikach i folderach znajdujących się w danym momencie, a nie tylko te, które się zmieniły.</p>
<p><img class="aligncenter size-medium wp-image-303" title="staging Tree" src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-7-300x266.png" alt="staging Tree" width="300" height="266" /></p>
<p>Podsumowując: cała operacja kontroli wersji wykonywana jest w trzech krokach: Pierwszym krokiem jest zmiana zawartości working tree, np. dodanie pliku, usunięcie pliku lub edycja pliku. Drugim krokiem jest zatwierdzenie tej zmiany i przeniesienie jej do Staging area poprzez wykonanie komendy <code> git add</code>. Trzecim krokiem jest zatwierdzenie zmian poprzez <code>git commit</code> i przeniesienie całego Staging index do Commit.</p>
<p>Co to nam daje? Wyobraźmy sobie, że pracujemy z większym projektem. Dokonaliśmy już kilkadziesiąt modyfikacji i nagle otrzymujemy wiadomość, że w jednym z plików jest poważny błąd. Naprawiamy go, stage&#8217;ujemy go (<code>git add</code>) a następnie commitujemy poprawkę. Po czym spokojnie wracamy do naszej pracy, bo reszta plików, którą zmieniliśmy podczas naszej dotychczasowej pracy została nietknięta w naszym working tree. Jak dokonalibyśmy tego w subversion? Musielibyśmy się nakombinować z filelock albo z branchami. Tu mamy to out-of-the-box.</p>
<p>Może wydawać się trudne prowadzenie w ten sposób repozytorium, ale po krótkim czasie przyzwyczajamy się, a po kilku chwilach potem nie będziemy potrafili bez tego żyć <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Istnieje także ułatwienie aby oba kroki dokonać za jednym razem. Podczas commita dodajemy parametr <code>-a</code> i wszystkie pliki, które zostały zmienione (ale nie te co zostały dodane) automatycznie przenoszone są do Staging index i wykonywany jest commit.</p>
<li><strong>Sprawdzanie zmian</strong></li>
<p>Aby zobaczyć co działo się w naszym repozytorium wystarczy wykonać komendę :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git log</pre></div></div>

<p>Wyświetli nam się lista zmian, rozpoczynając od ostatniej. Podane są informacje o symbolu commita, autorze, dacie i wiadomość, która została wpisana wraz z commitem.<br />
Dodanie parametru <code>--pretty=oneline</code> pokaże w jednej lini  klucz sha i message, a dodanie jeszcze parametru <code> --abbrev=commit</code>skróci klucz do 7-miu znaków.</p>
<li><strong>Przykład</strong></li>
<p>Myślę, że w tym miejscu należy się jakiś solidny przykład do komend, które właśnie poznaliśmy. Zatem wracając do przykładu z początku artykułu &#8211; pracujemy nad bardzo ubogim projektem posiadającym jeden plik w folderze głównym oraz jeden folder z drugim plikiem.<br />
Wykonujemy</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git init</pre></div></div>

<p>aby zainicjować kontrolę wersji. Zaraz potem wykonujemy</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git status</pre></div></div>

<p>aby zobaczyć co się zmieniło. Otrzymujemy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">...
<span style="color: #666666; font-style: italic;"># Untracked files:</span>
<span style="color: #666666; font-style: italic;">#   (use &quot;git add ...&quot; to include in what will be committed)</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#       folder1/</span>
<span style="color: #666666; font-style: italic;">#       plik1.txt</span></pre></div></div>

<p>Czyli zarówno plik jak i folder nie są pod kontrolą wersji. Dodajmy plik:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git add plik1.txt</pre></div></div>

<p>i sprawdźmy status raz jeszcze:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">...
<span style="color: #666666; font-style: italic;"># Changes to be committed:</span>
<span style="color: #666666; font-style: italic;">#   (use &quot;git rm --cached ...&quot; to unstage)</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#       new file:   plik1.txt</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Untracked files:</span>
<span style="color: #666666; font-style: italic;">#   (use &quot;git add ...&quot; to include in what will be committed)</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#       folder1/</span></pre></div></div>

<p>W tej chwili gdybyśmy wykonali commit &#8211; dodałoby do commita tylko plik a nie folder. Nie chcemy tego (na razie) więc dodajmy także folder.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git add folder1
&nbsp;
<span style="color: #666666; font-style: italic;"># Changes to be committed:</span>
<span style="color: #666666; font-style: italic;">#   (use &quot;git rm --cached ...&quot; to unstage)</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#       new file:   folder1/plik2.txt</span>
<span style="color: #666666; font-style: italic;">#       new file:   plik1.txt</span></pre></div></div>

<p>i zatwierdzamy zmiany jako &#8220;inital commit&#8221; czy jak tam chcemy nazwać:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;initial commit&quot;</span></pre></div></div>

<p>Od razu otrzymujemy odpowiedź:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>master <span style="color: #7a0874; font-weight: bold;">&#40;</span>root-commit<span style="color: #7a0874; font-weight: bold;">&#41;</span> 68c7006<span style="color: #7a0874; font-weight: bold;">&#93;</span> initial commit
 <span style="color: #000000;">1</span> files changed, <span style="color: #000000;">1</span> insertions<span style="color: #7a0874; font-weight: bold;">&#40;</span>+<span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">0</span> deletions<span style="color: #7a0874; font-weight: bold;">&#40;</span>-<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>widać nazwę commita oraz 7znaków klucza SHA. Sprawdźmy status:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git status
...
nothing to commit <span style="color: #7a0874; font-weight: bold;">&#40;</span>working directory clean<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>Czyli jest ok. Sprawdźmy zatem staging w praniu. Zmieńmy zawartość obu plików i sprawdźmy status:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">...
<span style="color: #666666; font-style: italic;">#       modified:   folder1/plik2.txt</span>
<span style="color: #666666; font-style: italic;">#       modified:   plik1.txt</span></pre></div></div>

<p>teraz jeden plik dodajmy do staging area i zcommitujmy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git add plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git status
...
<span style="color: #666666; font-style: italic;">#       modified:   plik1.txt</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Changed but not updated:</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#       modified:   folder1/plik2.txt</span>
...
<span style="color: #000000; font-weight: bold;">&gt;</span> git commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;2nd commit&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>master 4741a87<span style="color: #7a0874; font-weight: bold;">&#93;</span> 2nd commit
 <span style="color: #000000;">1</span> files changed, <span style="color: #000000;">1</span> insertions<span style="color: #7a0874; font-weight: bold;">&#40;</span>+<span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">1</span> deletions<span style="color: #7a0874; font-weight: bold;">&#40;</span>-<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> git status
...
<span style="color: #666666; font-style: italic;"># Changed but not updated:</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#       modified:   folder1/plik2.txt</span></pre></div></div>

<p>Czyli jest tak jak zamierzaliśmy &#8211; w commicie znalazł się tylko plik1.txt &#8211; plik2.txt pozostał dalej w working tree. Zmieńmy ponownie plik1.txt i dodajmy do staging area &#8211; wrócimy do poprzedniej sytuacji..</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">vim</span> plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git add plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git status
<span style="color: #666666; font-style: italic;"># Changes to be committed:</span>
<span style="color: #666666; font-style: italic;">#       modified:   plik1.txt</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Changed but not updated:</span>
<span style="color: #666666; font-style: italic;">#       modified:   folder1/plik2.txt</span></pre></div></div>

<p>czyli posiadamy dwa edytowane pliki, ale jeden tylko w staging index. Spróbujmy zatwierdzić je oba razem:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git commit <span style="color: #660033;">-a</span> <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;3rd commit&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>master 1ed35d3<span style="color: #7a0874; font-weight: bold;">&#93;</span> 3rd commit
 <span style="color: #000000;">2</span> files changed, <span style="color: #000000;">2</span> insertions<span style="color: #7a0874; font-weight: bold;">&#40;</span>+<span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">1</span> deletions<span style="color: #7a0874; font-weight: bold;">&#40;</span>-<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> git status
<span style="color: #666666; font-style: italic;"># nothing to commit (working directory clean)</span></pre></div></div>

<p>Nice&#8230; dodało oba pliki, ten który był w staging area oraz drugi który nie był. Pamiętajmy, że w przypadku, gdy dodamy <strong>nowy plik</strong> to musimy go ręcznie dodać do staging index.<br />
Rzućmy okiem na log naszego repozytorium:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git log <span style="color: #660033;">--pretty-oneline</span> <span style="color: #660033;">--abbrev-commit</span>
1ed35d3 3rd commit
4741a87 2nd commit
68c7006 initial commit</pre></div></div>

<p>Możemy także z ciekawości zerknąć na to co wyświetli nam samo <code>git log</code></p>
<p>Skoro przyjęliśmy już jakiś zakres wiedzy jedźmy dalej:)</p>
<li><strong>Cofanie zmian</strong></li>
<p>Co jednak jeżeli chcemy cofnąć zmiany, które wykonaliśmy na plikach? Wszystko zależy od tego jak daleko chcemy się cofnąć. Inaczej jest gdy zmiany nie zostały dodane do staging area a inaczej, jeżeli pliki już są dodane.</p>
<p>Jeżeli pliki nie są w staging area wystarczy wykonać komendę</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git checkout nazwa_pliku_lub_folderu</pre></div></div>

<p>Sprawdźmy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git status
nothing to commit <span style="color: #7a0874; font-weight: bold;">&#40;</span>working directory clean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;jakiś tekst&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git status
<span style="color: #666666; font-style: italic;"># Changed but not updated:</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#       modified:   plik1.txt</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> git checkout plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git status
nothing to commit <span style="color: #7a0874; font-weight: bold;">&#40;</span>working directory clean<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>Jeżeli nie podamy nazwy pliku to zostaną cofnięte wszystkie zmiany w naszym working tree<br />
<img src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-8-300x88.png" alt="checkout" title="checkout" width="300" height="88" class="aligncenter size-medium wp-image-305" /></p>
<p>Jeżeli pliki są dodane już do staging area, musimy je najpierw z niego &#8220;wyjąć&#8221; a potem dopiero cofnąć zmiany. Do tego służy komenda</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git reset HEAD nazwa_pliku</pre></div></div>

<p>Jeżeli nie podamy nazwy pliku to zostaną zresetowane wszystkie. Dopiero jak plik zresetujemy to możemy go cofnąć poprzez <code>git checkout</code><br />
HEAD odnosi się zawsze do ostatniego commita<br />
<img src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-9-300x88.png" alt="domyślne 9" title="domyślne 9" width="300" height="88" class="aligncenter size-medium wp-image-307" /></p>
<p>Przykład:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git status
nothing to commit <span style="color: #7a0874; font-weight: bold;">&#40;</span>working directory clean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;napis&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git add plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git status
...
<span style="color: #666666; font-style: italic;"># Changes to be committed:</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#       modified:   plik1.txt</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> git reset HEAD plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git status 
<span style="color: #666666; font-style: italic;"># Changed but not updated:</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#       modified:   plik1.txt</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> git checkout plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git status
nothing to commit <span style="color: #7a0874; font-weight: bold;">&#40;</span>working directory clean<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<li><strong>Cofanie zmian zatwierdzonych</strong></li>
<p>Zawsze podczas pracy jest tak, że trzeba się cofnąć do poprzedniego commita. Jeżeli będziemy do tego zmuszeni to dokonamy tego poprzez</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git revert klucz_SHA_commita_do_ktorego_sie cofamy</pre></div></div>

<p>(Oczywiście, że klucz wystarczy podać w postaci 7-io zakowej. ) Co się wtedy stanie? Technicznie nie cofamy się lecz idziemy do przodu &#8211; zostaje utworzony nowy commit, który jest identyczny wraz z commitem do którego się odnosimy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git log <span style="color: #660033;">--pretty</span>=oneline <span style="color: #660033;">--abbrev-commit</span>
1ed35d3 3rd commit
4741a87 2nd commit
68c7006 initial commit
<span style="color: #000000; font-weight: bold;">&gt;</span> git revert 1ed35d3
<span style="color: #000000; font-weight: bold;">&gt;</span> git log <span style="color: #660033;">--pretty</span>=oneline <span style="color: #660033;">--abbrev-commit</span>
3503b43 Revert <span style="color: #ff0000;">&quot;3rd commit&quot;</span>
1ed35d3 3rd commit
4741a87 2nd commit
68c7006 initial commit</pre></div></div>

<p>Nic nie stoi na przeszkodzie, abyśmy cofnęli się dalej niż do ostatniego commita, jednak to może powodować problemy z synchronizacją (a o tym jak je rozwiązywać będzie później). Cofamy się do commita &#8220;2nd commit&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git revert 4741a87
<span style="color: #000000; font-weight: bold;">&gt;</span> git log <span style="color: #660033;">--pretty</span>=oneline <span style="color: #660033;">--abbrev-commit</span>
d4976a7 Revert <span style="color: #ff0000;">&quot;2nd commit&quot;</span>
3503b43 Revert <span style="color: #ff0000;">&quot;3rd commit&quot;</span>
1ed35d3 3rd commit
4741a87 2nd commit
68c7006 initial commit</pre></div></div>

<p><img src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-10-294x300.png" alt="Revert" title="Revert" width="294" height="300" class="aligncenter size-medium wp-image-309" /></p>
<li><strong>Porównywanie wersji</strong></li>
<p>Jeżeli chcemy obejrzeć różnice między naszym working tree a commitem używamy komendy :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git show 76a7c8c</pre></div></div>

<p>używając oczywiście klucza commita, do którego chcemy się porównywać.<br />
Jeżeli jednak chcemy obejrzeć różnice pomiędzy dwoma różnymi commitami to używamy komendy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">diff</span> adf8342..78adc87</pre></div></div>

<p>Gdy chcemy obejrzeć całą historię zmian, która nastąpiła w naszym projekcie to używamy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git log <span style="color: #660033;">-p</span></pre></div></div>

<li><strong>Tagowanie</strong></li>
<p>Głównym problemem Subversion jest to, że tagowanie repozytorium polega na kopiowaniu całego repozytorium w inne miejsce. Przy dużych projektach może to być problem ze względu na szybko rozrastające się repozytorium. W GIT&#8217;cie tego nie ma. Gdy chcemy robić taga, to po prostu oznaczamy jednego z commitów i nie tracimy miejsca na dysku. Tagowanie jest przydatne o tyle, że możemy używać taga zamiast klucza SHA odwołując się do tego konkretnego commita. W jaki sposób tagujemy? Jeżeli chcemy otagować ostatniego commita wystarczy podać:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git tag nazwa_taga</pre></div></div>

<p> Jeżeli jednak chcemy otagować commita, który nie jest ostatnim, to musimy podać jego klucz SHA na końcu:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git tag nazwa_taga 7ad87cc</pre></div></div>

<p>Naturalną czynnością jest tagowanie kolejnych wersji naszego projektu, np.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git tag <span style="color: #000000;">0.97</span></pre></div></div>

<p>Jak już wspomniałem, można używać tagów zamiast kluczy SHA, np.:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git <span style="color: #c20cb9; font-weight: bold;">diff</span> wersja_1..wersja_1.2</pre></div></div>

<p> porównuje commity otagowane kolejno &#8220;wesja_1&#8243; oraz &#8220;wersja_1.2&#8243;<br />
<img src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-12-299x255.png" alt="tags" title="tags" width="299" height="255" class="aligncenter size-medium wp-image-313" /></p>
<li><strong>Praca równoległa</strong></li>
<p>Pracując w większych zespołach nad jednym projektem zdarza się, że każdy z członków zespołu pracuje nad inną funkcjonalnością. Są jakoby prowadzone dwie (lub więcej) równoległych ścieżek powstawania projektu. Oba te &#8216;podprojekty&#8217; będą połączone w całość. Może być nawet tak, że chcemy &#8220;wypróbować&#8221; czy np. nowa technologia będzie dobrze działać z naszym projektem. Nie warto wtedy robić tego w głównej ścieżce powstawania tylko wypada zrobić równoległą. Takie równoległe nazywa się gałęziami (<strong>branches</strong>). Branchowanie to rozdzielanie projektu na kilka równoległych ścieżek powstawania, gdzie na koniec oba branche mogą zostać połączone z powrotem w jedną ścieżkę (<strong>merging</strong>). Automatycznie gdy inicjujemy projekt powstaje branch o nazwie <code>master</code>. Jest to główna ścieżka powstawania projektu. Mogliśmy zauważyć tą nazwę np. podczas dokonywania commitu. Jeżeli chcemy zobaczyć który branch jest aktualny wydajemy komendę:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git branch <span style="color: #660033;">-v</span></pre></div></div>

<p>Ukaże nam się informacja o nazwie brancha, kluczu commita i jego nazwie, np.:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">*</span> master d4976a7 Revert <span style="color: #ff0000;">&quot;2nd commit&quot;</span></pre></div></div>

<p>Listę branchy możemy w każdej chwili zobaczyć wydając komendę:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git branch</pre></div></div>

<p> gwiazdka przy nazwie oznacza aktualny branch<br/><br />
<strong>Tworzenie oddzielnej gałęzi</strong></p>
<p>Stworzenie nowego brancha sprowadza sie do wydania komendy <code>git branch</code> wraz z jego planowaną nazwą oraz kluczem commita, który ma być jakby punktem startowym dla tej gałęzi. Jak zawsze, jeżeli nie podamy klucza to będzie użyty aktualny commit.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git branch slave 
<span style="color: #000000; font-weight: bold;">&gt;</span> git branch
<span style="color: #000000; font-weight: bold;">*</span> master
  slave</pre></div></div>

<p><strong>Przełączanie się między branchami</strong><br />
Aby przełączyć się pomiędzy gałęziami musimy użyć komendy <code>git checkout</code> z nazwą brancha którego chcemy użyć.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git branch
<span style="color: #000000; font-weight: bold;">*</span> master
  slave
<span style="color: #000000; font-weight: bold;">&gt;</span> git checkout slave
Switched to branch <span style="color: #ff0000;">'slave'</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> git branch
 master
<span style="color: #000000; font-weight: bold;">*</span> slave</pre></div></div>

<p><img src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-13-300x130.png" alt="branch" title="branch" width="300" height="130" class="aligncenter size-medium wp-image-315" /><br />
<img src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-14-300x154.png" alt="domyślne 14" title="domyślne 14" width="300" height="154" class="aligncenter size-medium wp-image-316" /></p>
<p>Teraz wszystkie zmiany których dokonamy będą zatwierdzane w tej gałęzi</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;jestem w branchu&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git commit <span style="color: #660033;">-a</span> <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;4th commit&quot;</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> git branch <span style="color: #660033;">-v</span>
 master d4976a7 Revert <span style="color: #ff0000;">&quot;2nd commit&quot;</span>
<span style="color: #000000; font-weight: bold;">*</span> slave  36e4883 4th commit</pre></div></div>

<p><img src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-15-300x157.png" alt="commitowanie do brancha" title="commitowanie do brancha" width="300" height="157" class="aligncenter size-medium wp-image-318" /><br />
Przełączając się między gałęziami aktywujemy ostatni commit tej gałęzi, np. wykonianie</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git checkout master</pre></div></div>

<p> aktywuje commit, w którym gałęzie się rozdzieliły (akurat w tym przypadku) i każdy koleny commit będzie od tego miejsca w tej właśnie ścieżce.<br />
<img src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-16-300x150.png" alt="branch_back" title="branch_back" width="300" height="150" class="aligncenter size-medium wp-image-320" /></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;jestem w głównej ścieżce&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> folder1<span style="color: #000000; font-weight: bold;">/</span>plik2.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git commit <span style="color: #660033;">-a</span> <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;5th commit&quot;</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> git branch <span style="color: #660033;">-v</span>
<span style="color: #000000; font-weight: bold;">*</span> master b1e1e1b 5th commit
  slave  36e4883 4th commit</pre></div></div>

<p><img src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-17-300x214.png" alt="commit to master" title="commit to master" width="300" height="214" class="aligncenter size-medium wp-image-322" /><br />
W systemie GIT tworzenie branchy jest tak samo &#8220;tanie&#8221; jak tagów. To jest jeden z powodów &#8220;wyższości GIT nad Subversion&#8221; (moim zdaniem). W związku z tanim kosztem utworzenia brancha, niektórzy programiści tworzą je przy każdej okazji (nowy feature w nowym branchu).<br />
W życiu każdego projektu podzielonego na kilka gałęzi nadchodzi taka chwila, gdzie trzeba będzie się z powrotem połączyć.</p>
<li><strong>Łączenie równoległych gałęzi</strong></li>
<p>Jak już prędzej gdzieś napisałem  &#8211; łączenie dwóch równoległych gałęzi nazywa się <strong>mergingiem</strong>(nie podoba mi się spolszczanie angielskich wyrazów, jeśli jednak chodzi o język techniczny to nie mam nic przeciw &#8211; bo każdy może sobie przetłumaczyć inaczej i nie zrozumiemy nawet prostych przekazów.)</p>
<p>Łączenia dokonujemy z gałęzi do której łączymy ( przeważnie jest to master, czyli główna linia projektu) i podajemy nazwę brancha który ma być włączony. Dla przykładu aktualnie jesteśmy w masterze w Commit&#8217;cie &#8220;5th commit&#8221; i chcemy połączyć się z branchem &#8220;slave&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git merge slave
Merge made by recursive.
 plik1.txt <span style="color: #000000; font-weight: bold;">|</span>    <span style="color: #000000;">1</span> +
 <span style="color: #000000;">1</span> files changed, <span style="color: #000000;">1</span> insertions<span style="color: #7a0874; font-weight: bold;">&#40;</span>+<span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">0</span> deletions<span style="color: #7a0874; font-weight: bold;">&#40;</span>-<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p> tym razem obyło się bez problemów.<br />
W gałęzi master został utworzony nowy commit (nazwany &#8220;merge branch &#8217;slave&#8217;&#8221;) w którym zostały uwzględnione poprawki z obu gałęzi.<br />
<img src="http://marioosh.5dots.pl/wp-content/uploads/domyślne-18-300x208.png" alt="merging" title="merging" width="300" height="208" class="aligncenter size-medium wp-image-323" />Czasami jednak nie jest tak wesoło. Zwłaszcza gdy w obu ścieżkach wyedytujemy ten sam plik. Spróbujmy wyedytować plik1.txt w obu gałęziach jednocześnie.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;master górą&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> plik1.txt 
<span style="color: #000000; font-weight: bold;">&gt;</span> git commit <span style="color: #660033;">-a</span> <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;6th commit&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>master 539525c<span style="color: #7a0874; font-weight: bold;">&#93;</span> 6th commit
<span style="color: #000000; font-weight: bold;">&gt;</span> git checkout slave
Switched to branch <span style="color: #ff0000;">'slave'</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;master dołem&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> plik1.txt
<span style="color: #000000; font-weight: bold;">&gt;</span> git commit <span style="color: #660033;">-a</span> <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;7th commit&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>slave 9705a98<span style="color: #7a0874; font-weight: bold;">&#93;</span> 7th commit</pre></div></div>

<p>Teraz przełączamy się z powrotem do głównej gałęzi i robimy merge</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git checkout master
Switched to branch <span style="color: #ff0000;">'master'</span>
 <span style="color: #000000; font-weight: bold;">&gt;</span> git merge slave
Auto-merging plik1.txt
CONFLICT <span style="color: #7a0874; font-weight: bold;">&#40;</span>content<span style="color: #7a0874; font-weight: bold;">&#41;</span>: Merge conflict <span style="color: #000000; font-weight: bold;">in</span> plik1.txt
Automatic merge failed; fix conflicts and <span style="color: #000000; font-weight: bold;">then</span> commit the result.</pre></div></div>

<p>Niestety w równoległej pracy często tak się zdarza, że sa konflikty. Jak je ominąć? Musimy wyedytować konfliktowy plik. Zobaczymy tam coś takiego:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;&lt;&lt;&lt;&lt;&lt;&lt;</span> HEAD:plik1.txt
master górą
=======
master <span style="color: #000000; font-weight: bold;">do</span>łem
<span style="color: #000000; font-weight: bold;">&gt;&gt;&gt;&gt;&gt;&gt;&gt;</span> slave:plik1.txt</pre></div></div>

<p>Dopisane zostały wersje z obu plików wraz z nagłówkami, która wersja pochodzi z której gałęzi. W takim wypadku musimy ręcznie usunąć tą wersją, która jest zła, oraz oba nagłówki. Następnie musimy dodać plik do staging area poprzez <code>git add plik1.txt</code> i to wszystko &#8211; po konflikcie.</p>
<p>Na koniec wypada usunąć nieużywaną gałąź używając komendy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git branch <span style="color: #660033;">-d</span> slave</pre></div></div>

<p>i po kłopocie <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</ol>
<p>Mam nadzieję, że chociaż troszeczkę przybliżyłem pracę z systemem kontroli wersji GIT. W najbliższym czasie postaram się opisać bardziej zaawansowane możliwości tego systemu.<br />
Miłego mergowania.</p>
<p><a href="http://www.addtoany.com/add_to/wykop?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Wykop" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/wykop.png" width="16" height="16" alt="Wykop"/></a> <a href="http://www.addtoany.com/add_to/blip?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Blip" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blip.png" width="16" height="16" alt="Blip"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Twitter" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Facebook" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/dzone?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="DZone" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/dzone.png" width="16" height="16" alt="DZone"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Digg" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/blinklist?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Blinklist" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/blinklist.png" width="16" height="16" alt="Blinklist"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Delicious" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/evernote?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Evernote" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/evernote.png" width="16" height="16" alt="Evernote"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/google_buzz?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Google Buzz" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/google_buzz.png" width="16" height="16" alt="Google Buzz"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fmarioosh.5dots.pl%2F2009%2F06%2Fgitowy-system-kontroli-wersji%2F&amp;linkname=Raczkowanie%20z%20GIT" title="Google Reader" rel="nofollow" target="_blank"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://marioosh.5dots.pl/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p><h3  class="related_post_title">Podobne wpisy:</h3><ul class="related_post"><li>11.12.2009 -- <a href="http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/" title="Objęcie kontrolą wersji Git nowej aplikacji Rails">Objęcie kontrolą wersji Git nowej aplikacji Rails</a></li><li>20.08.2009 -- <a href="http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/" title="Praca ze zdalnym repozytorium w GIT">Praca ze zdalnym repozytorium w GIT</a></li><li>19.08.2009 -- <a href="http://marioosh.5dots.pl/2009/08/spring-jest-git/" title="Spring jest GIT">Spring jest GIT</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/06/gitowy-system-kontroli-wersji/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
