Tomsovi

  • Increase font size
  • Default font size
  • Decrease font size
Domů Honza Software Development Konfigurační řízení
Konfigurační řízení

Subversion - přejmenování souborů

E-mail Print PDF
There are no translations available.

Úvod

Toto je první ze zamýšlené série článků o verzovacím nástroji Subversion (SVN), resp. obecněji o tematice verzování, konfiguračního řízení a release managementu.

Na triviálním příkladu si ukážeme zdánlivě triviální operaci přejmenování souborů.

Přejmenování provedeme nejprve intuitivním (avšak bohužel špatným) způsobem.

Následně pak bude ukázán způsob, jak se to správně má dělat.

V obou případech si ukážeme, jaký dopad má dané řešení na historii souborů, tj. na obsah jejich předchozí revizí a na komnetáře k jednotlivým historickým commitům.

Zachování historie považuji za velmi významné, neboť při práci na dlouhodobějších softwarových projektech mají informace z historie zdrojových souborů nezastupitelnou roli. Dle mé zkušenosti mohou informace z historie zdrojových kódů výrazně přispět k pochopení důvodů provedení změny.

Jestliže se např. při údržbě software podaří prokázat, že nějaká změna v minulosti byla provedena na popud uživatele, pak tato znalost může rozhodnout o tom, zda je dodavatel povinen zdarma provést opravu chyby nebo zda se naopak jedná o změnový požadavek placený zákazníkem.

Jinými slovy: Pozor, jde o peníze! ;-)

Použité nástroje

  • Tortoise SVN verze 1.6.14 - GUI klient SVN integrovaný do systému pomocí kontextových menu.
  • CollabNet SVN verze 1.6.15 - konzolový klient SVN.

Výchozí situace

SVN repository http://my.svn.server/svn/

Složka projektu s podsložkami:

  • project1
    • branches
    • tags
    • trunk

Pracovní složka D:\_projects\project1
v ní je check-outovaná SVN složka /project1/trunk

Check out

Příkazová řádka:

D:\_projects\project1>svn co http://my.svn.server/svn/project1/trunk .
A    file2.txt
A    file1.txt
Checked out revision 6.

D:\_projects\project1>

Tortoise SVN:

Prohlížení historie souborů

Prohlížení změn v souborech

Přejmenování souborů

Na příkladu souboru "file2.txt" si ukážeme, jak se to NEMÁ DĚLAT,
nicméně jak by to někdo vzhledem ke starým zvykům dělat mohl.

Na příkladu souboru "file1.txt" si pak ukážeme správný způsob přejmenování souborů v SVN, při kterém se zachovává historie a všechna případná metadata.

Přejmenování souboru "file2.txt" aneb TAKTO NE!

Při přejmenování souboru je třeba commitovat nadřízenou složku:

Zapsat poznámku k přejmenování.

Zaškrtnout "Select / deselect all"

(Hodnoty ve sloupci "Text status" /file2.txt - missing, file2-renamed-wrong.txt - non-versioned/ dávají tušit, že něco není v pořádku)

Stavová ikona ukazuje, že pracovní kopie nadřízené složky je po commitu v synchronizaci s repository:

Nyní se pokusíme zobrazit historii přejmenovaného souboru:

OUHA - historie zmizela:

(seznam revizí v horní části okna "Log Messages" obsahuje pouze jednu položku)

 pro srovnání viz původní historie souboru file2.txt

Tímto nesprávným zásahem jsme tedy dosáhli toho, že soubor file2.txt má změněný název, nicméně za cenu kompletní ztráty historie.

To je v praxi nepřípustné! Historie souborů může obsahovat nesmírně cenné informace (třeba i cennější než jeho obsah).

(Jak to napravit, bych rád popsal v některém z dalších pokračování.)

Jak tedy přejmenovávat lépe?

Přejmenování souboru "file1.txt" aneb TAKTO ANO!

Jelikož SVN nemá žádný způsob, jak přejmenování souboru provedené na úrovni systému rozpoznat od situace, kdy původní soubor zmizí a objeví se zcela nový (s takříkajíc "čistým rejstříkem"),
je třeba pro přejmenování použít prostředky SVN samotného.

Jak na to:

Tortoise SVN
Příkazový řádek

Totéž - provedeno v příkazovém řádku:

D:\_projects\project1>svn rename file1.txt file1-renamed-right.txt
A    file1-renamed-right;.txt
D    file1.txt

D:\_projects\project1>cd ..

D:\_projects>svn ci -m "Renamed file1.txt to file1-renamed-right.txt" project1
Adding         project1\file1-renamed-right.txt
Deleting       project1\file1.txt

Committed revision 9.

D:\_projects>
Kontrola

Nyní pomocí logu zkontrolujeme výsledek přejmenování.

Je patrné, že historie souboru nezmizela.

Oproti "běžným" změnám viditelným v logu jsou zde zajímavé hodnoty ve sloupcích "Copy from path" a "Revision".

Závěr

Zachování historie u verzovaných souborů je velmi důležité.

Přejmenování souboru je jednou z akcí, která tuto historii může "rozbít", není-li provedena správným způsobem.

Správný způsob přejmenování souboru je použitím nástrojů Subversion - ať již GUI klienta Tortoise SVN nebo klienta pro příkazový řádek.

Příště (plánováno)

Obnova smazaných nebo chybně přejmenovaných souborů a složek.

Tagy (labely).

Větvení.