W serii krótkich porad wtorkowych czas na kolejny temat związany z używanym przeze mnie systemem kontroli wersji - narzędziem Subversion. Dzisiaj chciałbym się z Wami podzielić prostą, wręcz trywialną sztuczką, dzięki której oszczędzicie sobie przenoszenia źle wyeksportowanych danych z repozytorium.

Problem: Checkout repozytorium tworzy niepotrzebny katalog.

Na początku zdefiniujmy problem, jaki będziemy chcieli rozwiązać. Otóż najprostszy, a właściwie jedyny sposób na stworzenie własnego Working Copy projektu zarządzanego przez SVN jest wykonanie checkoutu z repozytorium. Aby to uczynić, należy wykonać w konsoli poniższe, przykładowe polecenie, wykorzystując narzędzie svn:

svn co http://svn.example.com/project/trunk

Przełącznik “co”, to skrót od nazwy checkout, który może być wykorzystywany z nim zamiennie.

Zostanie utworzone Working Copy zawierające gotowy do edycji zbiór danych, zgodny ze strukturą repozytorium. Problem polega na tym, że dane te zostaną umieszczone o jeden poziom wyżej, niż tego normalnie oczekiwalibyśmy - w katalogu o nazwie odpowiadającej ostatniemu członowi adresu repozytorium. Mając na uwadze podany w powyższym poleceniu adres, będzie to katalog “trunk”.

Jak temu zapobiec?

Rozwiązanie: Podanie dodatkowego parametru wskazuje katalog docelowy.

Polecenie checkout, oprócz adresu URL repozytorium przyjmuje dodatkowy parametr określający katalog docelowy eksportu jego zawartości. Jeśli zatem podamy dowolną, poprawną w tym kontekście nazwę, to SVN sam utworzy ten katalog i zapisze do niego eksportowane dane:

svn co http://svn.example.com/project/trunk teddybear

Powyższe polecenie, zamiast do katalogu “trunk” zapisze nam dane do “teddybear”. Jak zatem rozwiązać tytułowy problem checkoutowania repozytorium do aktualnego katalogu? Wystarczy wykorzystać w tym celu nieco “magii” związanej z samym działaniem konsoli - czyli aliasu na aktualny katalog, a więc znaku kropki - “.”:

svn co http://svn.example.com/project/trunk .

Wykonujemy powyższe polecenie i naszym oczom ukazują się pięknie wyeksportowane dane z repozytorium umieszczone w aktualnie wybranym katalogu. Mam nadzieję, że przyda Wam się ta mała informacja, szczególnie ze względu na fakt, że rekursywne przenoszenie katalogów w konsoli nie należy do specjalnie wygodnych czynności. ;]