что такое Git и как с ним бороться

Preview:

Citation preview

Что такое GIT и как с ним бороться?

История

• Создан разработчиками ядра Linux для разработки ядра Linux

• Требования:

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

2. Простота

3. Параллельная разработка

4. Работа с большим количеством исходного кода

Что же такое GIT?

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

Распределённых!

• Особенно хорош для проектов ведущихся параллельно несколькими командами

• Позволяет работать из дому/ночью/поезда

• Независимость от интернета!

• Почему? Оставайтесь с нами

Идеология совместной работы

Как работают с SVN

Как работают с GIT

Как работают с GIT

Как работают с GIT

• Сервером может быть любой компьютер• Можно работать вообще без сервера(в

отличии от SVN)

Принципы хранения данных

Как хранятся данные в SVN

История изменений

Как хранятся данные в GIT

Слепки файловой системы

Как хранятся данные в GIT

• Изменяемые файлы копируются(только изменяемые)

• Хранится всё, данные только добавляются

Жизненный цикл разработки с GIT

Устанавливаем GIT

Linux: sudo apt-get install git

Mac OS: http://code.google.com/p/git-osx-installer

Windows: http://msysgit.github.com

Конфигурируем GIT

• git config --global user.name "John Doe“

• git config --global user.email johndoe@example.com

• git config --global user.email johndoe@example.com

• git config --global merge.tool vimdiff

• git config --list

Фиксация изменений

Пустой репозиторий

• Определяем состояние файлов• git status• # On branch master• nothing to commit (working directory clean)

Добавляем файл

• Добавляем README(и любой другой файл так же)• git status• # On branch master• # Untracked files:• # (use "git add <file>..." to include in what will be

committed)• #• # README• nothing added to commit but untracked files present (use

"git add" to track)• Гит говорит, что файл не добавлен

Добавляем файл

• git add README• git status• # On branch master• # Changes to be committed:• # (use "git reset HEAD <file>..." to unstage)• #• # new file: README• Файл добавлен, но не закоммичен

Меняем добавленный файл

• После изменений файла его снова нужно добавить(проиндексировать изменения)

• Git status• Changed but not updated:• # (use "git add <file>..." to update what

will be committed)• #• # modified: README

Отменяем изменения

Git reset head <file>

Удаляем файлы из индекса

• Если файл удалён, он не удалится просто так – останется в индексе(изменённые но не обновлённые)

• Чтобы удалить из индекса используем git rm <имя файла>

Коммитимся

• Git commit

• Открывается текстовый файл в выбранном редакторе

• Пишем комментарий, сохраняем, происходит commitЛибо добавляем опцию - m git commit -m "Story 182: Fix benchmarks for speed"

Просмотр истории коммитов

• git log

• Большое количество опций(смотрим pro.git)

Отменяем изменения

• Откатить файл до состояния последнего коммита Git checkout -- <имя файла>

• Откатить всё до коммита с версией git checkout <имя версии>

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

Говорим GIT о существовании нового репозитория

• git remote add [сокращение] [url]

• Пример git remote add pb git://github.com/paulboone/ticgit.git

• git remote – получаем список всех репозиториев

Клонируем из удалённого репозитория

• Клонируем репозиторий из удалённого git clone <url>

• пример git clone git://github.com/schacon/ticgit.git

• Получить данные из репозитория, которых нет у вас git fetch

Добавляем на удалённый репозиторий

• Git push <имя удалённого сервера> <имя ветки>• Получить информацию о удалённом репозитории git

remote show [удал. сервер]• git remote show origin• * remote origin• URL: git://github.com/schacon/ticgit.git• Remote branch merged with 'git pull' while on branch

master• master• Tracked remote branches• master• ticgit

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

Как создать новую ветку?

• Git brunch <имя ветки>

• Перейти на ветку git checkout <имя ветки>

Изменения должны быть закоммичены, иначе гит будет матюкатся!

Как получить список веток

• git branch без параметров

• Пример

git branch

iss53

* master

testing

Мерджинг веток

• git checkout <имя ветки>• Git merge <имя другой ветки>• Конфликтные изменения будут отображены в

логе, нужно смёрджиться и добавить их в индекс (git add)

• git merge iss53• Auto-merging index.html• CONFLICT (content): Merge conflict in

index.html• Automatic merge failed; fix conflicts and then

commit the result.

Конфликтные файлы выглядят так

• <<<<<<< HEAD:index.html• <div id="footer">contact :

email.support@github.com</div>• =======• <div id="footer">• please contact us at support@github.com• </div>• >>>>>>> iss53:index.html

Ветвление, философия

Как нужно работать с ветками?

• Делаем ветку для изменений

• Делаем изменения

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

• После окончания работы мержимся с мастером

• Удаляем ветку

• Заливаем мастер на сервер

Как нужно работать в команде

• У каждого своя «главная» ветка

• Делаем изменения локально

• Мержимся со своей «главной»

• Мержимся с мастером

• Заливаем на сервер

• Удаляем ветку с экспериментами

Полезные советы

Полезные советы

• Создаём ветки часто

• Коммитимся часто

• Обновляем мастер часто

• Перед мёржем обновляем мастер всегда

Полезные советы

Часто! Часто! Часто!

Всегда! Всегда! Всегда!

Если что то забыли

• git help <команда>

• git <команда> --help

• man git-<команда> (Открыть мануал Linux)

• irc.freenode.net, каналы #git и #github

• Перевод книги pro git http://git-scm.com/book/ru

Пример

• Проджектменеджер: Что ты делал вчера целый день?

• Разработчик: Я рефакторил класс MyBigModule, там было очень много работы?

• ПМ: Так где же он, этот класс?• Р:Неделю назад он был удалён в

главной ветке• ПМ:???

Ещё пример

• ПМ: ты говорил, что закончил этот функционал, почему его нет в релизе?

• Р: мне нужно смержиться с мастером, там много изменений

• ПМ: сколько можно мержиться?

• Р: мне нужна ещё неделя

• ПМ:!?!?!?

Советы

• Если гит матюкается, читаем лог и думаем – логи у гита хорошие

• Если чего то не знаем, идём в гугл - много материалов, на русском

• Читаем чудесную книгу pro.git – там много разумного – доброго – вечного

• Не знаем команду – лезем в хелп

Вопросы?

• Вопросы?

Аплодисменты

А я ещё на машинке, и лобзиком могу

Recommended