SlideShare une entreprise Scribd logo
1  sur  13
Subversion (SVN)
Open source version control system
Въведение в SVN


    Какво е SVN?

    Предимства и особености:
    
        Централизирана структура
        (хранилище <-> локално копие)
    
        Удобен и достъпен backup
    
        Нищо не се трие завинаги
    
        Споделяне на код
    
        Преизползване на код
Working copy
• Какво представлява working copy?
• Каква meta информация съдържат .svn
  папките?
    – Референция към пътя на проекта в
      хранилището
    – Последна версия на файловете на
      проекта
• Важно - .svn папките
не се трият/променят!
Основни операции в 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-не до ревизия с
    конкретен номер.
Други операции
  • Core OS операции – имат своите SVN
    алтернативи (rename, delete).
  • Revert – необратим процес, съдържанието на
    файловете и директориите се връща до
    последната версия. Връщат се и всички SVN
    properties и се премахват конфликтите. Може
    да се върне до ревизия с конкретен номер.
  • Diff – показва всички разлики както между два
    селектирани файла, така и разликите между
    сегашната и предишната версия.
  • Export – експортва цялата директория,
    премахвайки всички .svn папки.
SVN Properties

    Какво представляват и как се използват SVN properties?

    svn:ignore
     
            Същност и приложение
     
            Примери:
          
               * - игнорира всичко.
          
               tmp – игнорира директорията tmp.
          
               tmp* - игнорира и всички файлове, започващи с
               tmp.
          
               *.jpg – игнорира всички jpg файлове.
     
            Защо се налага да използваме svn:ignore?
Trac
• Какво е trac?
• Как работи trac със SVN?
• Какво предоставя trac:
   – Разглеждане на дървото с проекти и кода
   – Търсене в съобщенията на ревизиите
   – Разглеждане на revision history
   – Подробен преглед на разликите между две
     ревизии
   – Позволява споделяне на фрагменти код чрез
     per file/dir, per revision & per line линкове
   – Сваляне на версии на файловете, или unified
     diff/zip archive.
SVN Conflicts

    Какво представляват конфликтите?

    Как и защо възникват?

    <<<<<<<< .mine?

    Варианти за разрешаване:
    
         Revert – връща избрания файл или
         директория до последна ревизия, но
         изтрива всички направени промени.
    
         Resolved – извиква се след ръчно
         отстраняване на конфликта.

    Как да избегнем възникването на
    конфликти?
Практическо приложение
•   Работа на повече от един разработчици по един
    проект едновременно.
•   Мерки по отстраняване на проблеми, свързани с
    неконсистентни версии на проекти (в случай че
    клиентът е правил промени отделно от
    разработчиците).
•   Diff между различни версии на даден файл.
•   История на промените в рамките на даден път от
    хранилището, задаване на обсег от ревизии, в
    който да се покаже историята.
Съвети и често допускани грешки

         
             Как да избегнем празните редове в diff-овете –
             използване на n
         
              Качване на клиентски сървър – svn export или
             FTP filename filters
         
             Не трябва да се копират цели папки, които са под
             SVN
         
              Проекти, качени на клиентски сървъри – винаги
             трябва да се свалят последните версии и да се
             commit-ват.
         
              При commit ВИНАГИ трябва да се пише съобщение,
             съдържащо промените, които са направени в тази
             ревизия. Най-добре е съобщението да обединява
             промените по логически и функционален начин.
         
             Съобщенията в tasks.2c-studio.com и SVN са
             различни по същност.
Пример от практиката


    Работим по WP тема, приключваме и пращаме архив на клиента.

    Той инсталира темата сам и след няколко месеца ни пише че има проблем с
    кода. Дава ни FTP достъп.

     Правим промените по кода (този, който имаме от преди няколко месеца) и
    започваме да качваме при него. В последствие се разбира, че клиента е
    направил множество промени по кода.

    Проблемът може да се реши по 3 начина:
     1)   Правим промените върху неговия код (много бавно)
     2)   Гледайки diff с промените, които сме направили днес, правим
          промените върху неговия код (бавно)
     3)   Checkout-ваме кода от хранилището (от версията, която сме дали на
          клиента) в друга папка. Слагаме клиентските файлове върху старата
          ревизия и правим svn update (до последната ревизия). Отстраняваме
          евентуалните конфликти. (сложно, но бързо)
Заключение
•   SVN е система с огромно приложение в разработването
    на всякакъв вид приложения.
•   Правилното използване на SVN може да спести
    многобройни часове, прекарани в отстраняване на
    проблеми с версиите, обмен на данни или търсене на
    вече написан код.
•   Всичко, което се случва в SVN има
    своето логично обяснение и
    има причина да се случва.
•   Ако нещо не работи както очаквате,
    разберете каква е причината –
    SVN е документиран подробно.
Further reading:
http://svnbook.red-bean.com/en/1.7/index.html

Contenu connexe

Similaire à SVN

Svetlin Nakov - Configuration Management
Svetlin Nakov - Configuration ManagementSvetlin Nakov - Configuration Management
Svetlin Nakov - Configuration ManagementSvetlin Nakov
 
[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with JenkinsBorislav Traykov
 
Lotus Domino Admin Blast: LCTY 2011
Lotus Domino Admin Blast: LCTY 2011Lotus Domino Admin Blast: LCTY 2011
Lotus Domino Admin Blast: LCTY 2011IBS Bulgaria
 
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...Yosifov
 
Acceptance testing with Selenium 2 and PHPUnit
Acceptance testing with Selenium 2 and PHPUnitAcceptance testing with Selenium 2 and PHPUnit
Acceptance testing with Selenium 2 and PHPUnitBisser Todorov
 
Linux обновления с RAUC и Docker
Linux обновления с RAUC и DockerLinux обновления с RAUC и Docker
Linux обновления с RAUC и DockerLeon Anavi
 
FABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin NakovFABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin NakovSvetlin Nakov
 
[Verbose Bulgarian]joys and-woes_of_using_postman
[Verbose Bulgarian]joys and-woes_of_using_postman[Verbose Bulgarian]joys and-woes_of_using_postman
[Verbose Bulgarian]joys and-woes_of_using_postmanBorislav Traykov
 
Minimal linux live
Minimal linux liveMinimal linux live
Minimal linux liveIvan Davidov
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
JBuilder 4.0 - New Features
JBuilder 4.0 - New FeaturesJBuilder 4.0 - New Features
JBuilder 4.0 - New FeaturesSvetlin Nakov
 
Sdn nfv мрежова виртуализация
Sdn nfv мрежова виртуализацияSdn nfv мрежова виртуализация
Sdn nfv мрежова виртуализацияmartin.ivanov
 
Continuous integration (d.atanasov)
Continuous integration (d.atanasov)Continuous integration (d.atanasov)
Continuous integration (d.atanasov)Deyan Atanasov
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13DAVID Academy
 
Презентация Фатих
Презентация ФатихПрезентация Фатих
Презентация ФатихFatih Dmrl
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code IntroductionSvetlin Nakov
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality CodeSvetlin Nakov
 

Similaire à SVN (20)

Svetlin Nakov - Configuration Management
Svetlin Nakov - Configuration ManagementSvetlin Nakov - Configuration Management
Svetlin Nakov - Configuration Management
 
[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins
 
Lotus Domino Admin Blast: LCTY 2011
Lotus Domino Admin Blast: LCTY 2011Lotus Domino Admin Blast: LCTY 2011
Lotus Domino Admin Blast: LCTY 2011
 
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
 
Acceptance testing with Selenium 2 and PHPUnit
Acceptance testing with Selenium 2 and PHPUnitAcceptance testing with Selenium 2 and PHPUnit
Acceptance testing with Selenium 2 and PHPUnit
 
Linux обновления с RAUC и Docker
Linux обновления с RAUC и DockerLinux обновления с RAUC и Docker
Linux обновления с RAUC и Docker
 
FABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin NakovFABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin Nakov
 
[Verbose Bulgarian]joys and-woes_of_using_postman
[Verbose Bulgarian]joys and-woes_of_using_postman[Verbose Bulgarian]joys and-woes_of_using_postman
[Verbose Bulgarian]joys and-woes_of_using_postman
 
Minimal linux live
Minimal linux liveMinimal linux live
Minimal linux live
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
JBuilder 4.0 - New Features
JBuilder 4.0 - New FeaturesJBuilder 4.0 - New Features
JBuilder 4.0 - New Features
 
Sdn nfv мрежова виртуализация
Sdn nfv мрежова виртуализацияSdn nfv мрежова виртуализация
Sdn nfv мрежова виртуализация
 
Continuous integration (d.atanasov)
Continuous integration (d.atanasov)Continuous integration (d.atanasov)
Continuous integration (d.atanasov)
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13
 
Презентация Фатих
Презентация ФатихПрезентация Фатих
Презентация Фатих
 
Cross compiling
Cross compilingCross compiling
Cross compiling
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
 

SVN

  • 1. Subversion (SVN) Open source version control system
  • 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 е документиран подробно.