Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Переход на распределённуюсистему контроля версий из                      mvasilyev@intersog.com
Развитие систем контроляверсий 1. Ручное копирование файлов                   2012-02-01                   2012-02-02     ...
Системы контроляверсий клиент-серверЦентрализованые системы контроля версий●CVS●Subversion●IBM Rational ClearCase●MKS Inte...
Работа с централизованымисистемами контроля версий ●Обмен файлами через центральный сервер ●История хранится на центрально...
Работа с централизованымисистемами контроля версийКонтроль одновременного доступа к файламБлокирование файлов на запись ис...
Работа с централизованымисистемами контроля версийОдновременное редактирование файла                    ? Приводит к конфл...
Работа с ветками вSubversion  При слиянии веток не используется история версий        1       3       5       7trunk      ...
Распределённые системыконтроля версий ●Git ●Mercurial ●Bazaar ●Darcs ●SVK ●Bit Keeper Каждый компьютер содержит копию репо...
Почему я выбралGit ?1. Кроссплатформенность     Linux      Windows     Mac OS X2. Наличие удобных инструментов
Почему я выбралGit ?3. Скорость работы  - Большая часть операций выполняется локально;  - Скорость операций высокая;  - Да...
Git                 Контекстно-адресуемая файловая система с                 интерфейсом для системы контроля версий      ...
Начало работы с Git Инициализация нового репозитория~/project$ git initInitialized empty Git repository in ~/project/.git/...
Жизненный цикл файлов вGit3 состояния файлов:1. Сохранённый2. Модифицированый3. Индексированый
МеткиМетка – это указатель на коммитСоздание легковесной метки  git tag v1Метка-аннотация (комментарий вводить обязательно...
ВетвлениеSVN - медленно                            Git - мгновенно В Subversion создание, слияние веток   В Git вся работа...
ВетвлениеПосле нескольких коммитов ветка master (по умолчанию) указывает напоследний                                   HEA...
ВетвлениеСоздание новой ветки git branch testing                                  HEAD                                  ma...
ВетвлениеПереключение в новую ветку git checkout testing                               master  Коммит 1         Коммит 2  ...
ВетвлениеИзменения в новой ветке git commit                              master  Коммит 1        Коммит 2   Коммит 3      ...
ВетвлениеПереключение в ветку master git checkout master                               HEAD                               ...
ВетвлениеИзменения в ветке master git commit                                         HEAD                                 ...
Ветвление Изменения в ветке master  git commit                                                   HEAD                     ...
Ветвление Слияние веток  git merge testing                                               HEAD                             ...
Ветвление Слияние веток  git merge testing                                                          HEAD                  ...
ВетвлениеКонфликты при слиянии веток git merge testing Auto-merging readme.txt CONFLICT (content): Merge conflict in readm...
Перемещение (rebase)                                                      HEAD                                            ...
ВзаимодействиеGit ↔ SubversionGit-svn -двусторонний мост, позволяет использовать Git и Subversion совместноgit svn clone h...
Работа с удалённымирепозиториямиПоддерживаемыепротоколы: ssh, git, http, https, ftp, ftps и rsynchttps://github.com/github...
Работа с удалённымирепозиториямиКоманда “git remote” управляет списком удалённых репозиториев.Каждый репозиторий равноценн...
Распределённая работа с Git       Модель организации с центральным репозиторием                         Центральный       ...
Распределённая работа с Git             Модель организации с менеджером по интеграции                        Открытый     ...
Распределённая работа с Git                           Диктатор и лейтенанты                                               ...
Распределённая работа с Git       Циклическая модель                            Разработчик 2  Разработчик 1              ...
Установка Git на серверПротокол Git   git clone git://server:project.gitПреимущества:   Самый быстрый протоколНедостатки: ...
Установка Git на серверGitosis, GitoliteУстанавливается на сервер, организует доступ крепозиторию через SSH протокол испол...
Устройство репозитория Git~/project$ git initInitialized empty Git repository in ~/project/.git/git add readme.txt~/projec...
Устройство репозитория Git Весь репозиторий в папке .git/                     branches/        Конфигурация               ...
Upcoming SlideShare
Loading in …5
×

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

1,504 views

Published on

Published in: Technology
  • Be the first to comment

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

  1. 1. Переход на распределённуюсистему контроля версий из mvasilyev@intersog.com
  2. 2. Развитие систем контроляверсий 1. Ручное копирование файлов 2012-02-01 2012-02-02 2012-02-032. Локальные системы контроля версий Для каждого файла хранится исходное состояние и RCS список изменений SCCS
  3. 3. Системы контроляверсий клиент-серверЦентрализованые системы контроля версий●CVS●Subversion●IBM Rational ClearCase●MKS Integrity●Perforce●PVCS●Microsoft Visual SourceSafe●Microsoft Visual Studio Application Lifecycle Management
  4. 4. Работа с централизованымисистемами контроля версий ●Обмен файлами через центральный сервер ●История хранится на центральном сервере ●Клиентские компьютеры содержат только последнюю версию
  5. 5. Работа с централизованымисистемами контроля версийКонтроль одновременного доступа к файламБлокирование файлов на запись исключает конфликты, но уменьшаетвозможности одновременного редактирования
  6. 6. Работа с централизованымисистемами контроля версийОдновременное редактирование файла ? Приводит к конфликтам и необходимости их разрешения вручную
  7. 7. Работа с ветками вSubversion При слиянии веток не используется история версий 1 3 5 7trunk 2 4 6 bug1234 Центральный сервер – слабое место
  8. 8. Распределённые системыконтроля версий ●Git ●Mercurial ●Bazaar ●Darcs ●SVK ●Bit Keeper Каждый компьютер содержит копию репозитория
  9. 9. Почему я выбралGit ?1. Кроссплатформенность Linux Windows Mac OS X2. Наличие удобных инструментов
  10. 10. Почему я выбралGit ?3. Скорость работы - Большая часть операций выполняется локально; - Скорость операций высокая; - Данные хранятся компактно (последняя версия + разница в сжатом виде; - Эффективно работает даже с бинарными файлами.4. Распространённость
  11. 11. Git Контекстно-адресуемая файловая система с интерфейсом для системы контроля версий Хранилище ключ-значение Подготовка к работе с Git git config --global user.email "you@example.com" git config --global user.name "Your Name"
  12. 12. Начало работы с Git Инициализация нового репозитория~/project$ git initInitialized 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-srcInitialized 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. 13. Жизненный цикл файлов вGit3 состояния файлов:1. Сохранённый2. Модифицированый3. Индексированый
  14. 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. 15. ВетвлениеSVN - медленно Git - мгновенно В Subversion создание, слияние веток В Git вся работа с ветками и переключение между ветками происходит локально происходит через сеть
  16. 16. ВетвлениеПосле нескольких коммитов ветка master (по умолчанию) указывает напоследний HEAD master Коммит 1 Коммит 2 Коммит 3 состояние 1 cостояние 2 состояние 3HEAD – указатель на ветку, в которой мы находимся
  17. 17. ВетвлениеСоздание новой ветки git branch testing HEAD master Коммит 1 Коммит 2 Коммит 3 testing
  18. 18. ВетвлениеПереключение в новую ветку git checkout testing master Коммит 1 Коммит 2 Коммит 3 testing HEAD
  19. 19. ВетвлениеИзменения в новой ветке git commit master Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing HEAD
  20. 20. ВетвлениеПереключение в ветку master git checkout master HEAD master Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing
  21. 21. ВетвлениеИзменения в ветке master git commit HEAD master Коммит 5 Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing
  22. 22. Ветвление Изменения в ветке master git commit HEAD master Коммит 5 Коммит 6Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing
  23. 23. Ветвление Слияние веток git merge testing HEAD master Коммит 5 Коммит 6Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing
  24. 24. Ветвление Слияние веток git merge testing HEAD master Коммит 5 Коммит 6 Коммит 7Коммит 1 Коммит 2 Коммит 3 Коммит 4 testing
  25. 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. 26. Перемещение (rebase) HEAD experiment Коммит 4 Коммит 6Коммит 1 Коммит 2 Коммит 3 Коммит 5 master HEADgit rebase master experimentКоммит 1 Коммит 2 Коммит 3 Коммит 5 Коммит 4 Коммит 6 masterПри перемещении изменяется история, создаются новые коммитыНельзя перемещать коммиты, которые уже существуют в общем репозитории
  27. 27. ВзаимодействиеGit ↔ SubversionGit-svn -двусторонний мост, позволяет использовать Git и Subversion совместноgit svn clone http://svn.webkit.org/repository/webkit -T trunk -b branches -t tags . . .git commitgit svn rebasegit svn dcommitСоздание веток в Subversiongit svn branch testingПолный переход на Gitgit svn clone http://svn.webkit.org/repository/webkit --no-metadataФлаг --no-metadata обрывает связь с SVN репозиторием
  28. 28. Работа с удалённымирепозиториямиПоддерживаемыепротоколы: ssh, git, http, https, ftp, ftps и rsynchttps://github.com/github/githttp://github.com/jcnetdev/yubnub.gitgit://github.com/sitaramc/gitolite.gituser@server:/path.git /home/user/projectfile:///home/user/project
  29. 29. Работа с удалённымирепозиториямиКоманда “git remote” управляет списком удалённых репозиториев.Каждый репозиторий равноценно используется для получения иотправки данных pull pu pull pu sh sh sh pu push
  30. 30. Распределённая работа с Git Модель организации с центральным репозиторием Центральный репозиторий Вася Петя Паша
  31. 31. Распределённая работа с Git Модель организации с менеджером по интеграции Открытый Открытый Открытый Священный репозиторий репозиторий репозиторий репозиторий Васи Пети Паши Личный Личный Личный Менеджер по репозиторий репозиторий репозиторий интеграции Васи Пети Паши
  32. 32. Распределённая работа с Git Диктатор и лейтенанты Священный Диктатор репозиторий Лейтенант Лейтенантразработчик разработчик разработчик разработчик разработчик
  33. 33. Распределённая работа с Git Циклическая модель Разработчик 2 Разработчик 1 Разработчик 3 Разработчик 5 Разработчик 4
  34. 34. Установка Git на серверПротокол Git git clone git://server:project.gitПреимущества: Самый быстрый протоколНедостатки: Отсутствие авторизации пользователейПротокол HTTP(S) git clone http://example.com/gitproject.gitПреимущества: Простой в установке, используется любой web-серверНедостатки: Не очень эффективен с клиентской стороны
  35. 35. Установка Git на серверGitosis, GitoliteУстанавливается на сервер, организует доступ крепозиторию через SSH протокол используя один логин.Доступ предоставляется с помощью открытых ключейпользователей.Предоставляет удобное управление открытыми ключамипользователей.
  36. 36. Устройство репозитория Git~/project$ git initInitialized 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 -altotal 52drwxr-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 HEADdrwxr-xr-x 2 user user 4096 hooks/-rw-r--r-- 1 user user 112 indexdrwxr-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. 37. Устройство репозитория Git Весь репозиторий в папке .git/ branches/ Конфигурация COMMIT_EDITMSGЦентральная config часть descriptionрепозитория HEAD hooks/ Скрипты для index автоматизации info/ logs/ objects/ refs/ Список файлов для исключения (то же что и .gitignore)

×