O tym jak efektywnie pracować nad wieloma permutacjami w ramach jednego projektu, Czyli krótki poradnik DVCS, na przykładzie Mercurial. I
Zainspirowany niedawnym wpisem Meszuge (wpis zniknął więc nie podam linka), postanowiłem opisać narzędzie, bez którego nie może się obejść, żadem programista. Ale które może się przydać wszystkim, którzy pracują nad plikami tekstowymi, a chcą łatwego sposobu na "kopie zapasowe".
Systemy kontroli wersji (skrót to VCS - version control system) jako narzędzia rozwiązują konkretne problemy i w tych kategoriach powinniśmy je oceniać. Przyjmijmy na moment zmyślony scenariusz opisujący problem, które VCS próbują rozwiązać:
Problem
Mamy coś do napisania (nie ważne czy chodzi o magisterkę, artykuł w Latexie dla gazety, czy kod źródłowy programu), praca objętościowo będzie w miarę duża (5+ stron A4), oraz na pewno będziemy nad nią pracować iteracyjnie (od ogólnego pomysłu do np. 15tej ostatecznie wersji), poprawiając lub rozbudowując różne partie tekstu, często po paru dniach od napisania oryginału. Więc chcemy mieć możliwość wycofania ostatnio wprowadzonych zmian.
Pierwsze rozwiązanie
Oczywistym wyborem jest edytor tekstu z opcją Cofnij, i to taką bez ograniczeń.
Ale co zrobić gdy chcemy wycofać zmiany z wczorajszego wieczora?
Drugie podejście
W takim razie możemy zdecydować się na kompresowanie i archiwizowanie całego tekstu co dziennie po skończonej pracy.
Dodatkowo uzyskaliśmy zabezpieczenie przed przypadkowym usunięciem pliku (lub gdy projekt składa się z kilku plików) oraz zmian w strukturze projektu.
No dobrze a co gdy padnie nam dysk? W przypadku pracy dla gazetki szkolnej szkód wielkich nie będzie, ale co z pracą magisterską gdy dysk spłoną na 2 miesiące przed terminem obrony?
Do trzech razy sztuka?
W takim razie dochodzi nam archiwizacja na dysk zewnętrzny (płytki CD, pendrivy też będą spełniały tą rolę).
No dobra ale jak poradzić sobie z bałaganem gdy nad projektem pracujemy już 13 dzień. Jak nie pogubić się w tych wszystkich kopiach zapasowych?
Jeszcze raz o tym co chcemy osiągnąć
Bogatsi o te doświadczenia możemy teraz doszlifować nasze wymagania. Potrzebujemy: 1) Mieć możliwość cofania zmian, i to na poziomie poszczególnych zdań, a nie tylko plików. 2) Mieć możliwość przechowywania struktury plików (gdy pracujemy nad kilkoma). 3) Mieć możliwość przechowywania kopi zapasowej całej "historii" projektu na zewnętrznym komputerze. 4) Narzędzie ma być maksymalnie proste oraz szybkie w obsłudze. 5) Narzędzie ma być darmowe (ok, jak kogoś stać to może wybrzydzać). 6) Chcemy mieć możliwość pracowania nad projektem w kilka osób, tak, że by 2 lub więcej osób mogło naraz edytować jeden plik. 7) Chcemy mieć możliwość tworzenia wariantów, które mogły by później być włączone do głównej wersji projektu jeśli konkretny wariant się nam spodoba.
Rozwiązanie
Czas odsłonić nasze wymarzone narzędzie: Rozproszone systemy kontroli wersji. 1) Zmiany są zachowywanie jak różnica pomiędzy ostatnią wersją pliku a jego obecną wersją, gdy tego sobie zażyczymy. Więc mogą one objąć, zarówno zmiany połowy pliku jak i pojedynczego byka ortograficznego. 2) Struktura plików jest dokładnie zachowywana, a gdy jakichś plików nie chcemy przechowywać to też nie musimy. Oznacz to też, że zmiany możemy cofnąć wybiórczo dla poszczególnych plików. Dla wygody zaś zmiany są zapamiętywane dla całego projektu, jedną czynnością. 3) "Historię" projektu możemy umieścić na innym komputerze oraz na bezpłatnym hostingu (co znacznie obniża szansę utraty ważnej pracy). Ale również na drugim komputerze i o ile oba są podłączone do internetu w danej chwili to możemy uaktualnić zmiany wprowadzone na drugim jedną prostą czynnością. (Koniec z szuflowaniem pendrivem w tę i we wte pomiędzy laptopem i stacjonarką). A gdy nie są to i tak zewnętrzny hosting załatwi ten problem. 4) Nie tylko narzędzia są proste ale również istnieją świetne graficzne nakładki, tak, że wszystko można sobie wy‑klikać! 5) Pełen wybór na wszystkie platformy. 6) Dzięki 3) na raz mogą pracować różne osoby, nawet na komputerach ustawionych po przeciwnej stronie globu. A dzięki temu, że zmiany są przechowywane jako różnice, narzędzia są sobie wstanie poradzić nawet wtedy gdy kilka zmian odnosi się do jednego pliku, a gdy zmiany odnoszą się do tego samego tekstu, można zdecydować która wersja zostanie zachowana. 7) A gdybyśmy chcieli pracować nad kilkoma wariantami tekstu (np. kilkoma wersjami wstępu?), nic prostszego. Przeskakiwanie z jednej wersji na drugą też nie sprawi problemu. A najlepszy wariant będzie mógł być połączony z roboczą wersją w dowolnym momencie w przyszłości, nawet gdy zmiany w wersji roboczej będą ogromne.
Chcemy więcej!
Brzmi jak PR? Chcecie przykładów? Musicie tylko poczekać do następnego wpisu, w którym przedstawię Mercurial, TortoiseHg, oraz hosting bitbucket, wszystko działające pod Windowsem.
Co można umieścić w VCS?
Nie ma żadnych ograniczeń co do rodzajów plików, którymi VCS może się opiekować. Choć gdy VCS nie zna struktury pliku wtedy próba połączenia kilku wariantów pliku (np. z muzyką) da wynik daleki od oczekiwań. Jak słusznie zauważył Ave5 powstał ciekawy projekt dla GIMPa, który sprawia, że będzie można przechowywać zmiany dla poszczególnych operacji graficznych wykonanych w danym pliku!
Podziękowania dla @Fazid za wyłapanie drobnego błędu z użytymi skrótami. (CVS to nazwa konkretnego programu, VCS całej ich kategorii).