2. Въведение в SVN
Какво е SVN?
Предимства и особености:
Централизирана структура
(хранилище <-> локално копие)
Удобен и достъпен backup
Нищо не се трие завинаги
Споделяне на код
Преизползване на код
3. Working copy
• Какво представлява working copy?
• Каква meta информация съдържат .svn
папките?
– Референция към пътя на проекта в
хранилището
– Последна версия на файловете на
проекта
• Важно - .svn папките
не се трият/променят!
4. Основни операции в SVN
Checkout – създава working copy на съответния път
от хранилището. Може да се checkout-не специфична
ревизия на проекта, като по подразбиране се взима последната.
Add – добавя файлове и директории към working copy, подготвя ги за
добавяне към хранилището. Това създава първата версия файла или
директорията.
Commit – изпраща промените на working copy към хранилището,
създавайки ревизия. За промени се считат и файлове/директории, които
са изтрити, преименувани, липсващи или добавени чрез Add.
Препоръчва се да се въвежда commit message.
Update – прилага промените от хранилището върху working copy.
Извършва Add (A), Delete (D), Update (U), Merge (G) или задава
конфликтно състояние Conflict (C). Може да се update-не до ревизия с
конкретен номер.
5. Други операции
• Core OS операции – имат своите SVN
алтернативи (rename, delete).
• Revert – необратим процес, съдържанието на
файловете и директориите се връща до
последната версия. Връщат се и всички SVN
properties и се премахват конфликтите. Може
да се върне до ревизия с конкретен номер.
• Diff – показва всички разлики както между два
селектирани файла, така и разликите между
сегашната и предишната версия.
• Export – експортва цялата директория,
премахвайки всички .svn папки.
6. SVN Properties
Какво представляват и как се използват SVN properties?
svn:ignore
Същност и приложение
Примери:
* - игнорира всичко.
tmp – игнорира директорията tmp.
tmp* - игнорира и всички файлове, започващи с
tmp.
*.jpg – игнорира всички jpg файлове.
Защо се налага да използваме svn:ignore?
7. Trac
• Какво е trac?
• Как работи trac със SVN?
• Какво предоставя trac:
– Разглеждане на дървото с проекти и кода
– Търсене в съобщенията на ревизиите
– Разглеждане на revision history
– Подробен преглед на разликите между две
ревизии
– Позволява споделяне на фрагменти код чрез
per file/dir, per revision & per line линкове
– Сваляне на версии на файловете, или unified
diff/zip archive.
8. SVN Conflicts
Какво представляват конфликтите?
Как и защо възникват?
<<<<<<<< .mine?
Варианти за разрешаване:
Revert – връща избрания файл или
директория до последна ревизия, но
изтрива всички направени промени.
Resolved – извиква се след ръчно
отстраняване на конфликта.
Как да избегнем възникването на
конфликти?
9. Практическо приложение
• Работа на повече от един разработчици по един
проект едновременно.
• Мерки по отстраняване на проблеми, свързани с
неконсистентни версии на проекти (в случай че
клиентът е правил промени отделно от
разработчиците).
• Diff между различни версии на даден файл.
• История на промените в рамките на даден път от
хранилището, задаване на обсег от ревизии, в
който да се покаже историята.
10. Съвети и често допускани грешки
Как да избегнем празните редове в diff-овете –
използване на n
Качване на клиентски сървър – svn export или
FTP filename filters
Не трябва да се копират цели папки, които са под
SVN
Проекти, качени на клиентски сървъри – винаги
трябва да се свалят последните версии и да се
commit-ват.
При commit ВИНАГИ трябва да се пише съобщение,
съдържащо промените, които са направени в тази
ревизия. Най-добре е съобщението да обединява
промените по логически и функционален начин.
Съобщенията в tasks.2c-studio.com и SVN са
различни по същност.
11. Пример от практиката
Работим по WP тема, приключваме и пращаме архив на клиента.
Той инсталира темата сам и след няколко месеца ни пише че има проблем с
кода. Дава ни FTP достъп.
Правим промените по кода (този, който имаме от преди няколко месеца) и
започваме да качваме при него. В последствие се разбира, че клиента е
направил множество промени по кода.
Проблемът може да се реши по 3 начина:
1) Правим промените върху неговия код (много бавно)
2) Гледайки diff с промените, които сме направили днес, правим
промените върху неговия код (бавно)
3) Checkout-ваме кода от хранилището (от версията, която сме дали на
клиента) в друга папка. Слагаме клиентските файлове върху старата
ревизия и правим svn update (до последната ревизия). Отстраняваме
евентуалните конфликти. (сложно, но бързо)
12. Заключение
• SVN е система с огромно приложение в разработването
на всякакъв вид приложения.
• Правилното използване на SVN може да спести
многобройни часове, прекарани в отстраняване на
проблеми с версиите, обмен на данни или търсене на
вече написан код.
• Всичко, което се случва в SVN има
своето логично обяснение и
има причина да се случва.
• Ако нещо не работи както очаквате,
разберете каква е причината –
SVN е документиран подробно.