Subsections

Бързи инструкции за SVN

Работата със SVN е подробно описана в документацията на http://svnbook.red-bean.com. Ако не искате да се задълбочавате чак толкова, тук са представени основните понятия и действия при работата със SVN. Имайте предивид, че командите много наподобяват на тези на CVS, така, че ще ви е лесно ако сте имали опит с тази система.

За да направите каквато и да е промяна, трябва да имате работно копие на книгата. Преди всяка промяна синхронизирате работното копие със SVN-хранилището:

$ svn up

Извършвате промяната и записвате промените и в SVN хранилището:

$ svn commit -m 'описание на промените' file1 path/to/file2

LATEX файловете се намират в директорията src. Ако имената на файловете не са достатъчни, за да ви орентират кой какво съдържа, погледнете във файла debian-book.tex.

След като свършите с промените, трябва да се обнови и файла ChangeLog. Използвайте скрипта changelog.up, намиращ се в главната директория debian-book. За да го използвате обаче, трябва да имате инсталирани пакетите cvs2cl и txt2html.

Добавяне на файлове

Добавянето на файлове се извършва посредством две стъпки: Първо стартирате командата add, а след това - commit. Файлът няма да се появи в хранилището, докато не се изпълни commit:

$ svn add newfile.c
$ svn ci -m "added newfile.c" newfile.c

Добавяне на директории

За разлика от добавянето на файл, добавянето на нова директория се извършва посредством една стъпка; не е нужно да изпълнявате commit след това:

$ mkdir subdir
$ svn add subdir

Премахване на файлове

Премахването на файл е подобна на добавянето:

$ rm newfile.c
$ svn remove newfile.c
$ svn ci newfile.c

% $ -- затваряне на долара във verbatim

Забележете, че във втората и третата команда изрично именуваме \texttt{newfile.c},
въпреки че не съществува вече в работното копие. Разбира се, при commit
не е задължително да именувате файла, стига да нямате нищо против commit
да включи всички други промени, които са се състояли в работното копие.

\subsection{Премахване на директории}

SVN за разлика от CVS поддържа контрол на версиите (version control) на директории.
Директориите в SVN хренилището могат да бъдат трити, преименувани, копирани дори и 
рекурсивно:

\begin{verbatim}
$ cd dir
$ rm file1 file2 file3
$ svn remove file1 file2 file3
(output omitted)
$ svn ci -m "removed all files" file1 file2 file3
(output omitted)

Преименуване на файлове и директории

Преименуването на файл е еквивалентно на създаването му под ново име и премахването му под старото. Под Unix командите са:

$ cp oldname newname
$ rm oldname

Ето еквивалента при CVS:

$ mv oldname newname
$ cvs remove oldname
(output omitted)
$ cvs add newname
(output omitted)
$ cvs ci -m "renamed oldname to newname" oldname newname
(output omitted)
$

Ето еквивалента при SVN:

$ svn move file1 file2

SVN разполага с команди за copy, delete, move, за повече информация изпълнете:

$ svn help move
$ svn help copy
$ svn help delete

Относно файловете - това е всичко. Преименуването на директории е аналогично.

SVN и бинарните файлове

SVN управлява binary files доста по-интелигентно отколкото CVS прави това. Поради това, че CVS използва RCS, той може да съхранява успешно пълни копия на променения файл. Но вътрешно SVN прави разлика между файловете използвайки binary-differencing алгоритъм, независимо дали те съдържат текстови (textual) или двоични (binary) данни. Това означава, че всички файлове се съхраняват диференцирано (компресирани) в хранилището и малки разлики винаги се изпращат по мрежата (от клиента към сървъра).

При CVS двоични (binary) файлове трябва да се маркират с флаг -kb за да се предотврати модификацията върху тях. Обаче това понякога доста лесно за забравя.

SVN притежава по-параноичен подход:

Първо, никога не изпълнява какъвто и да е вид keyword или line-ending translation докато изрично не му се укаже.

По подразбиране, SVN третира всички файлове като literal byte strings и файловете винаги се съхраняват в хранилището като untranslated state.

Второ, SVN поддържа вътрешно информацията дали файла е текстови или бинарен (text или binary data), но тази информация е налична само в работното копие. При изпълнение на svn update, SVN ще направи contextual merges върху модифицираните локално текстови файлове, но няма да се опита да направи това за двоичните файлове.

За да определи дали contextual merge е възможен, SVN изследва svn:mime-type информацията. Ако файла няма такава svn:mime-type или има mime-type който е текстови (например text/*), то се приема, че това е текст. В противен случай, се приема, че файла е двоичен (binary).

SVN също така използва binary-detection алгоритъм при svn import и svn add командите. Тези команди ще направят опит за правилно опознаване и евентуално ще поставят svn:mime-type за двоичен файл при добавянето на му. Ако SVN направи грешно разпознаване, то потребителя винаги може да премахне или постави сам тази информация.

Преди да комитвате в SVN хранилището, проверявайте дали кодът се компилира при вас, винаги тествайте с PDF.


George Danchev 2004-12-25