SlideShare a Scribd company logo
1 of 37
Download to read offline
Переход на распределённую
систему контроля версий из



                      mvasilyev@intersog.com
Развитие систем контроля
версий
 1. Ручное копирование файлов
                   2012-02-01


                   2012-02-02


                   2012-02-03


2. Локальные системы контроля версий


                       Для каждого файла хранится исходное состояние и
 RCS                   список изменений


 SCCS
Системы контроля
версий клиент-сервер

Централизованые системы контроля версий

●CVS
●Subversion

●IBM Rational ClearCase

●MKS Integrity

●Perforce

●PVCS

●Microsoft Visual SourceSafe

●Microsoft Visual Studio Application Lifecycle Management
Работа с централизоваными
системами контроля версий




 ●Обмен файлами через центральный сервер
 ●История хранится на центральном сервере

 ●Клиентские компьютеры содержат только

 последнюю версию
Работа с централизоваными
системами контроля версий
Контроль одновременного доступа к файлам




Блокирование файлов на запись исключает конфликты, но уменьшает
возможности одновременного редактирования
Работа с централизоваными
системами контроля версий
Одновременное редактирование файла




                    ?

 Приводит к конфликтам и необходимости их разрешения вручную
Работа с ветками в
Subversion
  При слиянии веток не используется история версий
        1       3       5       7
trunk


            2       4       6
  bug1234




  Центральный сервер – слабое место
Распределённые системы
контроля версий

 ●Git
 ●Mercurial

 ●Bazaar

 ●Darcs

 ●SVK

 ●Bit Keeper




 Каждый компьютер содержит копию репозитория
Почему я выбрал
Git ?
1. Кроссплатформенность
     Linux      Windows     Mac OS X

2. Наличие удобных инструментов
Почему я выбрал
Git ?
3. Скорость работы
  - Большая часть операций выполняется локально;
  - Скорость операций высокая;
  - Данные хранятся компактно (последняя версия + разница в сжатом виде;
  - Эффективно работает даже с бинарными файлами.

4. Распространённость
Git

                 Контекстно-адресуемая файловая система с
                 интерфейсом для системы контроля версий

                   Хранилище ключ-значение




      Подготовка к работе с Git
 git config --global user.email "you@example.com"
 git config --global user.name "Your Name"
Начало работы с Git

 Инициализация нового репозитория
~/project$ git init
Initialized empty Git repository in ~/project/.git/
~/project$ git add *.java
~/project$ git add *.txt
~/project$ git commit -m "initial version"
[master (root-commit) e39cac5] initial version
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 main.java
 create mode 100644 readme.txt

 Клонирование существующего репозитория
/tmp$ git clone https://github.com/github/git git-src
Initialized empty Git repository in /tmp/git-src/.git/
remote: Counting objects: 112488, done.
remote: Compressing objects: 100% (36088/36088), done.
remote: Total 112488 (delta 82161), reused 104459 (delta 74813)
Receiving objects: 100% (112488/112488), 23.52 MiB | 747 KiB/s, done.
Resolving deltas: 100% (82161/82161), done.
Жизненный цикл файлов в
Git

3 состояния файлов:
1. Сохранённый
2. Модифицированый
3. Индексированый
Метки

Метка – это указатель на коммит
Создание легковесной метки
  git tag v1
Метка-аннотация (комментарий вводить обязательно)
  git tag -a v2 -m “вторая версия”
                                           V1
Метка с подписью
  git tag -s v3 -m “третья версия”



Метки можно использовать в “git push”
  git push origin v2

Отправка меток на сервер
  git push origin --tags                   V2
Ветвление

SVN - медленно                            Git - мгновенно




 В Subversion создание, слияние веток   В Git вся работа с ветками
 и переключение между ветками           происходит локально
 происходит через сеть
Ветвление

После нескольких коммитов ветка master (по умолчанию) указывает на
последний
                                   HEAD


                                    master



  Коммит 1        Коммит 2        Коммит 3



 состояние 1     cостояние 2     состояние 3



HEAD – указатель на ветку, в которой мы находимся
Ветвление

Создание новой ветки
 git branch testing
                                  HEAD


                                  master



  Коммит 1            Коммит 2   Коммит 3



                                  testing
Ветвление

Переключение в новую ветку
 git checkout testing



                               master



  Коммит 1         Коммит 2   Коммит 3



                               testing



                               HEAD
Ветвление

Изменения в новой ветке
 git commit



                              master



  Коммит 1        Коммит 2   Коммит 3



                                        Коммит 4


                                         testing


                                         HEAD
Ветвление

Переключение в ветку master
 git checkout master
                               HEAD



                               master



  Коммит 1         Коммит 2   Коммит 3



                                         Коммит 4


                                          testing
Ветвление

Изменения в ветке master
 git commit
                                         HEAD



                                         master


                                        Коммит 5
  Коммит 1        Коммит 2   Коммит 3



                                        Коммит 4


                                         testing
Ветвление

 Изменения в ветке master
  git commit
                                                   HEAD



                                                   master


                                       Коммит 5   Коммит 6
Коммит 1       Коммит 2     Коммит 3



                                       Коммит 4


                                        testing
Ветвление

 Слияние веток
  git merge testing
                                               HEAD



                                               master


                                   Коммит 5   Коммит 6
Коммит 1     Коммит 2   Коммит 3



                                   Коммит 4


                                    testing
Ветвление

 Слияние веток
  git merge testing
                                                          HEAD



                                                          master


                                   Коммит 5   Коммит 6   Коммит 7
Коммит 1     Коммит 2   Коммит 3



                                   Коммит 4


                                    testing
Ветвление

Конфликты при слиянии веток
 git merge testing
 Auto-merging readme.txt
 CONFLICT (content): Merge conflict in readme.txt
 Automatic merge failed; fix conflicts and then commit the result.


Типы веток

 Долгоживущие
     master

 Тематические
    ticket1234

 Удалённые (remote)
     origin/master
     origin2/testing
 Удалённые ветки бывают отслеживаемыми
Перемещение (rebase)
                                                      HEAD

                                                    experiment

                                        Коммит 4     Коммит 6
Коммит 1     Коммит 2     Коммит 3

                                        Коммит 5

                                         master                     HEAD
git rebase master
                                                                  experiment

Коммит 1     Коммит 2     Коммит 3      Коммит 5     Коммит 4'    Коммит 6'

                                         master

При перемещении изменяется история, создаются новые коммиты

Нельзя перемещать коммиты, которые уже существуют в общем репозитории
Взаимодействие
Git ↔ Subversion
Git-svn -двусторонний мост, позволяет использовать Git и Subversion совместно
git svn clone http://svn.webkit.org/repository/webkit -T trunk -b branches -t tags
  .
  .
  .
git commit
git svn rebase
git svn dcommit

Создание веток в Subversion
git svn branch testing


Полный переход на Git
git svn clone http://svn.webkit.org/repository/webkit --no-metadata


Флаг --no-metadata обрывает связь с SVN репозиторием
Работа с удалёнными
репозиториями

Поддерживаемые
протоколы:
 ssh, git, http, https, ftp, ftps и rsync




https://github.com/github/git
http://github.com/jcnetdev/yubnub.git
git://github.com/sitaramc/gitolite.git
user@server:/path.git 
/home/user/project
file:///home/user/project
Работа с удалёнными
репозиториями

Команда “git remote” управляет списком удалённых репозиториев.
Каждый репозиторий равноценно используется для получения и
отправки данных


                        pull




                                                pu
                               pull
         pu




                                                  sh
           sh                           sh
                                      pu


                                         push
Распределённая работа с Git

       Модель организации с центральным репозиторием



                         Центральный
                         репозиторий




    Вася                     Петя                      Паша
Распределённая работа с Git

             Модель организации с менеджером по интеграции

                        Открытый           Открытый           Открытый
   Священный
                       репозиторий        репозиторий        репозиторий
   репозиторий
                          Васи               Пети               Паши




                         Личный             Личный             Личный
  Менеджер по
                       репозиторий        репозиторий        репозиторий
   интеграции
                          Васи               Пети               Паши
Распределённая работа с Git

                           Диктатор и лейтенанты


                                                   Священный
              Диктатор                             репозиторий




      Лейтенант            Лейтенант




разработчик      разработчик    разработчик    разработчик       разработчик
Распределённая работа с Git

       Циклическая модель



                            Разработчик 2

  Разработчик 1


                                                  Разработчик 3




       Разработчик 5

                                       Разработчик 4
Установка Git на сервер
Протокол Git
   git clone git://server:project.git
Преимущества:
   Самый быстрый протокол
Недостатки:
   Отсутствие авторизации пользователей


Протокол HTTP(S)
   git clone http://example.com/gitproject.git

Преимущества:
   Простой в установке, используется любой web-сервер
Недостатки:
   Не очень эффективен с клиентской стороны
Установка Git на сервер

Gitosis, Gitolite
Устанавливается на сервер, организует доступ к
репозиторию через SSH протокол используя один логин.

Доступ предоставляется с помощью открытых ключей
пользователей.

Предоставляет удобное управление открытыми ключами
пользователей.
Устройство репозитория Git
~/project$ git init
Initialized empty Git repository in ~/project/.git/
git add readme.txt
~/project$ git commit -am "initial rev"
[master (root-commit) 9585139] initial rev
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 readme.txt
~/project$ cd .git
~/project/.git$ ls -al
total 52
drwxr-xr-x 8 user user 4096 ./
drwxr-xr-x 3 user user 4096 ../
drwxr-xr-x 2 user user 4096 branches/
-rw-r--r-- 1 user user   12 COMMIT_EDITMSG
-rw-r--r-- 1 user user   92 config
-rw-r--r-- 1 user user   73 description
-rw-r--r-- 1 user user   23 HEAD
drwxr-xr-x 2 user user 4096 hooks/
-rw-r--r-- 1 user user 112 index
drwxr-xr-x 2 user user 4096 info/
drwxr-xr-x 3 user user 4096 logs/
drwxr-xr-x 7 user user 4096 objects/
drwxr-xr-x 4 user user 4096 refs/
Устройство репозитория Git

 Весь репозиторий в папке .git/

                     branches/        Конфигурация
                     COMMIT_EDITMSG
Центральная          config
   часть             description
репозитория          HEAD
                     hooks/           Скрипты для
                     index            автоматизации
                     info/
                     logs/
                     objects/
                     refs/             Список файлов
                                       для исключения
                                       (то же что и
                                       .gitignore)

More Related Content

Similar to Переход на Git из Subversion

Git - распределенная система контроля версий
Git - распределенная система контроля версийGit - распределенная система контроля версий
Git - распределенная система контроля версийOleg Poyaganov
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающихVadim Drobinin
 
Распределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitРаспределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitIvan Evtukhovich
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Egor Stremousov
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...it-people
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)Anton Ivanov
 
GIT Slides (25.03.2015)
GIT Slides (25.03.2015)GIT Slides (25.03.2015)
GIT Slides (25.03.2015)Ilya V
 
Git - Вадим Валуев
Git - Вадим ВалуевGit - Вадим Валуев
Git - Вадим ВалуевDrupalCamp MSK
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Dmytro Olaresko
 
Git для продолжающих
Git для продолжающихGit для продолжающих
Git для продолжающихIvan Evtukhovich
 
GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?Tados
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с GitDressTester
 
Новый дом для репозитория или история переезда на Git lab
Новый дом для репозитория или история переезда на Git labНовый дом для репозитория или история переезда на Git lab
Новый дом для репозитория или история переезда на Git labitconnect2016
 

Similar to Переход на Git из Subversion (20)

Про Git
Про GitПро Git
Про Git
 
Git - распределенная система контроля версий
Git - распределенная система контроля версийGit - распределенная система контроля версий
Git - распределенная система контроля версий
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
 
Giflow
GiflowGiflow
Giflow
 
Git intro
Git introGit intro
Git intro
 
Распределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitРаспределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере git
 
Chebit.Git
Chebit.GitChebit.Git
Chebit.Git
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"
 
Git basis
Git basisGit basis
Git basis
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
 
GitFlow_MOEX
GitFlow_MOEXGitFlow_MOEX
GitFlow_MOEX
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
 
GIT Slides (25.03.2015)
GIT Slides (25.03.2015)GIT Slides (25.03.2015)
GIT Slides (25.03.2015)
 
Git - Вадим Валуев
Git - Вадим ВалуевGit - Вадим Валуев
Git - Вадим Валуев
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.
 
Git
GitGit
Git
 
Git для продолжающих
Git для продолжающихGit для продолжающих
Git для продолжающих
 
GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
 
Новый дом для репозитория или история переезда на Git lab
Новый дом для репозитория или история переезда на Git labНовый дом для репозитория или история переезда на Git lab
Новый дом для репозитория или история переезда на Git lab
 

Переход на Git из Subversion

  • 1. Переход на распределённую систему контроля версий из mvasilyev@intersog.com
  • 2. Развитие систем контроля версий 1. Ручное копирование файлов 2012-02-01 2012-02-02 2012-02-03 2. Локальные системы контроля версий Для каждого файла хранится исходное состояние и RCS список изменений SCCS
  • 3. Системы контроля версий клиент-сервер Централизованые системы контроля версий ●CVS ●Subversion ●IBM Rational ClearCase ●MKS Integrity ●Perforce ●PVCS ●Microsoft Visual SourceSafe ●Microsoft Visual Studio Application Lifecycle Management
  • 4. Работа с централизоваными системами контроля версий ●Обмен файлами через центральный сервер ●История хранится на центральном сервере ●Клиентские компьютеры содержат только последнюю версию
  • 5. Работа с централизоваными системами контроля версий Контроль одновременного доступа к файлам Блокирование файлов на запись исключает конфликты, но уменьшает возможности одновременного редактирования
  • 6. Работа с централизоваными системами контроля версий Одновременное редактирование файла ? Приводит к конфликтам и необходимости их разрешения вручную
  • 7. Работа с ветками в Subversion При слиянии веток не используется история версий 1 3 5 7 trunk 2 4 6 bug1234 Центральный сервер – слабое место
  • 8. Распределённые системы контроля версий ●Git ●Mercurial ●Bazaar ●Darcs ●SVK ●Bit Keeper Каждый компьютер содержит копию репозитория
  • 9. Почему я выбрал Git ? 1. Кроссплатформенность Linux Windows Mac OS X 2. Наличие удобных инструментов
  • 10. Почему я выбрал Git ? 3. Скорость работы - Большая часть операций выполняется локально; - Скорость операций высокая; - Данные хранятся компактно (последняя версия + разница в сжатом виде; - Эффективно работает даже с бинарными файлами. 4. Распространённость
  • 11. Git Контекстно-адресуемая файловая система с интерфейсом для системы контроля версий Хранилище ключ-значение Подготовка к работе с Git git config --global user.email "you@example.com" git config --global user.name "Your Name"
  • 12. Начало работы с Git Инициализация нового репозитория ~/project$ git init Initialized empty Git repository in ~/project/.git/ ~/project$ git add *.java ~/project$ git add *.txt ~/project$ git commit -m "initial version" [master (root-commit) e39cac5] initial version 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 main.java create mode 100644 readme.txt Клонирование существующего репозитория /tmp$ git clone https://github.com/github/git git-src Initialized empty Git repository in /tmp/git-src/.git/ remote: Counting objects: 112488, done. remote: Compressing objects: 100% (36088/36088), done. remote: Total 112488 (delta 82161), reused 104459 (delta 74813) Receiving objects: 100% (112488/112488), 23.52 MiB | 747 KiB/s, done. Resolving deltas: 100% (82161/82161), done.
  • 13. Жизненный цикл файлов в Git 3 состояния файлов: 1. Сохранённый 2. Модифицированый 3. Индексированый
  • 14. Метки Метка – это указатель на коммит Создание легковесной метки git tag v1 Метка-аннотация (комментарий вводить обязательно) git tag -a v2 -m “вторая версия” V1 Метка с подписью git tag -s v3 -m “третья версия” Метки можно использовать в “git push” git push origin v2 Отправка меток на сервер git push origin --tags V2
  • 15. Ветвление SVN - медленно Git - мгновенно В Subversion создание, слияние веток В Git вся работа с ветками и переключение между ветками происходит локально происходит через сеть
  • 16. Ветвление После нескольких коммитов ветка master (по умолчанию) указывает на последний HEAD master Коммит 1 Коммит 2 Коммит 3 состояние 1 cостояние 2 состояние 3 HEAD – указатель на ветку, в которой мы находимся
  • 17. Ветвление Создание новой ветки git branch testing HEAD master Коммит 1 Коммит 2 Коммит 3 testing
  • 18. Ветвление Переключение в новую ветку git checkout testing master Коммит 1 Коммит 2 Коммит 3 testing HEAD
  • 19. Ветвление Изменения в новой ветке git commit master Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing HEAD
  • 20. Ветвление Переключение в ветку master git checkout master HEAD master Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing
  • 21. Ветвление Изменения в ветке master git commit HEAD master Коммит 5 Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing
  • 22. Ветвление Изменения в ветке master git commit HEAD master Коммит 5 Коммит 6 Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing
  • 23. Ветвление Слияние веток git merge testing HEAD master Коммит 5 Коммит 6 Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing
  • 24. Ветвление Слияние веток git merge testing HEAD master Коммит 5 Коммит 6 Коммит 7 Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing
  • 25. Ветвление Конфликты при слиянии веток git merge testing Auto-merging readme.txt CONFLICT (content): Merge conflict in readme.txt Automatic merge failed; fix conflicts and then commit the result. Типы веток Долгоживущие master Тематические ticket1234 Удалённые (remote) origin/master origin2/testing Удалённые ветки бывают отслеживаемыми
  • 26. Перемещение (rebase) HEAD experiment Коммит 4 Коммит 6 Коммит 1 Коммит 2 Коммит 3 Коммит 5 master HEAD git rebase master experiment Коммит 1 Коммит 2 Коммит 3 Коммит 5 Коммит 4' Коммит 6' master При перемещении изменяется история, создаются новые коммиты Нельзя перемещать коммиты, которые уже существуют в общем репозитории
  • 27. Взаимодействие Git ↔ Subversion Git-svn -двусторонний мост, позволяет использовать Git и Subversion совместно git svn clone http://svn.webkit.org/repository/webkit -T trunk -b branches -t tags . . . git commit git svn rebase git svn dcommit Создание веток в Subversion git svn branch testing Полный переход на Git git svn clone http://svn.webkit.org/repository/webkit --no-metadata Флаг --no-metadata обрывает связь с SVN репозиторием
  • 28. Работа с удалёнными репозиториями Поддерживаемые протоколы: ssh, git, http, https, ftp, ftps и rsync https://github.com/github/git http://github.com/jcnetdev/yubnub.git git://github.com/sitaramc/gitolite.git user@server:/path.git  /home/user/project file:///home/user/project
  • 29. Работа с удалёнными репозиториями Команда “git remote” управляет списком удалённых репозиториев. Каждый репозиторий равноценно используется для получения и отправки данных pull pu pull pu sh sh sh pu push
  • 30. Распределённая работа с Git Модель организации с центральным репозиторием Центральный репозиторий Вася Петя Паша
  • 31. Распределённая работа с Git Модель организации с менеджером по интеграции Открытый Открытый Открытый Священный репозиторий репозиторий репозиторий репозиторий Васи Пети Паши Личный Личный Личный Менеджер по репозиторий репозиторий репозиторий интеграции Васи Пети Паши
  • 32. Распределённая работа с Git Диктатор и лейтенанты Священный Диктатор репозиторий Лейтенант Лейтенант разработчик разработчик разработчик разработчик разработчик
  • 33. Распределённая работа с Git Циклическая модель Разработчик 2 Разработчик 1 Разработчик 3 Разработчик 5 Разработчик 4
  • 34. Установка Git на сервер Протокол Git git clone git://server:project.git Преимущества: Самый быстрый протокол Недостатки: Отсутствие авторизации пользователей Протокол HTTP(S) git clone http://example.com/gitproject.git Преимущества: Простой в установке, используется любой web-сервер Недостатки: Не очень эффективен с клиентской стороны
  • 35. Установка Git на сервер Gitosis, Gitolite Устанавливается на сервер, организует доступ к репозиторию через SSH протокол используя один логин. Доступ предоставляется с помощью открытых ключей пользователей. Предоставляет удобное управление открытыми ключами пользователей.
  • 36. Устройство репозитория Git ~/project$ git init Initialized empty Git repository in ~/project/.git/ git add readme.txt ~/project$ git commit -am "initial rev" [master (root-commit) 9585139] initial rev 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 readme.txt ~/project$ cd .git ~/project/.git$ ls -al total 52 drwxr-xr-x 8 user user 4096 ./ drwxr-xr-x 3 user user 4096 ../ drwxr-xr-x 2 user user 4096 branches/ -rw-r--r-- 1 user user 12 COMMIT_EDITMSG -rw-r--r-- 1 user user 92 config -rw-r--r-- 1 user user 73 description -rw-r--r-- 1 user user 23 HEAD drwxr-xr-x 2 user user 4096 hooks/ -rw-r--r-- 1 user user 112 index drwxr-xr-x 2 user user 4096 info/ drwxr-xr-x 3 user user 4096 logs/ drwxr-xr-x 7 user user 4096 objects/ drwxr-xr-x 4 user user 4096 refs/
  • 37. Устройство репозитория Git Весь репозиторий в папке .git/ branches/ Конфигурация COMMIT_EDITMSG Центральная config часть description репозитория HEAD hooks/ Скрипты для index автоматизации info/ logs/ objects/ refs/ Список файлов для исключения (то же что и .gitignore)