Co to jest Subversion?
Transkrypt
Co to jest Subversion?
Subversion System wersjonowania projektów C EZARY S OBANIEC mailto:[email protected] Instytut Informatyki Politechnika Poznańska $Id: subversion.lyx 28 2004-03-26 08:12:57Z sobaniec $ Co to jest Subversion? Subversion ✔ jest systemem wersjonowania grup plików, ✔ umożliwia zarzadzanie ˛ wieloma współbieżnymi wersjami projektów, ✔ zastepuje ˛ CVS, usuwajac ˛ jego wady. Architektura • centralne repozytorium • analogia do systemu plików + przechowywanie historii wprowadzanych zmian • przechowywanie dowolnych plików, również binarnych Historia • 2000 — CollabNet • VIII 2001 — źródła Subversion zarzadzane ˛ przez Subversion Instytut Informatyki Politechnika Poznańska Subversion (1/45) c 2004 by Cezary Sobaniec Główne cechy Subversion Wersjonowanie struktur katalogów Inaczej niż w przypadku CVS, wersjonowaniu podlegaja˛ całe struktury katalogów. Użytkownik ma do dyspozycji nowe komendy: move i copy. Atomowe zatwierdzanie Zmiany zatwierdzane sa˛ w całości albo w ogóle. Metadane podlegajace ˛ wersjonowaniu Do każdego pliku i/lub katalogu można przypisać dowolna˛ liczbe˛ własności (klucz–wartość), których wartości podlegaja˛ wersjonowaniu. Różne metody dostepu ˛ • Lokalny system plików • wbudowany prosty serwer • moduł dla serwera Apache komunikujacy ˛ sie˛ zgodnie z protokołem WebDAV • tunelowanie SSH. Instytut Informatyki Politechnika Poznańska Subversion (2/45) c 2004 by Cezary Sobaniec Główne cechy Subversion (cd) Jednolite przetwarzanie plików Zmiany w plikach sa˛ przechowywane w postaci skompresowanej w taki sam sposób, bez wzgledu ˛ na ich typ (pliki tekstowe, binarne). Efektywna komunikacja klient–serwer Klient i serwer wysyłaja˛ zawsze tylko zmiany pomiedzy ˛ wersjami plików (w CVS tylko serwer => klient). Efektywne tworzenie gałezi ˛ pobocznych i etykietowanie Koszt utworzenia gałezi ˛ pobocznej w projekcie jest stały i nie zależy od rozmiaru projektu (analogia do twardych dowiaza ˛ ń w systemie plików). Czytelny i rozszerzalny kod źródłowy Subversion to nowy projekt, tworzony od podstaw, z czytelnym i przejrzystym API gotowym do dalszej rozbudowy. Instytut Informatyki Politechnika Poznańska Subversion (3/45) c 2004 by Cezary Sobaniec Narzedzia ˛ Subversion Klient svn klient Subversion umożliwiajacy ˛ wprowadzanie zmian i pobieranie informacji z repozytorium. svnversion narz˛edzie wspomagajace ˛ do raportowania numerów wersji składowych katalogu roboczego. Serwer svnlook narz˛edzie do pobierania różnych informacji z repozytorium. svnadmin program do zarzadzania ˛ repozytorium (tworzenie, backup, itp.). svnserve samodzielny serwer zdalnego dostepu ˛ do repozytorium. mod dav syn moduł serwera Apache do zdalnego dostepu ˛ do repozytorium. Instytut Informatyki Politechnika Poznańska Subversion (4/45) c 2004 by Cezary Sobaniec Podstawowe pojecia ˛ Repozytorium Centralny, wersjonowany system plików. Dane moga˛ być pobierane przez dowolna˛ liczbe˛ klientów. Zapis do repozytorium umożliwia dostep ˛ do nowych danych innym klientom. Repozytorium Instytut Informatyki Politechnika Poznańska zapis odczyt Użytkownik 1 Użytkownik 2 odczyt Użytkownik 3 Subversion (5/45) c 2004 by Cezary Sobaniec Model wersjonowania a) b) A odczyt odczyt A c) A A A’ d) A’ A’’ zapis A’ Instytut Informatyki Politechnika Poznańska A’’ zapis A’’ A’ A’’ Subversion (6/45) c 2004 by Cezary Sobaniec Współdzielenie plików ✘ Nadpisywanie zmian wprowadzonych przez innych użytkowników. Blokowanie dostepu ˛ do pliku (podejście pesymistyczne) Wiele blokad do odczytu, jedna blokada do zapisu. ✘ Problem nie zdjetych ˛ blokad. ✘ Nadmiarowa synchronizacja: edycja różnych fragmentów pliku tekstowego. ✘ Współbieżne, niekompatybilne zmiany w plikach zależnych od siebie. Instytut Informatyki Politechnika Poznańska Subversion (7/45) c 2004 by Cezary Sobaniec Współdzielenie plików (cd) Współbieżne modyfikacje (podejście optymistyczne) • Replikacja danych u klientów. • Zmiany pochodzace ˛ od różnych użytkowników sa˛ przez nich integrowane i wprowadzane do repozytorium. • Podejście optymistyczne: użytkownicy z reguły nie wprowadzaja˛ konfliktowych zmian. Instytut Informatyki Politechnika Poznańska Subversion (8/45) c 2004 by Cezary Sobaniec Integracja zmian a) b) A odczyt odczyt A c) A A A’ d) A’ A’’ A’ zapis zapis A’ Instytut Informatyki Politechnika Poznańska A’’ A’ A’’ Subversion (9/45) c 2004 by Cezary Sobaniec Integracja zmian (cd) e) f) A’ A’ odczyt A’ g) A’ A’’ h) A* zapis A’ Instytut Informatyki Politechnika Poznańska A’ A* A* A* odczyt A* A* Subversion (10/45) c 2004 by Cezary Sobaniec Katalog roboczy • Kopia danych z repozytorium. • Zwykłe pliki, które moga˛ być dowolnie modyfikowane. • Zmiany po weryfikacji moga˛ być wprowadzone do repozytorium. – operacja commit • Zmiany innych użytkowników moga˛ być pobrane z repozytorium i integrowane z lokalna˛ wersja˛ projektu. – operacja update • Informacje zarzadzaj ˛ ace ˛ przechowywane sa˛ w podkatalogu .svn ( svn w systemach Windows). Instytut Informatyki Politechnika Poznańska Subversion (11/45) c 2004 by Cezary Sobaniec Przykładowa sesja 1. Pobranie projektu z repozytorium # svn checkout svn://unixlab/Proj1 # cd Proj1 # ls -a Makefile main.c const.h .svn 2. Wprowadzenie zmian do lokalnej kopi # vi main.c 3. Weryfikacja dokonanych zmian # svn status M main.c # svn diff Index: main.c =================================================================== --- main.c (revision 7) +++ main.c (working copy) 5c5,6 Instytut Informatyki Politechnika Poznańska Subversion (12/45) c 2004 by Cezary Sobaniec Przykładowa sesja (cd) 4. Zatwierdzenie zmian # svn commit Sending main.c Transmitting file data ..... Committed revision 8. 5. Pobranie innych zmian z repozytorium # svn update U const.h 6. Dodanie/usuniecie ˛ plików # svn add dane.c # svn delete const.h 7. Zmiana nazwy/lokalizacji pliku/katalogu # svn move dane.c data.c Instytut Informatyki Politechnika Poznańska Subversion (13/45) c 2004 by Cezary Sobaniec Adresy URL repozytoriów file:// bezpośredni dostep ˛ do lokalnego repozytorium. http:// dostep ˛ za pośrednictwem protokołu WebDAV. https:// podobnie jak http://, ale komunikacja jest kodowana. svn:// dostep ˛ za pośrednictwem protokołu serwera svnserve. svn+ssh:// podobnie jak file:///, ale poprzez tunel SSH. Przykład svn+ssh://unixlab/var/svnroot/TestProject ^^^^^^^^^^^ =========== fizyczny nazwa katalog projektu na serwerze Instytut Informatyki Politechnika Poznańska Subversion (14/45) c 2004 by Cezary Sobaniec Wersje repozytorium 0 1 2 3 4 ==================================================================================== / / | ‘--Proj1 |--Makefile |--main.c ‘--defs.h / | |--Proj1 | |--Makefile | |--main.c | ‘--defs.h | ‘--Proj2 ‘--index.html / | |--Proj1 | |--Makefile | |--main.c | ‘--defs.h | ‘--Proj2 |--index.html ‘--main.css / | |--Proj1 | |--Makefile | |--main.c* | ‘--defs.h | ‘--Proj2 |--index.html ‘--main.css ==================================================================================== import Proj1 Instytut Informatyki Politechnika Poznańska import Proj2 add main.css update main.c Subversion (15/45) c 2004 by Cezary Sobaniec Nowy projekt Przygotowanie repozytorium # svnadmin create /var/svnroot Wprowadzenie projektu do repozytorium # svn import NowyProjekt file:///var/svnroot/Proj1 Adding NowyProjekt/Makefile Adding NowyProjekt/main.c Transmitting file data.... Committed revision 1. Utworzenie katalogu roboczego # svn checkout file:///var/svnroot/Proj1 A Proj1/Makefile A Proj1/main.c Checked out revision 1. # cd Proj1 Instytut Informatyki Politechnika Poznańska Subversion (16/45) c 2004 by Cezary Sobaniec Nowy projekt (cd) Utworzenie projektu i konwersja do katalogu roboczego # # # # # A A # cd .. svn mkdir file:///var/svnroot/Proj1 svn checkout file:///var/svnroot/Proj1 cd Proj1 svn add Makefile main.c Makefile main.c svn commit ... Instytut Informatyki Politechnika Poznańska Subversion (17/45) c 2004 by Cezary Sobaniec Weryfikacja wprowadzonych zmian # svn status M Makefile MM main.c ? defs.h Status pliku A plik bedzie ˛ dodany do repozytorium. D plik bedzie ˛ usuniety ˛ z repozytorium. M plik zmodyfikowany lokalnie. C konflikt pomiedzy ˛ aktualna˛ wersja˛ w repozytorium a wersja˛ lokalna. ˛ ? nieznany plik — nie przechowywany w repozytorium. ! brak pliku przechowywanego w repozytorium. Druga kolumna opisuje zmiany metadanych (własności). Instytut Informatyki Politechnika Poznańska Subversion (18/45) c 2004 by Cezary Sobaniec Weryfikacja wprowadzonych zmian (cd) # svn diff main.c Index: main.c =================================================================== --- main.c (revision 7) +++ main.c (working copy) @@ -2,6 +2,7 @@ int main() { - int x = 0; + int x = 1; + int y = 2 * x + 1; printf("OK\n"); if (x > 0) { ✔ Komendy status i diff nie wymagaja˛ kontaktowania sie˛ z repozytorium. Katalog .svn zawiera kopie oryginalnych plików pobranych z repozytorium. => redukcja komunikacji kosztem wiekszej ˛ zajetości ˛ dyskowej Instytut Informatyki Politechnika Poznańska Subversion (19/45) c 2004 by Cezary Sobaniec Wycofanie wprowadzonych zmian # svn revert main.c Reverted main.c • Przywracana jest bazowa wersja pliku z katalogu .svn (bez kontaktu z repozytorium). • Komenda revert może wycofywać operacje add i delete. Instytut Informatyki Politechnika Poznańska Subversion (20/45) c 2004 by Cezary Sobaniec Aktualizacja lokalnego katalogu # svn update U ./main.c Updated to revision 9. Status pliku U plik został zaktualizowany (pobrano zmiany wprowadzone do repozytorium). A nowy plik został dodany do lokalnego katalogu roboczego. D lokalny plik został usuniety. ˛ R lokalny plik został zastapiony ˛ innym o takiej samej nazwie. G zmiany z repozytorium zostały poprawnie zintegrowane z lokalnymi. C zmiany z repozytorium spowodowały konflikt z lokalnymi zmianami. Instytut Informatyki Politechnika Poznańska Subversion (21/45) c 2004 by Cezary Sobaniec Konflikty Reakcja na konflikt 1. Sygnalizacja znakiem C. 2. Modyfikacja pliku źródłowego wskazujaca ˛ nakładajace ˛ sie˛ zmiany. 3. Utworzenie plików: plik.mine oryginalny plik klienta sprzed operacji update. plik.rOLDREV plik bazowy dla lokalnych modyfikacji. plik.rNEWREV aktualna wersja pliku w repozytorium. Możliwe akcje 1. Reczne ˛ usuniecie ˛ konfliktu poprzez edycje˛ oryginalnego pliku. 2. Skopiowanie jednego z plików .mine, .rOLDREV, .rNEWREV. 3. Wycofanie lokalnych zmian (svn revert). 4. Usuniecie ˛ plików tymczasowych: svn resolved. Instytut Informatyki Politechnika Poznańska Subversion (22/45) c 2004 by Cezary Sobaniec Przykład konfliktu Oryginalny plik Modyfikacje uż.1 Modyfikacje uż.2 ----------------------------------------------------------------------#define ONE 1 #define ONE 1 #define ONE 1 #define TWO 2 #define TWO 2 #define TWO 2 #define MORE 3 #define THREE 3 .---> #define OTHER 3 #define MORE 4 <----’ Użytkownik 1 wprowadził zmiany do repozytorium. Użytkownik 2 wprowadził inne zmiany i aktualizuje katalog roboczy. #define #define <<<<<<< #define ======= #define #define >>>>>>> ONE 1 TWO 2 .mine OTHER 3 THREE 3 MORE 4 .r8 Instytut Informatyki Politechnika Poznańska <== poczatek ˛ konfliktu <== wersja użytkownika 2 (moja) <== wersja użytkownika 1 <== koniec konfliktu Subversion (23/45) c 2004 by Cezary Sobaniec Historia zmian # svn log -----------------------------------------------------------------------r3 | sobaniec | 2004-03-08 11:15:53 +0100 (Mon, 08 Mar 2004) | 1 line Algorytm iteracyjny. -----------------------------------------------------------------------r2 | kowalski | 2004-03-04 14:38:09 +0100 (Thu, 04 Mar 2004) | 1 line Procedura startowa. -----------------------------------------------------------------------r1 | sobaniec | 2004-03-01 08:35:48 +0100 (Mon, 01 Mar 2004) | 1 line Wersja poczatkowa. ˛ -----------------------------------------------------------------------# svn log -r 5:8 # modyfikacje od 5 do 8 # svn log defs.h # modyfikacje dotyczace ˛ pliku defs.h # svn log -r 3 -v # szczegółowa lista plików zmieniona w wersji 3 -----------------------------------------------------------------------r3 | sobaniec | 2004-03-08 11:15:53 +0100 (Mon, 08 Mar 2004) | 1 line Changed paths: M /Proj1/main.c Instytut Informatyki Politechnika Poznańska Subversion (24/45) c 2004 by Cezary Sobaniec Historia zmian (cd) Komenda diff # svn diff -r 5 main.c # zmiany mi˛ edzy wersja˛ robocza˛ # a wersja˛ 5 z repozytorium # svn diff -r 5:6 main.c # zmiany wprowadzone mi˛ edzy wersja˛ 5 i 6 # svn diff -r 5:6 svn://unixlab/Proj2/main.c # obserwacja zmian bez katalogu roboczego Pobieranie starszych wersji # svn checkout -r 5 ... # svn update -r 5 ... Instytut Informatyki Politechnika Poznańska # przejście do wersji 5 Subversion (25/45) c 2004 by Cezary Sobaniec Inne komendy Wyświetlanie plików z repozytorium # svn cat -r 8 Makefile ... Informacja o projekcie z katalogu roboczego # svn info Path: . URL: file:///var/svnroot/Proj1 Repository UUID: 0ec7a80a-1dd5-0310-828f-8eb621ee5bc6 Revision: 9 Node Kind: directory Schedule: normal Last Changed Author: sobaniec Last Changed Rev: 9 Last Changed Date: 2004-03-16 22:53:24 +0100 (Tue, 16 Mar 2004) Instytut Informatyki Politechnika Poznańska Subversion (26/45) c 2004 by Cezary Sobaniec Inne komendy (cd) Lista plików w repozytorium # svn list Makefile main.c ... # svn list file:///var/svnroot/Proj2 index.html main.css # katalog roboczy # katalog z repozytorium Czyszczenie katalogu roboczego # svn cleanup Instytut Informatyki Politechnika Poznańska Subversion (27/45) c 2004 by Cezary Sobaniec Inne komendy (cd) Komenda blame (praise, annotate) Informacja o autorach zmian w poszczególnych liniach plików wraz z numerami wersji. # svn blame main.c 1 sobaniec #include <stdio.h> 24 kowalski #include <unistd.h> 1 sobaniec 1 sobaniec int main() { 24 kowalski int x; 12 nowak int y = 10; 24 kowalski x = getpid(); 10 kowalski printf("Hello world\n"); 12 nowak printf("y=%d\n", y); 1 sobaniec } Instytut Informatyki Politechnika Poznańska Subversion (28/45) c 2004 by Cezary Sobaniec Właściwości (properties) • Właściwości sa˛ metadanymi Ustawienie właściwości # svn propset copyright ’(c) 2004 PUT II’ Makefile property ’copyright’ set on ’Makefile’ # svn propedit copyright Makefile Set new value for property ’copyright’ on ’Makefile’ Wyświetlenie właściwości # svn propget copyright Makefile (c) 2004 PUT II Status plików # svn status M main.c M Makefile Instytut Informatyki Politechnika Poznańska <-- zmiana właściwości Subversion (29/45) c 2004 by Cezary Sobaniec Właściwości (cd) Lista właściwości # svn proplist Makefile Properties on ’Makefile’: copyright # svn proplist -v Makefile Properties on ’Makefile’: copyright : (c) 2004 Sobaniec Usuwanie właściwości # svn propdel copyright Makefile property ’copyright’ deleted from ’Makefile’. Uwaga: Właściwości sa˛ wersjonowane i ich zmiany moga˛ generować konflikty! Instytut Informatyki Politechnika Poznańska Subversion (30/45) c 2004 by Cezary Sobaniec Specjalne właściwości svn:executable odtwarzania prawa do wykonywania (Unix). svn:mime-type typ MIME danego pliku. Wszystkie typy MIME text/* sa˛ traktowane jako pliki tekstowe (wykonywana jest operacja łaczenia ˛ zmian — merge). svn:ignore lista wzorców plików, które maja˛ być ignorowane — użyteczne w przypadku katalogów (plik .cvsignore w CVS). svn:keywords lista identyfikatorów postaci $nazwa$ modyfikowanych podczas operacji commit. svn:eol-style sposób kodowania nowych linii: native, CR, LF, CRLF. Instytut Informatyki Politechnika Poznańska Subversion (31/45) c 2004 by Cezary Sobaniec Własność svn:keywords Identyfikatory $Date$ data ostatniej modyfikacji. $Rev$ numer wersji repozytorium. $Author$ autor ostatniej zmiany w repozytorium. $URL$ adres URL dokumentu w repozytorium. $Id$ skrócona wersja powyższych identyfikatorów. Przykład # svn propset svn:keywords ’Id Rev’ main.c # head -3 main.c /* * $Id: main.c 11 2004-03-18 10:01:24Z sobaniec $ */ Instytut Informatyki Politechnika Poznańska Subversion (32/45) c 2004 by Cezary Sobaniec Rozgałezienia ˛ Motywacja 1.0 2.0 1.1 1.2 3.0 1.3 1.2.1 • Utrzymywanie wielu równoległych wersji rozwijanego projektu. • Seperacja prac o różnym satusie: rozwojowe, stabilizujace. ˛ Instytut Informatyki Politechnika Poznańska Subversion (33/45) c 2004 by Cezary Sobaniec Tworzenie rozgałezienia ˛ Kopiowanie # svn copy svn://unixlab/Proj svn://unixlab/Proj-1.0-branch ✔ Tworzenie rozgałezie ˛ ń jest operacja˛ o niskim koszcie (zamiast kopiowania tworzone sa˛ dowiazania). ˛ ✔ Rozgałezienie ˛ jest kontynuacja˛ poprzednich modyfikacji: istnieje możliwość pobierania dowolnie starszych wersji plików z gałezi ˛ pobocznej. Instytut Informatyki Politechnika Poznańska Subversion (34/45) c 2004 by Cezary Sobaniec Praca z gałezi ˛ a˛ poboczna˛ Pobranie wersji pobocznej projektu # svn checkout svn://unixlab/Proj-1.0-branch Przełaczanie ˛ miedzy ˛ gałeziami ˛ # svn checkout svn://unixlab/Proj # cd Proj # svn switch svn://unixlab/Proj-1.0-branch Instytut Informatyki Politechnika Poznańska Subversion (35/45) c 2004 by Cezary Sobaniec Kopiowanie zmian miedzy ˛ gałeziami ˛ Integracja zmian z gałezi ˛ pobocznej # svn merge -r 8:10 svn://unixlab/Proj-1.0-branch # svn commit -m "Integracja zmian 8:10 z gał˛ ezi 1.0-branch" Komenda merge działa bardzo podobnie do komendy diff. Wycofywanie zmian # svn merge -r 10:8 main.c # svn merge -r HEAD:PREV main.c Instytut Informatyki Politechnika Poznańska <= ostatnia zmiana Subversion (36/45) c 2004 by Cezary Sobaniec Etykietowanie wersji Kopiowanie # svn copy . svn://unixlab/Proj-1.0-release Kopiowanie bez katalogu roboczego # svn copy svn://unixlab/Proj svn://unixlab/Proj-1.0-release • Nie ma różnicy miedzy ˛ rozgałezieniem, ˛ a etykieta˛ — zawsze kopiowanie. • Konwencja nazewnicza katalogów + definicja praw dostepu. ˛ Instytut Informatyki Politechnika Poznańska Subversion (37/45) c 2004 by Cezary Sobaniec Skrypty Skrypty znajduja˛ sie˛ w katalogu hooks w repozytorium. Skrypty start-commit wywoływany przed utworzeniem transakcji — zgrubna weryfikacja uprawnień. Argumenty: ścieżka do repozytorium i nazwa użytkownika. pre-commit po utworzeniu transakcji, ale przed jej wykonaniem — szczegółowa weryfikacja uprawnień bazujaca ˛ na nazwach plików i podkatalogów projektu. post-commit po zatwierdzeniu transakcji — powiadomienie użytkowników o zmianach. Instytut Informatyki Politechnika Poznańska Subversion (38/45) c 2004 by Cezary Sobaniec Prawa dostepu ˛ do repozytorium Skrypt commit-access-control.pl + plik konfiguracyjny commit-access-control.cfg: [Dost˛ ep do odczytu dla wszystkich] match = .* access = read-only <= identyfikator reguły <= wyrażenie regularne [Projekty Proj1 i Proj2] match = ^(Proj1|Proj2) access = read-write users = sobaniec [Dokumentacja projektu Proj1] match = ^Proj/Doc users = sobaniec kowalski access = read-write Instytut Informatyki Politechnika Poznańska Subversion (39/45) c 2004 by Cezary Sobaniec Kopia zapasowa repozytorium Kopia w formacie tekstowym # svnadmin dump /var/svnroot | gzip -9 > kopia.gz Kopia binarna repozytorium # svnadmin hotcopy /var/svnroot /var/backup Kopia binarna jest zwykłym repozytorium gotowym do pracy. Instytut Informatyki Politechnika Poznańska Subversion (40/45) c 2004 by Cezary Sobaniec Migracja repozytorium Pobranie historii projektu # svnadmin dump /var/svnroot | svndumpfilter include Proj > proj.svn Wczytanie archiwum # svnadmin load /var/svnroot < proj.svn Instytut Informatyki Politechnika Poznańska Subversion (41/45) c 2004 by Cezary Sobaniec Konfiguracja oprogramowania klienta — Unix Lokalizacja plików konfiguracyjnych • ustawienia globalne: /etc/subversion/ • ustawienia lokalne: ~/.subversion/ Plik config [helpers] editor-cmd = vim [miscellany] log-encoding = iso-8859-2 enable-auto-props = yes [auto-props] *.sh = svn:executable *.bat = svn:eol-style=CRLF *.c = svn:eol-style=native;svn:keywords=Id Instytut Informatyki Politechnika Poznańska Subversion (42/45) c 2004 by Cezary Sobaniec Konfiguracja oprogramowania klienta — Unix (cd) Ustawienia dotyczace ˛ sieci: plik servers [global] http-timeout = 30 [groups] inne = test.domain.pl --------------------. put = *.cs.put.poznan.pl ---. | | | [put] <---------------------’ | http-proxy-host = proxy.cs.put.poznan.pl | http-proxy-port = 80 | http-proxy-username = sobaniec | http-proxy-password = tajne | http-timeout = 60 | | [inne] <----------------------------------’ ... Instytut Informatyki Politechnika Poznańska Subversion (43/45) c 2004 by Cezary Sobaniec Konfiguracja oprogramowania klienta — Unix (cd) • Automatyczne uzupełnianie podkomend i przełaczników ˛ poleceń svn i svnadmin: bash# shopt -s extglob progcomp bash# . /usr/share/subversion/tools/client-side/bash completion Instytut Informatyki Politechnika Poznańska Subversion (44/45) c 2004 by Cezary Sobaniec Ważne adresy http://subversion.tigris.org Strona domowa projektu Subversion. http://svnbook.red-bean.com Version Control with Subversion — ksiażka ˛ o Subversion. http://tortoisesvn.tigris.org/ TortoiseSVN — klient Subversion dla Windows. http://www.cs.put.poznan.pl/csobaniec/Papers/subversion.pdf Obecna prezentacja. http://www.cs.put.poznan.pl/csobaniec/Papers/svn-refcard.pdf Subversion Quick Reference Card. Instytut Informatyki Politechnika Poznańska Subversion (45/45) c 2004 by Cezary Sobaniec