Table Of ContentPro Git
ScottChacon*
2012-08-31
*ThisisthePDFfilefortheProGitbookcontents. ItislicensedundertheCreativeCommonsAttribution-
Non Commercial-Share Alike 3.0 license. I hope you enjoy it, I hope it helps you learn Git, and I hope
you’llsupportApressandmebypurchasingaprintcopyofthebookatAmazon: http://tinyurl.com/
amazonprogit
Содержание
1 Введение 1
1.1 Обуправленииверсиями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Локальныесистемыуправленияверсиями . . . . . . . . . . . . . . . . . 1
1.1.2 Централизованныесистемыуправленияверсиями . . . . . . . . . . . . . 2
1.1.3 Распределённыесистемыконтроляверсий . . . . . . . . . . . . . . . . . 3
1.2 КраткаяисторияGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 ОсновыGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.1 Слепкивместопатчей. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.2 Почтивсеоперации—локальные . . . . . . . . . . . . . . . . . . . . . . 5
1.3.3 Gitследитзацелостностьюданных . . . . . . . . . . . . . . . . . . . . . 6
1.3.4 ЧащевсегоданныевGitтолькодобавляются. . . . . . . . . . . . . . . . 6
1.3.5 Трисостояния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 УстановкаGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.1 Установкаизисходников . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.2 УстановкавLinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.3 УстановканаMac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.4 УстановкавWindows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 ПервоначальнаянастройкаGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.1 Имяпользователя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.2 Выборредактора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.3 Утилитасравнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.4 Проверканастроек . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.6 Какполучитьпомощь? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 ОсновыGit 13
2.1 СозданиерепозиторияGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1 Созданиерепозиториявсуществующемкаталоге . . . . . . . . . . . . . 13
2.1.2 Клонированиесуществующегорепозитория . . . . . . . . . . . . . . . . 14
2.2 Записьизмененийврепозиторий . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.1 Определениесостоянияфайлов . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.2 Отслеживаниеновыхфайлов. . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.3 Индексацияизмененныхфайлов . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.4 Игнорированиефайлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.5 Просмотриндексированныхинеиндексированныхизменений . . . . . . 19
2.2.6 Фиксацияизменений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
iii
2.2.7 Игнорированиеиндексации . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.8 Удалениефайлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.9 Перемещениефайлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3 Просмотристориикоммитов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.1 Ограничениевыводакомандыlog . . . . . . . . . . . . . . . . . . . . . . 30
2.3.2 Использованиеграфическогоинтерфейсадлявизуализацииистории . . 31
2.4 Отменаизменений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.4.1 Изменениепоследнегокоммита . . . . . . . . . . . . . . . . . . . . . . . 32
2.4.2 Отменаиндексациифайла . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.4.3 Отменаизмененийфайла . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.5 Работасудалённымирепозиторями . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.5.1 Отображениеудалённыхрепозиториев . . . . . . . . . . . . . . . . . . . 34
2.5.2 Добавлениеудалённыхрепозиториев . . . . . . . . . . . . . . . . . . . . 35
2.5.3 FetchиPull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.5.4 Push . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.5.5 Инспекцияудалённогорепозитория . . . . . . . . . . . . . . . . . . . . . 37
2.5.6 Удалениеипереименованиеудалённыхрепозиториев . . . . . . . . . . . 38
2.6 Работасметками. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6.1 Просмотрметок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6.2 Созданиеметок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6.3 Аннотированныеметки . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6.4 Подписанныеметки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.6.5 Легковесныеметки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.6.6 Верификацияметок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.6.7 Выставлениеметокпозже . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.6.8 Обменметками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.7 Полезныесоветы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.7.1 Автоматическоедополнение . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.7.2 ПсевдонимывGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.8 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3 ВетвлениевGit 47
3.1 Чтотакоеветка? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2 Основыветвленияислияния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.2.1 Основыветвления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.2.2 Основыслияния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.2.3 Основыконфликтовприслиянии . . . . . . . . . . . . . . . . . . . . . . 57
3.3 Управлениеветками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.4 Приемыработысветками. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.4.1 Долгоживущиеветки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.4.2 Тематическиеветки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.5 Удалённыеветки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.5.1 Отправкаизменений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.5.2 Отслеживаниеветок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.5.3 Удалениеветокнаудалённомсервере . . . . . . . . . . . . . . . . . . . . 68
3.6 Перемещение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
iv
3.6.1 Основыперемещения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.6.2 Болееинтересныеперемещения . . . . . . . . . . . . . . . . . . . . . . . 70
3.6.3 Возможныерискиперемещения . . . . . . . . . . . . . . . . . . . . . . . 73
3.7 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4 Gitнасервере 77
4.1 Протоколы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.1.1 Локальныйпротокол . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Преимущества . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Недостатки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.1.2 ПротоколSSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Достоинства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Недостатки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.1.3 Git-протокол . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Достоинства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Недостатки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.1.4 ПротоколHTTP/S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Достоинства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Недостатки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.2 УстановкаGitнасервер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.2.1 Размещение«голого»репозиториянасервере . . . . . . . . . . . . . . . 82
4.2.2 Малыеустановки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
SSHдоступ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.3 СозданиеоткрытогоSSH-ключа . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.4 Настраиваемсервер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.5 Открытыйдоступ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.6 GitWeb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.7 Gitosis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.8 Gitolite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.8.1 Установка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.8.2 Изменениепараметровустановки . . . . . . . . . . . . . . . . . . . . . . 97
4.8.3 Конфигурационныйфайлиправилаконтролядоступа . . . . . . . . . . 97
4.8.4 Продвинутыйконтрольдоступасзапрещающимиправилами . . . . . . 98
4.8.5 Ограничениеpush-ейнаосновеизменённыхфайлов . . . . . . . . . . . 99
4.8.6 Персональныеветки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.8.7 «Шаблонные»репозитории . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.8.8 Другиефункции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.9 Git-демон . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.10 Git-хостинг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.10.1 GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.10.2 Настройкаучётнойзаписи . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.10.3 Созданиеновогорепозитория . . . . . . . . . . . . . . . . . . . . . . . . 105
4.10.4 ИмпортизSubversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.10.5 Добавлениеучастников . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.10.6 Вашпроект . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4.10.7 Ответвленияпроектов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
v
4.10.8 ЗаключениеоGitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4.11 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
5 РаспределённыйGit 111
5.1 Распределённыерабочиепроцессы . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.1.1 Централизованныйрабочийпроцесс . . . . . . . . . . . . . . . . . . . . 111
5.1.2 Рабочийпроцесссменеджеромпоинтеграции . . . . . . . . . . . . . . . 112
5.1.3 Рабочийпроцесссдиктаторомиегопомощниками . . . . . . . . . . . . 113
5.2 Содействиепроекту . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.2.1 Рекомендациипосозданиюкоммитов . . . . . . . . . . . . . . . . . . . . 115
5.2.2 Отдельнаямаленькаякоманда . . . . . . . . . . . . . . . . . . . . . . . . 117
5.2.3 Отдельнаякомандасменеджером . . . . . . . . . . . . . . . . . . . . . . 122
5.2.4 Небольшойоткрытыйпроект . . . . . . . . . . . . . . . . . . . . . . . . 126
5.2.5 Большойоткрытыйпроект . . . . . . . . . . . . . . . . . . . . . . . . . . 130
5.2.6 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
5.3 Сопровождениепроекта. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
5.3.1 Работастематическимиветками . . . . . . . . . . . . . . . . . . . . . . 133
5.3.2 Применениепатчей,отправленныхпопочте . . . . . . . . . . . . . . . . 134
Применениепатчейспомощьюкомандыapply . . . . . . . . . . . 134
Применениепатчейспомощьюкомандыam . . . . . . . . . . . . 135
5.3.3 Проверкаудалённыхветок . . . . . . . . . . . . . . . . . . . . . . . . . . 137
5.3.4 Определениевносимыхизменений . . . . . . . . . . . . . . . . . . . . . 138
5.3.5 Интегрированиечужихнаработок . . . . . . . . . . . . . . . . . . . . . . 140
Процессыслияния . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Рабочиепроцессыскрупнымислияниями . . . . . . . . . . . . . 142
Рабочиепроцессысперемещениямииотборомлучшего . . . . . 143
5.3.6 Отметкарелизов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
5.3.7 Генерацияномерасборки . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
5.3.8 Подготовкарелиза. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
5.3.9 Командаshortlog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
5.4 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
6 ИнструментыGit 149
6.1 Выборревизии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
6.1.1 Одиночныеревизии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
6.1.2 СокращенныйSHA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
6.1.3 НебольшоезамечаниеоSHA-1 . . . . . . . . . . . . . . . . . . . . . . . 150
6.1.4 Ссылкинаветки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
6.1.5 RefLog-сокращения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
6.1.6 Ссылкинапредков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.1.7 Диапазонкоммитов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Дветочки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Множествовершин . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Триточки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
6.2 Интерактивноеиндексирование . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
6.2.1 Добавлениеиудалениефайловизиндекса . . . . . . . . . . . . . . . . . 157
vi
6.2.2 Индексированиепочастям . . . . . . . . . . . . . . . . . . . . . . . . . . 159
6.3 Прятанье . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
6.3.1 Прятаньесвоихтрудов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
6.3.2 Откатпримененияспрятанныхизменений . . . . . . . . . . . . . . . . . 163
6.3.3 Созданиеветкиизспрятанныхизменений . . . . . . . . . . . . . . . . . 164
6.4 Перезаписьистории . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
6.4.1 Изменениепоследнегокоммита . . . . . . . . . . . . . . . . . . . . . . . 164
6.4.2 Изменениесообщенийнесколькихкоммитов . . . . . . . . . . . . . . . . 165
6.4.3 Переупорядочениекоммитов . . . . . . . . . . . . . . . . . . . . . . . . . 167
6.4.4 Уплотнениекоммитов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.4.5 Разбиениекоммита . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.4.6 Крайнеесредство: filter-branch . . . . . . . . . . . . . . . . . . . . . . . . 169
Удалениефайлаизовсехкоммитов . . . . . . . . . . . . . . . . . 170
Сделатьподкаталогновымкорнем . . . . . . . . . . . . . . . . . 170
Глобальноеименениеe-mailадреса . . . . . . . . . . . . . . . . . 170
6.5 ОтладкаспомощьюGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
6.5.1 Аннотацияфайла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
6.5.2 Бинарныйпоиск . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
6.6 Подмодули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
6.6.1 Началоиспользованияподмодулей . . . . . . . . . . . . . . . . . . . . . 175
6.6.2 Клонированиепроектасподмодулями . . . . . . . . . . . . . . . . . . . 177
6.6.3 Суперпроекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
6.6.4 Проблемысподмодулями . . . . . . . . . . . . . . . . . . . . . . . . . . 179
6.7 Слияниеподдеревьев . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
6.8 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
7 НастройкаGit 185
7.1 КонфигурированиеGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
7.1.1 Основныенастройкиклиента . . . . . . . . . . . . . . . . . . . . . . . . 186
core.editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
commit.template . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
core.pager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
user.signingkey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
core.excludesfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
help.autocorrect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
7.1.2 ЦветавGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
color.ui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
color.*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
7.1.3 Внешниеутилитыmergeиdiff . . . . . . . . . . . . . . . . . . . . . . . . 189
7.1.4 Форматированиеипробельныесимволы . . . . . . . . . . . . . . . . . . 192
core.autocrlf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
core.whitespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
7.1.5 Настройкасервера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
receive.fsckObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
receive.denyNonFastForwards . . . . . . . . . . . . . . . . . . . . . 194
receive.denyDeletes . . . . . . . . . . . . . . . . . . . . . . . . . . 194
vii
7.2 Git-атрибуты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
7.2.1 Бинарныефайлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Определениебинарныхфайлов . . . . . . . . . . . . . . . . . . . 195
Получениедельтыдлябинарныхфайлов . . . . . . . . . . . . . . 196
ДокументыMSWord . . . . . . . . . . . . . . . . . . . . . . . . . 196
ТекстовыефайлывформатеOpenDocument . . . . . . . . . . . . 197
Изображения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
7.2.2 Развёртываниеключа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
7.2.3 Экспортрепозитория . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
export-ignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
export-subst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
7.2.4 Стратегиислияния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
7.3 ПерехватчикивGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
7.3.1 Установкаперехватчика . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
7.3.2 Перехватчикинасторонеклиента . . . . . . . . . . . . . . . . . . . . . . 204
Перехватчикидляработыскоммитами . . . . . . . . . . . . . . . 204
Перехватчикидляработысe-mail . . . . . . . . . . . . . . . . . . 205
Другиеклиентскиеперехватчики . . . . . . . . . . . . . . . . . . 205
7.3.3 Перехватчикинасторонесервера . . . . . . . . . . . . . . . . . . . . . . 206
pre-receiveиpost-receive . . . . . . . . . . . . . . . . . . . . . . . 206
update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
7.4 ПримернавязыванияполитикиспомощьюGit . . . . . . . . . . . . . . . . . . . 207
7.4.1 Перехватчикнасторонесервера . . . . . . . . . . . . . . . . . . . . . . . 207
Установкаособогоформатасообщенийкоммитов . . . . . . . . . 207
Настройкасистемыконтролядоступадляпользователей . . . . . 209
Разрешениетолькообновлений-перемоток . . . . . . . . . . . . . 211
7.4.2 Перехватчикинасторонеклиента . . . . . . . . . . . . . . . . . . . . . . 213
7.5 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
8 Gitидругиесистемыуправленияверсиями 219
8.1 GitиSubversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
8.1.1 gitsvn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
8.1.2 Настройка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
8.1.3 Приступимкработе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
8.1.4 КоммитвSubversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
8.1.5 Получениеновыхизменений . . . . . . . . . . . . . . . . . . . . . . . . . 224
8.1.6 ПроблемысветвлениемвGit . . . . . . . . . . . . . . . . . . . . . . . . 226
8.1.7 ВетвлениевSubversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
СозданиеновойветкивSVN . . . . . . . . . . . . . . . . . . . . . 227
8.1.8 Переключениеактивныхветок . . . . . . . . . . . . . . . . . . . . . . . . 227
8.1.9 КомандыSubversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
ПросмотристориивстилеSVN . . . . . . . . . . . . . . . . . . . 228
SVN-Аннотации . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
ИнформацияоSVN-сервере . . . . . . . . . . . . . . . . . . . . . 229
Игнорированиетого,чтоигнорируетSubversion . . . . . . . . . . 229
8.1.10 ЗаключениепоGit-Svn . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
viii
8.2 МиграциянаGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
8.2.1 Импортирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
8.2.2 Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
8.2.3 Perforce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
8.2.4 Собственнаяутилитадляимпорта . . . . . . . . . . . . . . . . . . . . . . 234
8.3 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
9 Gitизнутри 241
9.1 Сантехникаифарфор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
9.2 ОбъектывGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
9.2.1 Объекты-деревья . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
9.2.2 Объекты-коммиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
9.2.3 Хранениеобъектов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
9.3 СсылкивGit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
9.3.1 HEAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
9.3.2 Метки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
9.3.3 Ссылкинаудалённыеветки . . . . . . . . . . . . . . . . . . . . . . . . . 254
9.4 Pack-файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
9.5 Спецификацииссылок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
9.5.1 Спецификацииссылокдлякомандыpush . . . . . . . . . . . . . . . . . . 260
9.5.2 Удалениессылок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
9.6 Протоколыпередачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
9.6.1 Тупойпротокол . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
9.6.2 Умныйпротокол . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Загрузкаданных . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Скачиваниеданных . . . . . . . . . . . . . . . . . . . . . . . . . . 264
9.7 Обслуживаниеивосстановлениеданных . . . . . . . . . . . . . . . . . . . . . . 265
9.7.1 Обслуживание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
9.7.2 Восстановлениеданных . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
9.7.3 Удалениеобъектов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
9.8 Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
ix