Bazaar, Git i Subversion: zmiana nazwy katalogu

opublikowane 2007-06-07

Chyba każdy kto uczył się zarządzać kodem, zaczynał od CVS a potem przenosił się na coś innego. Przeważnie na Subversion, które z założenia jest rozwijane jako zamiennik i ulepszenie CVS. Dla programistów żądnych przygód lub po prostu bardziej wymagających, mamy Git, Bazaar, Monotone, Mercurial, Darcs… i wiele innych.

Mark Shuttleworth napisał ciekawą rzecz: mianowicie, że zmiana nazw plików i katalogów to jedna z najważniejszych operacji potrzebnych przy zarządzaniu kodem. Podał tam przykład zmiany nazwy katalogu w jednej gałęzi z jednoczesnym dodaniem pliku do tego katalogu w drugiej gałęzi. Z czystej ciekawości napisałem test, który sprawdza zachowanie trzech programów, które znam: Bazaar, Git i Subversion. Scenariusz jest następujący:

1. Utworzony jest projekt z jednym katalogiem i jednym plikiem w tym katalogu.

`-- project
    `-- dir-a
        `-- foo.txt

2. Programista A tworzy gałąź, w której zmienia nazwę katalogu.

`-- project
    `-- dir-b
        `-- foo.txt

3. Jednocześnie, programista B modyfikuje ten plik i dodaje nowy, w czasie kiedy katalog jest jeszcze pod starą nazwą.

`-- project
    `-- dir-a
        |-- bar.txt
        `-- foo.txt

4. Programista C tworzy nową gałąź, po czym dołącza do niej zmiany z gałęzi A, a następnie zmiany z gałęzi B. Po takim połączeniu, oczekiwałbym że projekt będzie zawierał jeden katalog z dwoma plikami.

`-- project
    `-- dir-b
        |-- bar.txt
        `-- foo.txt

Z trzech programów które przetestowałem, tylko Bazaar zachował się w ten sposób. Git utworzył dwa katalogi (dir-a i dir-b), a Subversion zignorowało plik bar.txt i w ogóle nie umieściło go w złączeniu.

Test który napisałem, odnosi się tylko do trzech programów. Jeżeli napiszesz ten sam test do swojego systemu zarządzania kodem, chętnie zobaczę wyniki! Tymczasem, dla tych którzy chcą sami zobaczyć jak to działa, przygotowałem do pobrania archiwum ze skryptami:

(niestety, kod już nie jest dostępny)

Testy są w postaci skryptów w bashu i były testowane pod Linuksem. Załączony jest też plik README (po angielsku).

Uaktualnienie: (2007-06-08), a

Dennis Lambe dodał test dla Darcs. Z przyjemnością stwierdziłem, że Darcs obsługuje zmiany nazw katalogów prawidłowo: po połączeniu zmian z obydwu gałęzi mamy jeden katalog z dwoma plikami. Dołączyłem ten test do archiwum powyżej.

Uaktualnienie: (2007-06-08), b

Usunąłem wszystkie trzyliterowe skróty z artykułu żeby uniknąć dyskusji o nich i trzymać się tematu.


Komentarze