Содержание
Предисловие от Скотта Чакона ......................................................................... 16
Предисловие от Бена Страуба ........................................................................... 18
1. Начало работы ................................................................................................ 19
Управление версиями............................................................................................19
Локальные системы контроля версий ................................................................20
Централизованные системы контроля версий....................................................20
Распределенные системы контроля версий........................................................21
Краткая история Git............................................................................................... 23
Основы Git.............................................................................................................23
Снимки состояний, а не изменений ...................................................................24
Локальность операций ......................................................................................25
Целостность Git.................................................................................................26
Git, как правило, только добавляет данные.......................................................26
Три состояния ...................................................................................................26
Командная строка.................................................................................................. 28
Установка Git.........................................................................................................28
Установка в Linux ..............................................................................................29
Установка в Mac ................................................................................................29
Установка в Windows.........................................................................................30
Первая настройка Git.............................................................................................31
Ваш идентификатор ..........................................................................................31
Краткое содержание  7
Выбор редактора...............................................................................................32
Проверка настроек ............................................................................................32
Получение справочной информации......................................................................33
Заключение...........................................................................................................33
2. Основы Git ....................................................................................................... 34
Создание репозитория в Git...................................................................................34
Инициализация репозитория в существующей папке.........................................34
Клонирование существующего репозитория......................................................35
Запись изменений в репозиторий ..........................................................................36
Проверка состояния файлов..............................................................................37
Слежение за новыми файлами ..........................................................................37
Индексация измененных файлов .......................................................................38
Краткий отчет о состоянии................................................................................39
Игнорирование файлов .....................................................................................40
Просмотр индексированных и неиндексированных изменений ..........................41
Фиксация изменений .........................................................................................43
Пропуск области индексирования......................................................................45
Удаление файлов ..............................................................................................45
Перемещение файлов .......................................................................................47
Просмотр истории версий......................................................................................47
Ограничение вывода команды log .....................................................................52
Отмена изменений................................................................................................. 54
Отмена индексирования....................................................................................55
Отмена внесенных в файл изменений ...............................................................56
Удаленные репозитории ........................................................................................57
Отображение удаленных репозиториев.............................................................57
Добавление удаленных репозиториев ...............................................................58
Извлечение данных из удаленных репозиториев...............................................59
Отправка данных в удаленный репозиторий......................................................59
Просмотр удаленных репозиториев...................................................................60
Удаление и переименование удаленных репозиториев......................................61
Теги ......................................................................................................................61
Вывод списка тегов ...........................................................................................62
Создание тегов..................................................................................................62
Теги с комментариями.......................................................................................62
Легковесные теги..............................................................................................63
Расстановка тегов постфактум ..........................................................................63
Обмен тегами....................................................................................................64
Псевдонимы в Git .................................................................................................. 65
Заключение...........................................................................................................66
8   Краткое содержание
3. Ветвления в Git ............................................................................................... 67
Суть ветвления...................................................................................................... 67
Создание новой ветки .......................................................................................70
Смена веток ......................................................................................................71
Основы ветвления и слияния.................................................................................74
Основы ветвления.............................................................................................74
Основы слияния ................................................................................................78
Конфликты при слиянии....................................................................................80
Управление ветками..............................................................................................82
Приемы работы с ветками .....................................................................................83
Долгоживущие ветки.........................................................................................84
Тематические ветки ..........................................................................................85
Удаленные ветки................................................................................................... 87
Отправка данных...............................................................................................91
Слежение за ветками ........................................................................................92
Получение данных с последующим слиянием....................................................94
Ликвидация веток с удаленного сервера ...........................................................94
Перемещение данных............................................................................................94
Основы перемещения данных............................................................................94
Более интересные варианты перемещений........................................................97
Риски, связанные с перемещением....................................................................99
Перемещение после перемещения .................................................................. 102
Сравнение перемещения и слияния................................................................. 103
Заключение......................................................................................................... 104
4. Git на сервере................................................................................................ 105
Протоколы........................................................................................................... 106
Локальный протокол ....................................................................................... 106
Протоколы семейства HTTP ............................................................................. 107
Протокол SSH.................................................................................................. 110
Протокол Git.................................................................................................... 111
Настройка Git на сервере..................................................................................... 111
Размещение на сервере голого репозитория ................................................... 112
Простые настройки.......................................................................................... 113
Создание открытого ключа SSH........................................................................... 114
Настройка сервера .............................................................................................. 115
Git-демон............................................................................................................. 117
Интеллектуальный протокол HTTP....................................................................... 119
Интерфейс GitWeb ............................................................................................... 120
Приложение GitLab.............................................................................................. 122
Краткое содержание  9
Установка........................................................................................................ 122
Администрирование ........................................................................................ 123
Пользователи.................................................................................................. 124
Группы............................................................................................................ 124
Проекты.......................................................................................................... 125
Хуки ................................................................................................................ 126
Базовое применение ....................................................................................... 126
Совместная работа.......................................................................................... 126
Сторонний хостинг .............................................................................................. 127
Заключение......................................................................................................... 128
5. Распределенная система Git ........................................................................ 129
Распределенные рабочие процессы..................................................................... 129
Централизованная работа ............................................................................... 130
Диспетчер интеграции .................................................................................... 131
Диктатор и помощники.................................................................................... 132
Заключение..................................................................................................... 133
Содействие проекту............................................................................................. 133
Рекомендации по созданию коммитов ............................................................. 134
Работа в маленькой группе ............................................................................. 136
Маленькая группа с руководителем................................................................. 142
Открытый проект, ветвление........................................................................... 146
Открытый проект, электронная почта ............................................................. 150
Заключение..................................................................................................... 153
Сопровождение проекта...................................................................................... 153
Работа с тематическими ветками..................................................................... 153
Исправления, присланные по почте ................................................................ 154
Просмотр вносимых изменений ....................................................................... 158
Интеграция чужих наработок .......................................................................... 159
Схема с большим количеством слияний........................................................... 162
Схема с перемещением и отбором................................................................... 163
Программный компонент rerere ....................................................................... 165
Идентификация устойчивых версий................................................................. 165
Генерация номера сборки................................................................................ 166
Подготовка устойчивой версии........................................................................ 167
Команда shortlog ............................................................................................. 167
Заключение......................................................................................................... 168
6. GitHub ............................................................................................................ 169
Настройка и конфигурирование учетной записи.................................................. 170
Доступ по протоколу SSH ................................................................................ 170
Аватар............................................................................................................. 172
10   Краткое содержание
Адреса электронной почты.............................................................................. 173
Аутентификация по двум признакам................................................................ 173
Содействие проекту............................................................................................. 174
Ветвления проектов ........................................................................................ 175
Схема работы с GitHub .................................................................................... 175
Запрос на включение ...................................................................................... 176
Стадии обработки запроса на включение ........................................................ 180
Более сложные запросы на включение............................................................ 183
Язык разметки Markdown................................................................................. 188
GitHub-версия языка Markdown........................................................................ 188
Сопровождение проекта...................................................................................... 193
Создание нового репозитория ......................................................................... 193
Добавление соавторов .................................................................................... 194
Управление запросами на включение.............................................................. 195
Упоминания и уведомления............................................................................. 201
Специальные файлы ....................................................................................... 204
Администрирование проекта ........................................................................... 206
Управление организацией ................................................................................... 207
Основные сведения об организации................................................................ 207
Группы............................................................................................................ 208
Журнал регистрации ....................................................................................... 210
GitHub-сценарии.................................................................................................. 210
Хуки ................................................................................................................ 211
API для GitHub................................................................................................. 214
От пользователя Octokit .................................................................................. 220
Заключение......................................................................................................... 220
7. Git-инструментарий...................................................................................... 221
Выбор версии ...................................................................................................... 221
Одна версия.................................................................................................... 221
Сокращения журнала ссылок........................................................................... 224
Диапазоны коммитов....................................................................................... 226
Интерактивное индексирование .......................................................................... 229
Индексирование файлов и его отмена............................................................. 229
Индексирование изменений............................................................................. 231
Скрытие и очистка............................................................................................... 232
Скрытие вашей работы.................................................................................... 233
Более сложные варианты скрытия................................................................... 235
Отмена скрытых изменений............................................................................. 236
Создание ветки из скрытого фрагмента........................................................... 236
Очистка рабочей папки ................................................................................... 237
Краткое содержание  11
Подпись............................................................................................................... 238
Знакомство с GPG............................................................................................ 239
Подпись тегов ................................................................................................. 239
Проверка тегов ............................................................................................... 240
Подпись коммитов........................................................................................... 240
Подпись должна быть у всех ........................................................................... 242
Поиск .................................................................................................................. 242
Команда git grep.............................................................................................. 242
Поиск в Git-журнале ........................................................................................ 244
Поиск по строкам кода .................................................................................... 244
Перезапись истории ............................................................................................ 245
Редактирование последнего коммита .............................................................. 246
Редактирование нескольких сообщений фиксации .......................................... 246
Изменение порядка следования коммитов....................................................... 248
Объединение коммитов ................................................................................... 249
Разбиение коммита ......................................................................................... 250
Последнее средство: команда filter-branch....................................................... 251
Команда reset...................................................................................................... 252
Три дерева...................................................................................................... 253
Рабочий процесс ............................................................................................. 254
Роль команды reset.......................................................................................... 259
Команда reset с указанием пути ...................................................................... 263
Объединение коммитов ................................................................................... 265
Сравнение с командой checkout....................................................................... 267
Заключение..................................................................................................... 269
Более сложные варианты слияния....................................................................... 269
Конфликты слияния ........................................................................................ 270
Прерывание слияния....................................................................................... 272
Игнорирование пробелов ................................................................................ 272
Слияние файлов вручную................................................................................ 273
Применение команды checkout........................................................................ 276
Протоколирование слияния............................................................................. 277
Комбинированный формат .............................................................................. 278
Отмена результатов слияния........................................................................... 280
Другие типы слияния ...................................................................................... 284
Команда rerere .................................................................................................... 287
Отладка с помощью Git........................................................................................ 292
Примечания к файлам..................................................................................... 293
Двоичный поиск .............................................................................................. 294
Подмодули .......................................................................................................... 296
Начало работы................................................................................................ 296
Клонирование проекта с подмодулями ............................................................ 298
12   Краткое содержание
Работа над проектом с подмодулями............................................................... 300
Публикация результатов редактирования подмодуля ...................................... 305
Слияние результатов редактирования подмодуля ........................................... 306
Полезные советы............................................................................................. 309
Пакеты ................................................................................................................ 313
Замена ................................................................................................................ 316
Хранение учетных данных ................................................................................... 322
Взгляд изнутри................................................................................................ 323
Нестандартный вариант хранения учетных данных ......................................... 325
Заключение......................................................................................................... 327
8. Настройка системы Git ................................................................................. 328
Конфигурирование системы Git ........................................................................... 328
Основные настройки на стороне клиента ........................................................ 329
Цвета в Git ...................................................................................................... 331
Внешние инструменты для слияния и индикации изменений ........................... 332
Форматирование и пробелы ............................................................................ 336
Настройка сервера .......................................................................................... 338
Git-атрибуты........................................................................................................ 339
Бинарные файлы............................................................................................. 339
Развертывание ключа ..................................................................................... 342
Экспорт репозитория....................................................................................... 345
Стратегии слияния .......................................................................................... 346
Git-хуки ............................................................................................................... 347
Установка хука ................................................................................................ 347
Хуки на стороне клиента ................................................................................. 347
Хуки для работы с коммитами ......................................................................... 347
Хуки для работы с электронной почтой ........................................................... 348
Другие клиентские хуки .................................................................................. 349
Хуки на стороне сервера ................................................................................. 350
Пример принудительного внедрения политики.................................................... 351
Хук на стороне сервера ................................................................................... 351
Формат сообщения фиксации .......................................................................... 352
Система контроля доступа пользователей....................................................... 353
Тестирование .................................................................................................. 356
Хуки на стороне клиента ................................................................................. 357
Заключение......................................................................................................... 360
9. Git и другие системы контроля версий....................................................... 361
Git в качестве клиента......................................................................................... 361
Git и Subversion ............................................................................................... 362
Git и Mercurial.................................................................................................. 372
Краткое содержание  13
Git и Perforce ................................................................................................... 380
Git и TFS.......................................................................................................... 394
Переход на Git..................................................................................................... 404
Subversion ....................................................................................................... 404
Mercurial.......................................................................................................... 406
Perforce ........................................................................................................... 408
TFS.................................................................................................................. 410
Другие варианты импорта ............................................................................... 411
Заключение......................................................................................................... 417
10. Git изнутри .................................................................................................. 418
Канализация и фарфор ....................................................................................... 419
Объекты в Git ...................................................................................................... 420
Объекты-деревья ............................................................................................ 421
Объекты-коммиты ........................................................................................... 424
Хранение объектов.......................................................................................... 427
Ссылки в Git ........................................................................................................ 428
Указатель HEAD............................................................................................... 429
Теги ................................................................................................................ 430
Удаленные ветки............................................................................................. 431
Pack-файлы ......................................................................................................... 432
Спецификация ссылок ......................................................................................... 435
Спецификация ссылок для отправки данных на сервер ................................... 437
Ликвидация ссылок ......................................................................................... 437
Протоколы передачи данных............................................................................... 438
Простой протокол ........................................................................................... 438
Интеллектуальный протокол ........................................................................... 440
Обслуживание репозитория и восстановление данных ........................................ 444
Обслуживание репозитория ............................................................................ 444
Восстановление данных .................................................................................. 445
Удаление объектов.......................................................................................... 447
Переменные среды.............................................................................................. 451
Глобальное поведение .................................................................................... 451
Расположение репозитория............................................................................. 451
Пути доступа................................................................................................... 452
Фиксация изменений ....................................................................................... 453
Работа в сети .................................................................................................. 453
Определение изменений и слияние ................................................................. 454
Отладка........................................................................................................... 454
Разное............................................................................................................. 456
Заключение......................................................................................................... 457
14   Краткое содержание
Приложение A. Git в других средах................................................................. 458
Графические интерфейсы.................................................................................... 458
Утилиты gitk и git-gui....................................................................................... 459
GitHub-клиенты для Mac и Windows................................................................. 461
Подводя итоги................................................................................................. 464
Другие GUI.......................................................................................................... 464
Git в Visual Studio................................................................................................. 465
Git в Eclipse.......................................................................................................... 466
Git в Bash ............................................................................................................ 466
Git в Zsh .............................................................................................................. 468
Git в Powershell.................................................................................................... 469
Заключение......................................................................................................... 470
Приложение Б. Встраивание Git в приложения ............................................. 471
Командная строка................................................................................................ 471
Libgit2.................................................................................................................. 472
Нетривиальная функциональность .................................................................. 474
Другие привязки ............................................................................................. 476
Приложение В. Git-команды............................................................................ 478
Настройка и конфигурирование........................................................................... 478
Копирование и создание проектов....................................................................... 479
Фиксация состояния ............................................................................................ 480
Ветвления и слияния ........................................................................................... 483
Совместная работа и обновление проектов ......................................................... 486
Проверка и сравнение ......................................................................................... 489
Отладка............................................................................................................... 490
Исправления ....................................................................................................... 490
Электронная почта .............................................................................................. 491
Внешние системы ................................................................................................ 492
Администрирование............................................................................................. 493
Служебные команды............................................................................................ 494
Об авторах......................................................................................................... 495