Переход на распределённуюсистему контроля версий из                      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,455 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,455
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
19
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Переход на 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)

×