opensource софтуерни хранилища

22
Opensource софтуерни Opensource софтуерни хранилища хранилища Георги Пенков Българска асоциация на разработчиците на софтуер www.devbg.or g CVS - Concurent Versioning CVS - Concurent Versioning System System

Upload: sileas

Post on 25-Jan-2016

38 views

Category:

Documents


0 download

DESCRIPTION

Георги Пенков. Българска асоциация на разработчиците на софтуер. www.devbg.org. Opensource софтуерни хранилища. CVS - Concurent Versioning System. Въведение. SVN – Subversion Появява се през 2000г. Сред дизайнерите е и авторът на книгата ”Open Source Development with CVS” - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Opensource софтуерни хранилища

Opensource софтуерни Opensource софтуерни хранилищахранилища

Георги ПенковБългарска асоциация на разработчиците на софтуер

www.devbg.org

CVS - Concurent Versioning SystemCVS - Concurent Versioning System

Page 2: Opensource софтуерни хранилища

ВъведениеВъведение

● SVN – SubversionSVN – Subversion● Появява се през 2000г. Появява се през 2000г. ● Сред дизайнерите е и авторът на книгата Сред дизайнерите е и авторът на книгата

”Open Source Development with CVS””Open Source Development with CVS”● Създаден с цел:Създаден с цел:

● да прилича на CVSда прилича на CVS● да избегне ограниченията на CVSда избегне ограниченията на CVS

● Резултатът е мощна, лесна за използване и Резултатът е мощна, лесна за използване и гъвкава система за софтуерно хранилищегъвкава система за софтуерно хранилище

Page 3: Opensource софтуерни хранилища

Subversion предоставяSubversion предоставя

• История (versioning) на директорийната структура

• Пълна история на всички промени

• изтриване на файлове и директории

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

• заменяне на файлове и директории

• Може да работи както самостоятелно, така и интегриран с Apache като модул

• Алгоритъмът за запазване на разликите между ревизиите работи еднакво добре с текстови и двоични файлове

• Файловете се съхраняват компресирани в хранилището

• Работи ефективно с разклонения(branches) и етикети(tag)

Page 4: Opensource софтуерни хранилища

Принципно устройство на SVNПринципно устройство на SVN

Page 5: Opensource софтуерни хранилища

Програмно обкръжение на SVNПрограмно обкръжение на SVN

● svn svn – инструмент за достъп от командния ред– инструмент за достъп от командния ред

● svnversion svnversion – програма, която дава информация за – програма, която дава информация за състоянието (в смисъл на ревизии и т.н.) на работното състоянието (в смисъл на ревизии и т.н.) на работното копие.копие.

● svnlook svnlook – инструмент за преглед на Subversion хранилището– инструмент за преглед на Subversion хранилището

● svnadmin svnadmin – инструмент за администрация на хранилището– инструмент за администрация на хранилището

● svndumpfilter svndumpfilter – инструмет за създаване на dump-ове на – инструмет за създаване на dump-ове на хранилищетохранилището

● mod_dav_svn mod_dav_svn – модул за Apache HTTP Server, който прави – модул за Apache HTTP Server, който прави хранилището достъпно през webхранилището достъпно през web

● svnserve svnserve – самостоятелно сървърно приложение, което – самостоятелно сървърно приложение, което може да работи както отделно, така и в комбинация със SSHможе да работи както отделно, така и в комбинация със SSH

Page 6: Opensource софтуерни хранилища

Създаване на хранилищеСъздаване на хранилище

● С помоща на командата С помоща на командата createcreate

• В SVN понятието project не съществуваВ SVN понятието project не съществува

• Хранилището е просто едно голямо файлово Хранилището е просто едно голямо файлово дърво, за което се пази пълна история на дърво, за което се пази пълна история на променитепромените

$ svnadmin create /path/to/repos$ svnadmin create /path/to/repos

$ ls /path/to/repos$ ls /path/to/repos

conf/ dav/ db/ format hooks/ locks/ README.txtconf/ dav/ db/ format hooks/ locks/ README.txt

Page 7: Opensource софтуерни хранилища

Въвеждане на проект в хранилищетоВъвеждане на проект в хранилището

● Препоръчителен формат на директорията на проекта Препоръчителен формат на директорията на проекта преди импорт:преди импорт:

● Формат на командата за импорт:Формат на командата за импорт:

/tmp/myproject/branches//tmp/myproject/branches/

/tmp/myproject/tags//tmp/myproject/tags/

/tmp/myproject/trunk//tmp/myproject/trunk/

foo.cfoo.c

bar.cbar.c

MakefileMakefile

……

svn import /tmp/myproject file:///path/to/repos/myproject/trunk -m "initial import"svn import /tmp/myproject file:///path/to/repos/myproject/trunk -m "initial import"

Page 8: Opensource софтуерни хранилища

Създаване на локално копиеСъздаване на локално копие

● С помоща на командата С помоща на командата checkout:checkout:

● Пътя до хранилището е винаги URLПътя до хранилището е винаги URL

$ svn checkout file:///path/to/repos/myproject/trunk myproject$ svn checkout file:///path/to/repos/myproject/trunk myproject

A myproject/foo.cA myproject/foo.c

A myproject/bar.cA myproject/bar.c

A myproject/MakefileA myproject/Makefile

……

Checked out revision 1.Checked out revision 1.

Page 9: Opensource софтуерни хранилища

Запазване на промените. CommitЗапазване на промените. Commit

● Подобно на CVS със командата Подобно на CVS със командата commitcommit

● Всички commit операции са атомарниВсички commit операции са атомарни

● За разлика от CVS ревизиите са общи за дървото на За разлика от CVS ревизиите са общи за дървото на

проектапроекта

● Номерът на ревизиятаНомерът на ревизията

идентифицира цялотоидентифицира цялото

дърво в даден моментдърво в даден момент

от разработкатаот разработката

Page 10: Opensource софтуерни хранилища

Ревизии в SVNРевизии в SVN

● Въпреки, че в хранилището версията е за цялото Въпреки, че в хранилището версията е за цялото дърво, в локалното копие може да има файлове с дърво, в локалното копие може да има файлове с различни ревизииразлични ревизии

● Операция commit почти винаги създава локално копие с Операция commit почти винаги създава локално копие с различни ревизии на файловетеразлични ревизии на файловете

● Файловете, които са били запазени при последния Файловете, които са били запазени при последния commit в хранилището, са с най-висок номер на ревизия commit в хранилището, са с най-висок номер на ревизия спрямо останалите в локалното копиеспрямо останалите в локалното копие

● Файловете от локалното копие ще придобият една Файловете от локалното копие ще придобият една обща ревизия при следващия updateобща ревизия при следващия update

● С други думи – commit и update са абсолютно С други думи – commit и update са абсолютно независими операциинезависими операции

Page 11: Opensource софтуерни хранилища

Ревизии в SVN. ПримерРевизии в SVN. Пример

● Локалното копие може да съдържа файлове с различна Локалното копие може да съдържа файлове с различна ревизия след нанасяне на промени:ревизия след нанасяне на промени:

● Ако друг програмист промени междувременно някой Ако друг програмист промени междувременно някой файл, след файл, след update update ревизиите ще изглеждат така:ревизиите ще изглеждат така:

calc/Makefile:4calc/Makefile:4

integer.c:4integer.c:4

button.c:5button.c:5

calc/Makefile:6calc/Makefile:6

integer.c:6integer.c:6

button.c:6button.c:6

Page 12: Opensource софтуерни хранилища

Преглед на информация за ревизиитеПреглед на информация за ревизиите

● С помоща на ”С помоща на ”svn status –verbose” получаваме информация за svn status –verbose” получаваме информация за

ревизията на локалното копие и отделните ревизии на файловете.ревизията на локалното копие и отделните ревизии на файловете.

● Допълнително ”svn –show-updates” ни показва кой файл има нужда Допълнително ”svn –show-updates” ни показва кой файл има нужда

от update:от update:

● С помоща на ”svn log” може да получаваме история на ревизиите С помоща на ”svn log” може да получаваме история на ревизиите

както общо за локално копие, така и само за даден файл:както общо за локално копие, така и само за даден файл:

3 3 user .3 3 user .

5 5 user new.txt5 5 user new.txt

M 3 2 user README.txtM 3 2 user README.txt

------------------------------------------------------------------------------------------------------------------------------------------------

r2 | user | 2006-09-21 17:13:00 +0300 (Thu, 21 Sep 2006) | 1 liner2 | user | 2006-09-21 17:13:00 +0300 (Thu, 21 Sep 2006) | 1 line

some commitsome commit

Page 13: Opensource софтуерни хранилища

Ключови думи за ревизииКлючови думи за ревизии

● SVN поддържа специални ключови думи за SVN поддържа специални ключови думи за обозначаване на някои ”специални” ревизии:обозначаване на някои ”специални” ревизии:

● HEAD – най-новата ревизия в хранилищетоHEAD – най-новата ревизия в хранилището● BASE – ревизията, която е имало локалното копие BASE – ревизията, която е имало локалното копие

преди нанасяне на променипреди нанасяне на промени● COMMITED – номер на ревизията при последното COMMITED – номер на ревизията при последното

съхранение в хранилището. Равна или по-малка съхранение в хранилището. Равна или по-малка от BASEот BASE

● PREV – номер на предната ревизия преди тази, PREV – номер на предната ревизия преди тази, която е била съхранена при последния commitкоято е била съхранена при последния commit

● За да бъдат използвани с подава параметър --За да бъдат използвани с подава параметър --revisionrevision

● При работа с нелокално URL може да се ползва само При работа с нелокално URL може да се ползва само HEAD HEAD

Page 14: Opensource софтуерни хранилища

Операция update и статусиОперация update и статуси

● Операция update работи по начин подобен на този при Операция update работи по начин подобен на този при CVS като SVN ни известява за резултата със следните CVS като SVN ни известява за резултата със следните статуси:статуси:

● U foo – файл foo е бил променен (с промени от U foo – файл foo е бил променен (с промени от хранилището).хранилището).

● A foo – файл или директория foo са били добавени в A foo – файл или директория foo са били добавени в работно копие.работно копие.

● D foo – файл или директория foo са били изтрити.D foo – файл или директория foo са били изтрити.● R foo – файл или директория foo е бил заменен с друг R foo – файл или директория foo е бил заменен с друг

такъв със същото име.такъв със същото име.● G foo – файл foo е получил промени от хранилището, но G foo – файл foo е получил промени от хранилището, но

локалното копие е било също променено. Или промените локалното копие е било също променено. Или промените не са се засичали, или са били същите като локалното не са се засичали, или са били същите като локалното копие.копие.

● C foo – има конфликт с файла foo. Той трябва да бъде C foo – има конфликт с файла foo. Той трябва да бъде разрешен ръчно.разрешен ръчно.

Page 15: Opensource софтуерни хранилища

Разрешаване на конфликтиРазрешаване на конфликти

● Ако конфликтът е в текстов файл, SVN поставя маркери Ако конфликтът е в текстов файл, SVN поставя маркери около конфликтните части.около конфликтните части.

● Допълнително SVN създава няколко допълнителни Допълнително SVN създава няколко допълнителни файла със специални разширения:файла със специални разширения:

● filename.mine – това е локалното копие на файла, по начина по filename.mine – това е локалното копие на файла, по начина по който е изглеждал преди да бъде извършена операция updateкойто е изглеждал преди да бъде извършена операция update

● filename.rOLDREV – това е файла с BASE ревизията, т.е. filename.rOLDREV – това е файла с BASE ревизията, т.е. файла който е бил изтеглен от хранилището преди нанасяне файла който е бил изтеглен от хранилището преди нанасяне на применина примени

● fename.rNEWREV – това е варианта с HEAD ревизия, който fename.rNEWREV – това е варианта с HEAD ревизия, който отговаря на най-новата ревизия от хранилището.отговаря на най-новата ревизия от хранилището.

● Commit не е възможен, ако допълнителните файлове Commit не е възможен, ако допълнителните файлове са налични и докато не бъде изпълнена команда са налични и докато не бъде изпълнена команда resolved - ”svn resolved conflicted.file.ext”resolved - ”svn resolved conflicted.file.ext”

Page 16: Opensource софтуерни хранилища

Преглед на файловеПреглед на файлове

● Команда Команда list – позволява преглед на list – позволява преглед на списъка на файловете от дадена директория списъка на файловете от дадена директория в хранилището, без да бъдат изтеглянив хранилището, без да бъдат изтегляни

● Параметър -v за повече информацияПараметър -v за повече информация● Команда cat – позволява лесно преглеждане Команда cat – позволява лесно преглеждане

на съдържанието на даден файлна съдържанието на даден файл● В комбинация с --revision параметър, cat и В комбинация с --revision параметър, cat и

list дават възможност за преглеждане на list дават възможност за преглеждане на точно определена ревизия на дадения файлточно определена ревизия на дадения файл

Page 17: Opensource софтуерни хранилища

РазклоненияРазклонения

● Разклоненията в SVN се реализират, като се копира Разклоненията в SVN се реализират, като се копира директорията, която искаме да разклоним.директорията, която искаме да разклоним.

● Копиране на файлове и директории в хранилището Копиране на файлове и директории в хранилището става с команда copy.става с команда copy.

● След използвне на copy трябва да отразим промените с След използвне на copy трябва да отразим промените с commit:commit:

host$ svn copy trunk branches/my-calc-branchhost$ svn copy trunk branches/my-calc-branch

host$ svn statushost$ svn status

A + branches/some_branchA + branches/some_branch

$ svn commit $ svn commit

Adding branches/some_branchAdding branches/some_branch

Adding branches/some_branch/file.txtAdding branches/some_branch/file.txt

......

Page 18: Opensource софтуерни хранилища

Ефект върху хранилищетоЕфект върху хранилището

● При операция copy не се прави директно копие на цялото дърво.

● Използва се подход подобен на създаването на hard-link.

● Реално нарастване на хранилището ще има едва след нанасяне на промени върху даден файл от разклонението

● Методът често се нарича ”cheap copies”

Page 19: Opensource софтуерни хранилища

СливанеСливане

● Операцията сливане е много подобна на diffОперацията сливане е много подобна на diff● Разликите между сравнявание версии обаче се Разликите между сравнявание версии обаче се

сливат директно в работното копие:сливат директно в работното копие:

● За разлика от diff, merge очаква път до мястото, За разлика от diff, merge очаква път до мястото, където да бъде записано слятото копие.където да бъде записано слятото копие.

$ svn merge -r 343:344 $ svn merge -r 343:344

http://svn.example.com/repos/calc/trunkhttp://svn.example.com/repos/calc/trunk

U integer.cU integer.c

$ svn status$ svn status

M integer.cM integer.c

Page 20: Opensource софтуерни хранилища

Архивни копия със svnadminАрхивни копия със svnadmin

● Сваляне на архивно копие (dump):Сваляне на архивно копие (dump):

● Възстановяване на архивно копие (load)Възстановяване на архивно копие (load)

host$ svnadmin dump /path/to/repos > repos-dumpfilehost$ svnadmin dump /path/to/repos > repos-dumpfile

host$ svnadmin load /usr/local/svn/restored < repos-backuphost$ svnadmin load /usr/local/svn/restored < repos-backup

<<< Started new txn, based on original revision 1<<< Started new txn, based on original revision 1

* adding path : test ... done.* adding path : test ... done.

* adding path : test/a ... done.* adding path : test/a ... done.

……

Page 21: Opensource софтуерни хранилища

Други възможностиДруги възможности

● Hook Scripts – тригери при някои основни Hook Scripts – тригери при някои основни операцииоперации

● PropertiesProperties

● svnserve – самостоятелен сървър.svnserve – самостоятелен сървър.● метод за достъп svn://метод за достъп svn://● метод за достъп ssh+svn://метод за достъп ssh+svn://

● Apache 2.0 WebDAV модулApache 2.0 WebDAV модул

host$ svn propset propname 'property content' path/to/file.exthost$ svn propset propname 'property content' path/to/file.ext

host$ svn checkout http://host.example.com:7382/repos/projecthost$ svn checkout http://host.example.com:7382/repos/project

Page 22: Opensource софтуерни хранилища

ЗаключениеЗаключение

Въпроси и коментари ?