Wersjonowanie

Podcastów nie słucham. Od czasu do czasu na jakiś się natknę. Ale był jeden, na który czekałem, bo zjaomy go realizuje. To zależy się nazywa (tak, wiem, dziwna nazwa). Nie jest może niczym specjalnym sam podcast, aczkolwiek przyjemnie się mi słuchało, jednak padła tam pewna idea. Idea plików, które mogę przechowywać w sobie kilka swoich wersji, wraz z komentarzem i tak dalej. Idea niezła, która bardzo mi się spodobała.

Sam używam przy większości projektów systemów wersjonowania - zwłaszcza CVS na moim komputerze (oraz wkrótce na serwerze stoującym w tej chwili obok). Podobno SVN jest lepszy, ale nieważne. CVS-em zaraziłem się wraz z rejestracją pierwszego projektu na SourceForge - i od razu wpłynęło to na mnie. Możliwość śledzenia zmian w plikach, nawet jeżeli tylko jedna osoba to zmienia, możliwość wrócenia do jednej z poprzednich wersji - bardzo użyteczna rzecz. A gdyby takie coś było zaimplementowane w obsłudze jakiegoś typu plików? Od jakiegoś czasu myślalem o własnym formacie plików (no, nie tak do końca) przeznaczonego do zapisu różnych danych - a gdyby dodać do niego wbudowaną taką funkcję? Możliwosć zapisywania w jednym pliku kilku wersji tego samego? Wraz z datą komentarzem, porównywaniem zmian?

Oczywiście zapis tego samego kilka razy to zbytnia redundancja, zajmowanie miejsca na dysku powiecie. Zwłaszcza przy plikach graficznych (ze szczególnym uwzględnieniem BMP ;-)). Ale czy możliwość wrócenia do poprzedniej wersji nie powoduje, że warto jest coś takiego uwzględnić? Wersjonowanie plików jest naprawdę wygodne. Myślę, że można by było pomyśleć nad implementacją jakiegoś formatu plików, który by pozwalał na przechowywanie archiwalnych kopii swojej zawartości.

Ot, to takie luźne przemyślenia moje. W ogóle ostatnio mam nadmiar pomysłów, zleceń, kolokwiów i wkrótce egzaminów. Dlaczego jak się nic przez tyle czasu nie działo to teraz się wszystko na kupę zebrało?

Liczba komentarzy: 6

»
  1. #1 Grzesiek
    maj 25, 2006 godzina 17:02

    Nie wiem jakie zasady rządzą tym tekstowym polem, ale pozwolęsobie wstawić odnośnik.

    Jeden z odcinków OK/Cancel - to on przypieczętował nazwę. Żądnych szczegółów odsyłam na Google.

    Opublikowany epizod jaki jest, każdy słyszy. Mawiająjednak, że pierwszy raz boli. Zawsze. Wszystkich.

    Nie pozostaje mi nic innego, jak przeprosićSłuchaczy za cierpienia, na które ich naraziłem i zaprosićdo drugiego epizodu, który planuję udostępnićniedzielnym popołudniem.

  2. #2 Riddle
    maj 25, 2006 godzina 17:17

    Tak czytam co piszesz i zastanawiam się czy Photoshop ma gdzieś ukrytą opcję zapisywania z historią zmian - chociaż gdy przyjąć że mam ustawione 100 cofnięć to pliczek by się trochę zapisywał (a i bez tego np. design mego bloga to 12 MB). :P

  3. #3 Elsindel
    maj 26, 2006 godzina 00:37

    Są liczne systemy plików z dziennikami (journal), który służy głównie do zapewnienia niezawodności systemu. Działa to np. tak, że gdy ma być wykonany zapis na dysk, najpierw wykonywany jest opis zmiany (jaki plik, jaka zmiana) w dzienniku, a dopiero potem we właściwym miejscu. Jeśli coś padnie podczas któregokolwiek z tych etapów to albo da się to odtworzyć tak, jakby zmiana miała miejsce (jeśli journal jest nietknięty), albo tak, jakby nie miała miejsca (jeśli journal jest popsuty). [Nie wiem, co dzieje się, gdy i journal, i plik się popsują - to chyba skrajnie nieprawdopodobne, bo jedno kończy się przed początkiem drugiego, a miejsca te są chyba z założenia dość niezależne.]

    Na tym systemie stosunkowo łatwo zrobić wersjonowanie.

    Słyszałem o systemach do zarządzania plikami, które wersjonowanie mają wbudowane dla wszystkich plików tekstowych, kodów programów itp.

    Systemy zarządzania treścią często mają wbudowane wersjonowanie (np. eZ publish).

    To jest słuszna koncepcja i dobrze się stanie, jeśli w przyszłości coś w tym kierunku pójdzie. O negatywnych skutkach podobnych rozwiązań napisałem kiedyś krótki dowcip: http://elsinterakcja.pl/2005/06/ever-undo

  4. #4 amag
    maj 29, 2006 godzina 12:46

    W jednym z ostatnich Linux Magazine PL znajduje się opis skryptu perlowego, który służy do dodania (pseudo) kontroli wersji dla plików w dowolnych katalogach. Umożliwia odzyskiwanie dowolnej wersji pliku. Tyle pamiętam bo nie zagłębiałem się w sumie w samą treść.

  5. #5 {o}
    czerwiec 3, 2006 godzina 20:06

    Ameryki to nie odkryłeś. Weźmy takiego Worda…
    Plik -> Wersje… No i jest.

    Adobe podeszło do sprawy inaczej. Mamy Version Cue, swoisty serwer ułatwiający wersjonowanie i pracę grupową. I też jest.

    Na tych dwóch programach zapewne sie nie kończy.

  6. #6 Elsindel
    czerwiec 4, 2006 godzina 10:42

    OK, wcześniej o tym nie pomyślałem, ale warto chyba zastanowić się, jakie są w ogóle możliwości.

    Jedna z możliwości to plik, który w sobie zawiera wszystkie stare swoje wersje. Tak robi np. Word (niestety, bez żadnej kompresji: jeśli mam 1-megabajtowy plik, a potem zapiszę jego wersję, to plik rośnie do 2 megabajtów…).

    Druga opcja to zewnętrzny wobec pliku i niezwiązany z systemem plików (np. NTFS, Ext2) system kontroli wersji, taki jak CVS i SVN.

    Trzecią opcją byłby system plików, który sam, w tle, zapisywałby zmiany na tych plikach dokonywane.

    Jeśli plik nie jest plikiem tekstowym, to CVS i CVS wbudowany w system plików mają problem — nie bardzo da się zrobić sensowne zmiany przyrostowe (trudno takiemu systemowi powiedzieć, co właściwie się zmieniło między dwoma plikami). W takim wypadku dobrze byłoby obudowywać formaty binarne w jakieś metadane. Może XML pełniłby tę rolę dobrze — można by wszystko trzymać w XML (nie lubię tego podejścia, ale tu wydaje się sensowne), pliki dość łatwo byłoby porównywać ze względu na strukturę, a jednocześnie może to być efektywne: pliki XML świetnie się kompresują.

    Problemu tego nie ma w pierwszej opcji — program sam zna swój format i może z poprzednich wersji wyciągnąć to, co trzeba. Jeśli odpowiednio skonstruuje się instrukcje systemu plików/systemu CVS, to w sumie program obsługujący dany format może ładować wszystkie wersje do pamięci i wyznaczać różnice — problem jest tylko taki, że niekoniecznie to się zmieści w pamięci (CVS/CVS w systemie plików mogą to chyba robić efektywniej w ogólnym przypadku, mając mały bufor pamięci, ale za bardzo gdybam).

    Czy są jeszcze jakieś inne opcje poza tymi 3, które wymieniłem?

    Ja sam niedługo będę zaczynał korzystać z CVS/SVN, dla próby, ciekaw jestem, czy coś rzeczywiście zyskam na dłuższą metę.

    Na razie bardziej martwię się nazewnictwem i wyszukiwaniem plików — powoli próbuję przejść na schemat: tylko 1 katalog, nazwy plików to tagi, wyszukiwanie wg tagów. Wyłączam z tego schematu na razie multimedia i pliki z pracy. Jest taki program Launchy, który może przerobię tak, aby wyszukiwał pliki wg tagów (obecnie ma niewłaściwą dla mnie funkcję dopasowującą pliki do zapytania). Jest fajny, bo działa sobie w tle, siedzi np. pod Alt-Spacja, i podpowiada listę wyników. Nie zagląda do plików — do tego jeśli będzie potrzebne będę miał Goooooogle Spy. Tzn. search. ;)

Wątek RSS dla komentarzy tego wpisu · Adres trackback

Zostaw komentarz

Dozwolone są niektóre znaczniki XHTML, jak: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Na tym blogu stosowana jest wtyczka antyspamowa Spam Karma. Jeżeli Twój komentarz nie pojawia się, lub po jego dodaniu otrzymujesz pustą stronę - poczekaj, komentarz został dodany, ale albo oczekuje w kolejce, albo został mylnie zakwalifikowany jako spam - spokojnie, gdy zajrzę do panelu administracyjnego to uratuję go.