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

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

  1. $ svn up
Извършвате промяната и записвате промените и в SVN хранилището:
  1. $ svn commit -m `описание на промените` file1 path/to/file2

Добавяне на файлове
Добавянето на файлове се извършва посредством две стъпки: Първо стартирате командата add, а след това - commit. Файлът няма да се появи в хранилището, докато не се изпълни commit:
  1. $ svn add newfile.c
  2. $ svn ci -m "added newfile.c" newfile.c

Добавяне на директории
За разлика от добавянето на файл, добавянето на нова директория се извършва посредством една стъпка. Не е нужно да изпълнявате commit след това:
  1. $ mkdir subdir
  2. $ svn add subdir

Премахване на файлове
Премахването на файл е подобна на добавянето:
  1. $ rm newfile.c
  2. $ svn remove newfile.c
  3. $ svn ci newfile.c

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

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

  1. $ cd dir
  2. $ rm file1 file2 file3
  3. $ svn remove file1 file2 file3
  4.  
  5. $ svn ci -m "removed all files" file1 file2 file3

Преименуване на файлове и директории
Преименуването на файл е еквивалентно на създаването му под ново име и премахването му под старото. Под Unix командите са:
  1. $ cp oldname newname
  2. $ rm oldname
Ето еквивалента при CVS:
  1. $ mv oldname newname
  2. $ cvs remove oldname
  3. $ cvs add newname
  4. $ cvs ci -m "renamed oldname to newname" oldname newname
Ето еквивалента при SVN:
  1. $ svn move file1 file2
SVN разполага с команди за copy, delete, move, за повече информация изпълнете:
  1. $ svn help move
  2. $ svn help copy
  3. $ 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.

Георги Данчев - Книга за Debian GNU/Linux