Opensource
This presentation is the property of its rightful owner.
Sponsored Links
1 / 22

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


  • 71 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Opensource

Георги Пенков

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

www.devbg.org

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

CVS - Concurent Versioning System


Opensource

Въведение

SVN – Subversion

Появява се през 2000г.

Сред дизайнерите е и авторът на книгата ”Open Source Development with CVS”

Създаден с цел:

да прилича на CVS

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

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


Subversion

Subversion предоставя

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

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

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

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

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

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

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

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

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


Opensource

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


Opensource

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

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

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

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

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

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

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

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


Opensource

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

С помоща на командата create

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

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

$ svnadmin create /path/to/repos

$ ls /path/to/repos

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


Opensource

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

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

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

/tmp/myproject/branches/

/tmp/myproject/tags/

/tmp/myproject/trunk/

foo.c

bar.c

Makefile

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


Opensource

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

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

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

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

A myproject/foo.c

A myproject/bar.c

A myproject/Makefile

Checked out revision 1.


Commit

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

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

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

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

Номерът на ревизиятаидентифицира цялотодърво в даден моментот разработката


Opensource

Ревизии в SVN

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

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

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

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

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


Opensource

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

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

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

calc/Makefile:4

integer.c:4

button.c:5

calc/Makefile:6

integer.c:6

button.c:6


Opensource

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

С помоща на ”svn status –verbose” получаваме информация за ревизията на локалното копие и отделните ревизии на файловете.

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

С помоща на ”svn log” може да получаваме история на ревизиите както общо за локално копие, така и само за даден файл:

3 3 user .

5 5 user new.txt

M 3 2 user README.txt

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

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

some commit


Opensource

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

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

HEAD – най-новата ревизия в хранилището

BASE – ревизията, която е имало локалното копие преди нанасяне на промени

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

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

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

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


Update

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

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

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

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

D foo – файл или директория foo са били изтрити.

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

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

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


Opensource

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

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

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

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

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

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

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


Opensource

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

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

Параметър -v за повече информация

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

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


Opensource

Разклонения

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

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

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

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

host$ svn status

A + branches/some_branch

$ svn commit

Adding branches/some_branch

Adding branches/some_branch/file.txt

...


Opensource

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

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

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

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

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


Opensource

Сливане

Операцията сливане е много подобна на diff

Разликите между сравнявание версии обаче се сливат директно в работното копие:

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

$ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk

U integer.c

$ svn status

M integer.c


Svnadmin

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

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

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

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

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

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

* adding path : test ... done.

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


Opensource

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

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

Properties

svnserve – самостоятелен сървър.

метод за достъп svn://

метод за достъп ssh+svn://

Apache 2.0 WebDAV модул

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

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


Opensource

Заключение

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


  • Login