You are on page 1of 25

GIT

то же, что и Subversion, только круче

Антон Миронов
Зачем нужно?
“Я тоже изменял этот файл”

Как бы достать старую версию файла?

Когда же появился этот баг?

И кто его сделал?!

Как бы сделать эту фичу, а потом, если не понравится,


убрать ее?

“Сломался компьютер” – больше не отмазка


Что такое GIT?
Написана Линусом
Торвальдсом в 2005 году

Написана для разработки


ядра линукса (версия
2.6.29 имеет 11,010,647
строк кода)

Написана в основном на C

Открытый исходный код,


бесплатная (GNU GPL V2)
Кому это нужно?

И многим другим.
Термины
Репозиторий
место, где хранятся и поддерживаются данные

Коммит
фиксация изменений

Ветка
отдельная ветвь разработки

Мерджить
объединять изменения двух веток
Почему GIT?

Очень мощная и быстрая

Распределенная

Полностью функциональна без соединения с интернетом

Создана для нелинейной разработки, очень удобная


работа с ветками
Мощная?
~ > git
add clone imap-send request-pull
am commit init reset
annotate config instaweb revert
apply describe log rm
archive diff merge send-email
bisect external-chdiff mergetool shortlog
blame fetch mv show
branch filter-branch name-rev show-branch
bundle format-patch publish-branch stash
checkout fsck pull status
cherry gc push submodule
cherry-pick get-tar-commit-id rebase svn
chmerge grep relink tag
citool gui remote whatchanged
clean help repack wtf

Очень.
Что делать без интернета?

Изменения между версиями

Полная история файла

Просмотр сделанных изменений

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

Переключение между ветками


Что значит
распределенная?

У каждого разработчика своя локальная копия


репозитория

Коммиты производятся в локальную версию

Локальный репозиторий синхронизируется с удаленным


специальными командами
Как сделать коммит?
SVN GIT

svn add file git add file


svn rm file git rm file
svn mv file git mv file
svn commit git commit

Важно: git commit делает коммит в локальный репозиторий


Синхронизация

Получает изменения из удаленного


git pull
репозитория

Закачивает локальные коммиты на


git push
удаленный сервер
Типичный рабочий
процесс
Изменили файлы, создали новые
Прогнали тесты
git status – увидели, какие файлы новые, какие обновленные

git add . – добавили новые и обновленные файлы в индекс

git commit -m “Сделал ...” – сделали коммит в


локальный репозиторий
Снова изменили файлы, доделали фичу, снова закоммитили

git pull – скачали коммиты коллег

git push – закачали свои изменения на сервер


ДЕМО
Что такое ветвление?
master – основная ветка

Каждая ветка – отдельный мини-репозиторий

Много программистов могут работать одновременно над


разными задачами в разных ветках

Можно оставить задачу в ветке недоделанной, быстро


переключиться в другую ветку и исправить в ней ошибку.

После того как задача выполнена, сделанные изменения


из ветки мерджатся в master
Правила хорошего тона

master – ветка, которая всегда, в любой момент должна быть


готова к работе

Никогда не делаем новые фичи и багфиксы сразу в master,


используем для этого ветки

Одна фича — одна ветка

Один багфикс (если предполагается длиннее двух коммитов) —


одна ветка
Правила хорошего тона

Один эксперимент — одна ветка

Одна фича внутри эксперимента — ветка от ветки

Всегда пишем вразумительные комментарии к коммитам

После того, как фича (или багфикс) написаны, оттестированы и


готовы к работе, мерджим ветку в master.
Коммитить в master
нельзя?
Можно.

Когда мы точно уверены в том, что наше мелкое


изменение однозначно решит проблему и не создаст
новых.

Когда уверены, что не понадобится потом делать багфикс


для багфикса.

При этом, изменения должны быть минимальными.


Исправление бага или
добавление фичи
Делаем ветку feature, вся работа по задаче происходит в ней
Все тестируем
Переключаемся на мастер (git checkout master)
Мерджим в мастер ветку (git merge feature)
Разрешаем конфликты, если были
Тестируем
Закачиваем на сервер (git push)
Удаляем ветку (git branch -d feature)
ДЕМО
Как это выглядит в жизни?
Полезные команды

git log Посмотреть лог коммитов

git stash Зафиксировать изменения, но не коммитить

git stash
Восстановить изменения
apply

git reset Откатить все изменения до последнего


--hard HEAD коммита
Пара рекомендаций

Коммиты должны быть мелкими. Список изменений на


пять экранов должен быть исключением, а не правилом.

Не ленитесь создавать ветки. Это очень просто и удобно.

Читайте git log, ругайте своих коллег за


невразумительные описания коммитов.

Тестируйте код перед тем как отправить его в master.


Не касался
Создание репозитория

Разрешение конфликтов

Публикация ветки для совместной работы

Разница между merge и rebase

Создание меток

Создание fork’ов
Ссылки

Скачать: http://git.or.cz

Почитать: http://book.git-scm.com/

Посмотреть: http://gitcasts.com/