что такое Git и как с ним бороться
Transcript of что такое Git и как с ним бороться
Что такое 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 [email protected]
• git config --global user.email [email protected]
• 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 protected]</div>• =======• <div id="footer">• please contact us at [email protected]• </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 – там много разумного – доброго – вечного
• Не знаем команду – лезем в хелп
Вопросы?
• Вопросы?
Аплодисменты
А я ещё на машинке, и лобзиком могу