<?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>Code42 &#187; SVN</title>
	<atom:link href="http://code42.pl/kategoria/svn/feed/" rel="self" type="application/rss+xml" />
	<link>http://code42.pl</link>
	<description>Wielkie Pytanie o Życie, Kod i całą resztę</description>
	<lastBuildDate>Wed, 25 Jan 2012 14:16:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>SVN: Wycofywanie (zatwierdzonych) zmian</title>
		<link>http://code42.pl/2011/10/08/svn-wycofywanie-zatwierdzonych-zmian/</link>
		<comments>http://code42.pl/2011/10/08/svn-wycofywanie-zatwierdzonych-zmian/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 08:55:02 +0000</pubDate>
		<dc:creator>zergu</dc:creator>
				<category><![CDATA[SVN]]></category>
		<category><![CDATA[svn:merge]]></category>
		<category><![CDATA[svn:revert]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=1227</guid>
		<description><![CDATA[Wycofywanie zmian w Subversion można podzielić na dwie kategorie. Pierwsza to wycofywanie zmian lokalnych, jeszcze przed wysłaniem do repozytorium. Druga to odwracanie zmian już zatwierdzonych. Wycofywanie lokalne Anulowanie zmian w kopii lokalnej jest w miarę proste i intuicyjne. Wykorzystujemy tutaj podpolecenie revert, po którym podajemy nazwę pliku lub maskę. Opcją którą właściwie trzeba znać jest [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2009/05/19/naj-opisy-zmian-w-kodzie/' rel='bookmark' title='Naj- opisy zmian w kodzie'>Naj- opisy zmian w kodzie</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://code42.pl/wp-content/uploads/no-turn-around-199x300.jpg" alt="" title="no-turn-around" width="199" height="300" class="alignright size-medium wp-image-1245" /></p>
<p>Wycofywanie zmian w Subversion można podzielić na dwie kategorie. Pierwsza to wycofywanie zmian lokalnych, jeszcze przed wysłaniem do repozytorium. Druga to odwracanie zmian już zatwierdzonych.</p>
<h2>Wycofywanie lokalne</h2>
<p>Anulowanie zmian w kopii lokalnej jest w miarę proste i intuicyjne. Wykorzystujemy tutaj podpolecenie <code>revert</code>, po którym podajemy nazwę pliku lub maskę. Opcją którą właściwie trzeba znać jest <code>-R</code>, która włącza wycofywanie rekursywne. Przykłady:</p>
<p>Anulowanie zmian w pliku &#8216;playground&#8217;:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">svn revert playground</pre></div></div>

<p>Anulowanie wszystkich zmian w projekcie (uruchamiane w głównego katalogu):</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">svn revert -R *</pre></div></div>

<h2>Wycofywanie zmian z repozytorium</h2>
<p>W Subversion <em>de facto</em> nie da się wycofać zmiany już zatwierdzonej. Zamiast tego można jednak zatwierdzić zmiany odwrotne do wprowadzonych. Efekt będzie taki jak zamierzony, jednak „wadliwe” zmiany zostaną w historii. Dlatego konieczne jest tutaj użycie podpolecenia <code>merge</code> a nie <code>revert</code>, które, patrząc na nazwę, wydawało by się bardziej intuicyjne.</p>
<p><span id="more-1227"></span></p>
<p>Zakres zmian do wycofania możemy podać używając dwóch przełączników:</p>
<p><code>-c</code> Podajemy nr jednego zatwierdzenia, który może być ujemy. Podanie <code>-c 123</code> jest równoważne z <code>-r 122:123</code>, natomiast <code>-c -64</code> to to samo co <code>-r 65:64</code></p>
<p><code>-r</code> Podajemy zakres zatwierdzeń. Przykładowo <code>-r 100:120</code>.</p>
<p>Podając malejący zakres rewizji lub nr poprzedzony minusem otrzymujemy zmian odwrotne do wprowadzonych, co można sobie fajnie sprawdzić używając podpolecenia <code>diff</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #660033;">-r</span> <span style="color: #000000;">56</span>:<span style="color: #000000;">57</span> testfile 
Index: testfile
===================================================================
<span style="color: #660033;">---</span> testfile    <span style="color: #7a0874; font-weight: bold;">&#40;</span>revision <span style="color: #000000;">56</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
+++ testfile    <span style="color: #7a0874; font-weight: bold;">&#40;</span>revision <span style="color: #000000;">57</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">@@</span> <span style="color: #660033;">-1</span> +<span style="color: #000000;">1</span>,<span style="color: #000000;">3</span> <span style="color: #000000; font-weight: bold;">@@</span>
 Treść początkowa
+
+Wprowadzenie treści błędnej</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #660033;">-c</span> <span style="color: #660033;">-57</span> testfile
Index: testfile
===================================================================
<span style="color: #660033;">---</span> testfile    <span style="color: #7a0874; font-weight: bold;">&#40;</span>revision <span style="color: #000000;">57</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
+++ testfile    <span style="color: #7a0874; font-weight: bold;">&#40;</span>revision <span style="color: #000000;">56</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">@@</span> -<span style="color: #000000;">1</span>,<span style="color: #000000;">3</span> +<span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">@@</span>
 Treść początkowa
-
<span style="color: #660033;">-Wprowadzenie</span> treści błędnej</pre></div></div>

<p>Powyższe przykłady prezentują jak podejrzeć wprowadzoną zmianę oraz jak otrzymać patch do jej wycofania. Samo wycofanie polega na scaleniu zmian odwrotnych oraz zatwierdzeniu tej zmiany:</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;">svn</span> merge <span style="color: #660033;">-c</span> <span style="color: #660033;">-57</span> testfile
<span style="color: #660033;">---</span> Reverse-merging r57 into <span style="color: #ff0000;">'testfile'</span>:
U    testfile
&nbsp;
<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #c20cb9; font-weight: bold;">diff</span> testfile 
Index: testfile
===================================================================
<span style="color: #660033;">---</span> testfile    <span style="color: #7a0874; font-weight: bold;">&#40;</span>revision <span style="color: #000000;">57</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
+++ testfile    <span style="color: #7a0874; font-weight: bold;">&#40;</span>working copy<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">@@</span> -<span style="color: #000000;">1</span>,<span style="color: #000000;">3</span> +<span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">@@</span>
 Treść początkowa
-
<span style="color: #660033;">-Wprowadzenie</span> treści błędnej
&nbsp;
<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">svn</span> ci</pre></div></div>



<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2009/05/19/naj-opisy-zmian-w-kodzie/' rel='bookmark' title='Naj- opisy zmian w kodzie'>Naj- opisy zmian w kodzie</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2011/10/08/svn-wycofywanie-zatwierdzonych-zmian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ignorowanie plików w SVN</title>
		<link>http://code42.pl/2010/12/24/ignorowanie-plikow-w-svn/</link>
		<comments>http://code42.pl/2010/12/24/ignorowanie-plikow-w-svn/#comments</comments>
		<pubDate>Fri, 24 Dec 2010 13:05:14 +0000</pubDate>
		<dc:creator>zergu</dc:creator>
				<category><![CDATA[SVN]]></category>
		<category><![CDATA[svn:ignore]]></category>
		<category><![CDATA[właściwości w svn]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=757</guid>
		<description><![CDATA[Dość typową sytuacją w każdym projekcie jest fakt, że część plików lub katalogów nie powinna się znajdować pod kontrolą wersji. Przykładami takich plików są: generowane pliki tymczasowe, logi, pliki cache, pliki konfiguracyjne, inne dla każdej kopii roboczej, pliki tworzone przez edytor tekstu lub IDE, zbyt duże pliki, by je wysyłać do repozytorium. Pliki można ignorować [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2009/04/21/uprawnienia-plikow-w-repo-svn/' rel='bookmark' title='Uprawnienia plików w repo SVN'>Uprawnienia plików w repo SVN</a></li>
<li><a href='http://code42.pl/2009/03/26/vim-znajdowanie-plikow-w-podkatalogach/' rel='bookmark' title='Vim: Znajdowanie plików w podkatalogach'>Vim: Znajdowanie plików w podkatalogach</a></li>
<li><a href='http://code42.pl/2009/01/26/vim-edycja-plikow-php/' rel='bookmark' title='Krótko: Vim i powolna edycja plików PHP'>Krótko: Vim i powolna edycja plików PHP</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-778" title="ignored-girls-full" src="http://code42.pl/wp-content/uploads/ignored-girls-full-201x300.jpg" alt="" width="201" height="300" /></p>
<p>Dość typową sytuacją w każdym projekcie jest fakt, że część plików lub katalogów nie powinna się znajdować pod kontrolą wersji. Przykładami takich plików są:</p>
<ul>
<li>generowane pliki tymczasowe,</li>
<li>logi,</li>
<li>pliki cache,</li>
<li>pliki konfiguracyjne, inne dla każdej kopii roboczej,</li>
<li>pliki tworzone przez edytor tekstu lub IDE,</li>
<li>zbyt duże pliki, by je wysyłać do repozytorium.</li>
</ul>
<p>Pliki można ignorować na dwa sposoby.</p>
<p><span id="more-757"></span></p>
<h2>Ignorowanie globalne</h2>
<p>Każdy użytkownik może ustawić sobie dowolne ignorowanie plików według typowych dla konsol linuksowych masek. Aby to zrobić należy wyedytować plik <code>config</code>, który powinien znajdować się w katalogu <code>.subversion</code> w katalogu domowym użytkownika (Linux) lub w jego profilu (Windows). Interesująca nas opcja nazywa się <strong><code>global-ignores</code></strong>. Domyślnie jest ona objęta komentarzem a jej domyślna wartość wygląda następująco:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000099;">global-ignores</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store</span></pre></div></div>

<p>I właśnie takie pliki są domyślnie ignorowane. Dlatego też, chcąc dodać kolejną maskę, nie powinniśmy raczej kasować początkowych wartości (chociaż oczywiście możemy). Ja tutaj dodałem sobie tylko pliki tymczasowe jakie generuje mi Vim:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000099;">global-ignores</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store *.swp *.swo *.swn</span></pre></div></div>

<p>Maski lub nazwy plików działają również na katalogi.</p>
<h2>Ignorowanie lokalne</h2>
<p>Subversion dostarcza mechanizm pozwalający na ustawianie dowolnych właściwości (<em>properties</em>) plikom i katalogom znajdującym się pod jego kontrolą. Kilka właściwości jest zdefiniowanych od razu — każda z nich zaczyna się od <code>svn:</code> (jak np. <a title="Uprawnienia plików w repo SVN" href="http://code42.pl/2009/04/21/uprawnienia-plikow-w-repo-svn/">svn:executable</a>). Prawdopodobnie najpopularniejszą z nich jest <code>svn:ignore</code>, służąca właśnie do ignorowania plików.</p>
<p>Musicie pamiętać, że właściwość <code>svn:ignore</code> można ustawiać tylko na katalogach (tj. plik nie możne przechowywać informacji o tym, że on sam ma być zignorowany). Jej wartością mogą być nazwy plików, nazwy katalogów lub maski oddzielone znakiem nowej linii. Innymi słowy — aby zignorować pojedynczy plik, musimy edytować właściwości katalogu, w którym się znajduje, a nie tegoż pliku. Wg mnie najwygodniejszym sposobem ustawiania ignorowania jest wykorzystanie podpolecenia <code>propedit</code> (skrót <code>pe</code>), które to otwiera nam edytor, dzięki czemu możemy wygodnie wpisać nazwy do ignorowania.</p>
<h3>Przykład: zignorowanie plików log1, log2, katalogu test i wszyskich plików kończących się na „a” w bieżącym katalogu</h3>
<p>Otwieramy edytor dla właściwości <code>svn:ignore</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> pe <span style="color: #c20cb9; font-weight: bold;">svn</span>:ignore .</pre></div></div>

<p>Po czym w edytorze wpisujemy:</p>
<pre>log1
log2
test
*a</pre>
<p>Możemy sprawdzić czy wszystko jest ok:</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;">svn</span> proplist <span style="color: #660033;">-v</span>
Properties on <span style="color: #ff0000;">'.'</span>:
  <span style="color: #c20cb9; font-weight: bold;">svn</span>:ignore
    log1
    log2
    <span style="color: #7a0874; font-weight: bold;">test</span>
    <span style="color: #000000; font-weight: bold;">*</span>a</pre></div></div>

<p>Pozostaje tylko <em>zakomitować</em> zmiany:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> ci <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Trochę bezsensu, ale dobry jako przykład svn:ignore&quot;</span></pre></div></div>

<h3>Przykład: zignorowanie istniejącego, niepustego katalogu z cachem</h3>
<p>Zakładając, że sam katalog powinien znaleźć się w repozytorium, natomiast jego zawartość nie. Najpierw dodajemy katalog do svn:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> add cache <span style="color: #660033;">--depth</span> empty</pre></div></div>

<p>Gdzie <code>cache</code> jest nazwą katalogu, a parametr <code>--depth empty</code> powoduje, że pliki wewnątrz nie zostaną dodane.<br />
Następnie ustawiamy ignorowanie wszystkich plików w katalogu, za pomocą podpolecenia <code>propset</code> (skrót <code>pe</code>):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> propset <span style="color: #c20cb9; font-weight: bold;">svn</span>:ignore \<span style="color: #000000; font-weight: bold;">*</span> cache</pre></div></div>

<p>Gwiazdka musi być wyeskejpowana, żeby nasz <em>shell</em> jej nie zinterpretował i nie podstawił wszystkich nazw plików z bieżącego katalogu. Teraz pozostaje już tylko zatwierdzenie zmian w repozytorium:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> ci <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;svn:ignore na zawartość katalogu cache&quot;</span></pre></div></div>

<h3>Przykład negatywny: ignorowanie dwa lub więcej katalogi niżej</h3>
<p>Załóżmy, że chcemy zignorować pliki <code>./log/2010/*</code>. Może wydawać się intuicyjne ustawienie <code>svn:ignore</code> w bieżącym katalogu na wartość <code>log/2010/*</code>. Jednak taki zapis nie zadziała. Musimy ustawić właściwość na katalog bezpośrednio nadrzędny, czyli:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #c20cb9; font-weight: bold;">ps</span> <span style="color: #c20cb9; font-weight: bold;">svn</span>:ignore \<span style="color: #000000; font-weight: bold;">*</span> log<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2010</span></pre></div></div>



<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2009/04/21/uprawnienia-plikow-w-repo-svn/' rel='bookmark' title='Uprawnienia plików w repo SVN'>Uprawnienia plików w repo SVN</a></li>
<li><a href='http://code42.pl/2009/03/26/vim-znajdowanie-plikow-w-podkatalogach/' rel='bookmark' title='Vim: Znajdowanie plików w podkatalogach'>Vim: Znajdowanie plików w podkatalogach</a></li>
<li><a href='http://code42.pl/2009/01/26/vim-edycja-plikow-php/' rel='bookmark' title='Krótko: Vim i powolna edycja plików PHP'>Krótko: Vim i powolna edycja plików PHP</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2010/12/24/ignorowanie-plikow-w-svn/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Uprawnienia plików w repo SVN</title>
		<link>http://code42.pl/2009/04/21/uprawnienia-plikow-w-repo-svn/</link>
		<comments>http://code42.pl/2009/04/21/uprawnienia-plikow-w-repo-svn/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 08:39:17 +0000</pubDate>
		<dc:creator>Mistrz Wu</dc:creator>
				<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=361</guid>
		<description><![CDATA[Jakby gdzieś, kiedyś, przypadkiem zdarzyło Wam się, że jakiś ziomal wrzucał do repozytorium pliki z atrybutami wykonywalności, a które owych atrybutów mieć nie powinny i na dodatek chmodowanie+svn ci nie pomaga, to jest na to rada jedna: $ find . -exec svn propdel svn:executable {} \; Subversion będzie się czepiał: svn: Próba usunięcia nieistniejącego atrybutu [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2010/12/24/ignorowanie-plikow-w-svn/' rel='bookmark' title='Ignorowanie plików w SVN'>Ignorowanie plików w SVN</a></li>
<li><a href='http://code42.pl/2009/03/26/vim-znajdowanie-plikow-w-podkatalogach/' rel='bookmark' title='Vim: Znajdowanie plików w podkatalogach'>Vim: Znajdowanie plików w podkatalogach</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Jakby gdzieś, kiedyś, przypadkiem zdarzyło Wam się, że jakiś ziomal wrzucał do repozytorium pliki z atrybutami wykonywalności, a które owych atrybutów mieć nie powinny i na dodatek <i>chmodowanie</i>+<code>svn ci</code> nie pomaga, to jest na to rada jedna:</p>
<pre><code>$ find . -exec svn propdel svn:executable {} \;</code></pre>
<p><abbr>Subversion</abbr> będzie się czepiał: <q>svn: Próba usunięcia nieistniejącego atrybutu &#8216;svn:executable&#8217;</q>, jednak nie straszne nam takie komunikaty. Atrybuty wykonywalności faktycznie zostaną zdjęte lokalnie, a po <q>commicie</q> nawet i w repozytorium.</p>
<p>Nadmieniam usłużnie, że do <code>find</code> warto dodać jakiś filterek w rodzaju np. <code>-name '*.php'</code>, jeśli nie chcemy, żeby nam zmieniał wszystko jak leci.</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2010/12/24/ignorowanie-plikow-w-svn/' rel='bookmark' title='Ignorowanie plików w SVN'>Ignorowanie plików w SVN</a></li>
<li><a href='http://code42.pl/2009/03/26/vim-znajdowanie-plikow-w-podkatalogach/' rel='bookmark' title='Vim: Znajdowanie plików w podkatalogach'>Vim: Znajdowanie plików w podkatalogach</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2009/04/21/uprawnienia-plikow-w-repo-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

