Переход на git из subversion

37
Переход на распределённую систему контроля версий из [email protected]

Upload: mikhail-vasilyev

Post on 16-Jun-2015

1.163 views

Category:

Technology


9 download

TRANSCRIPT

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

Переход на распределённую систему контроля версий из

[email protected]

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

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

1. Ручное копирование файлов

2012-02-01

2012-02-02

2012-02-03

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

RCS

SCCS

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

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

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

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

●CVS●Subversion●IBM Rational ClearCase●MKS Integrity●Perforce●PVCS●Microsoft Visual SourceSafe●Microsoft Visual Studio Application Lifecycle Management

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

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

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

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

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

Контроль одновременного доступа к файлам

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

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

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

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

?

Приводит к конфликтам и необходимости их разрешения вручную

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

Работа с ветками в Subversion

trunk

1

2

3 5

4

7

6

bug1234

При слиянии веток не используется история версий

Центральный сервер – слабое место

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

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

●Git●Mercurial●Bazaar●Darcs●SVK●Bit Keeper

Каждый компьютер содержит копию репозитория

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

Почему я выбрал Git ?

1. Кроссплатформенность

Linux Windows Mac OS X

2. Наличие удобных инструментов

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

Почему я выбрал Git ?

3. Скорость работы

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

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

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

Git

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

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

Подготовка к работе с Git

git config --global user.email "[email protected]"git config --global user.name "Your Name"

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

Начало работы с 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.

Инициализация нового репозитория

Клонирование существующего репозитория

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

Жизненный цикл файлов в Git

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

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

Метки

Метка – это указатель на коммит

Создание легковесной меткиgit tag v1

Метка-аннотация (комментарий вводить обязательно)

git tag -a v2 -m “вторая версия”

Метка с подписьюgit tag -s v3 -m “третья версия”

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

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

V1

V2

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

Ветвление

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

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

В Git вся работа с ветками происходит локально

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

Ветвление

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

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

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

master

HEAD

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

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

Ветвление

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

Создание новой ветки

master

HEADgit branch testing

testing

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

Ветвление

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

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

master

HEAD

git checkout testing

testing

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

Ветвление

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

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

master

HEAD

git commit

testing

Коммит 4

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

Ветвление

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

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

master

HEADgit checkout master

testing

Коммит 4

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

Ветвление

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

Изменения в ветке master

master

HEADgit commit

testing

Коммит 4

Коммит 5

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

Ветвление

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

Изменения в ветке master

master

HEADgit commit

testing

Коммит 4

Коммит 5 Коммит 6

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

Ветвление

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

Слияние веток

master

HEADgit merge testing

testing

Коммит 4

Коммит 5 Коммит 6

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

Ветвление

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

Слияние веток

master

HEADgit merge testing

testing

Коммит 4

Коммит 5 Коммит 6 Коммит 7

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

Ветвление

Конфликты при слиянии веток

git merge testingAuto-merging readme.txtCONFLICT (content): Merge conflict in readme.txtAutomatic merge failed; fix conflicts and then commit the result.

Типы веток

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

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

Удалённые (remote)origin/masterorigin2/testing

Удалённые ветки бывают отслеживаемыми

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

Перемещение (rebase)

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

HEAD

Коммит 5

master

experiment

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

git rebase masterexperiment

master

HEAD

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

Нельзя перемещать коммиты, которые уже существуют в общем репозитории

Коммит 6

Коммит 4'

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

Взаимодействие Git ↔ Subversion

Git-svn -двусторонний мост, позволяет использовать Git и Subversion совместно

git svn clone http://svn.webkit.org/repository/webkit -T trunk -b branches -t tags

.

.

.

git commitgit svn rebasegit svn dcommit

Создание веток в Subversion

git svn branch testing

Полный переход на Git

git svn clone http://svn.webkit.org/repository/webkit --no-metadata

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

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

Работа с удалёнными репозиториями

Поддерживаемые протоколы:

https://github.com/github/githttp://github.com/jcnetdev/yubnub.gitgit://github.com/sitaramc/gitolite.gituser@server:/path.git /home/user/projectfile:///home/user/project

ssh, git, http, https, ftp, ftps и rsync

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

Работа с удалёнными репозиториями

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

push push

pull

push

push

pull

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

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

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

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

Вася Петя Паша

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

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

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

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

Менеджер поинтеграции

Открытыйрепозиторий

Васи

Открытыйрепозиторий

Пети

Открытыйрепозиторий

Паши

Личныйрепозиторий

Васи

Личныйрепозиторий

Пети

Личныйрепозиторий

Паши

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Установка Git на сервер

Протокол Gitgit clone git://server:project.git

Преимущества:Самый быстрый протокол

Недостатки:

Отсутствие авторизации пользователей

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

Преимущества:Простой в установке, используется любой web-сервер

Недостатки:

Не очень эффективен с клиентской стороны

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

Установка Git на сервер

Gitosis, Gitolite

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

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

Предоставляет удобное управление открытыми ключами пользователей.

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

Устройство репозитория 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/

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

Устройство репозитория Git

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

branches/COMMIT_EDITMSGconfigdescriptionHEADhooks/indexinfo/logs/objects/refs/

Центральная часть

репозитория

Конфигурация

Скрипты для автоматизации

Список файлов для исключения (то же что и .gitignore)