- •Введение
 - •Об управлении версиями
 - •Локальные системы управления версиями
 - •Централизованные системы управления версиями
 - •Распределённые системы контроля версий
 - •Краткая история Git
 - •Основы Git
 - •Слепки вместо патчей
 - •Почти все операции — локальные
 - •Git следит за целостностью данных
 - •Чаще всего данные в Git только добавляются
 - •Три состояния
 - •Установка Git
 - •Установка из исходников
 - •Установка в Linux
 - •Установка на Mac
 - •Установка в Windows
 - •Первоначальная настройка Git
 - •Имя пользователя
 - •Выбор редактора
 - •Утилита сравнения
 - •Проверка настроек
 - •Как получить помощь?
 - •Итоги
 - •Основы Git
 - •Создание репозитория Git
 - •Создание репозитория в существующем каталоге
 - •Клонирование существующего репозитория
 - •Запись изменений в репозиторий
 - •Определение состояния файлов
 - •Отслеживание новых файлов
 - •Индексация измененных файлов
 - •Игнорирование файлов
 - •Просмотр индексированных и неиндексированных изменений
 - •Фиксация изменений
 - •Игнорирование индексации
 - •Удаление файлов
 - •Перемещение файлов
 - •Просмотр истории коммитов
 - •Ограничение вывода команды log
 - •Использование графического интерфейса для визуализации истории
 - •Отмена изменений
 - •Изменение последнего коммита
 - •Отмена индексации файла
 - •Отмена изменений файла
 - •Работа с удалёнными репозиторями
 - •Отображение удалённых репозиториев
 - •Добавление удалённых репозиториев
 - •Fetch и Pull
 - •Push
 - •Инспекция удалённого репозитория
 - •Удаление и переименование удалённых репозиториев
 - •Работа с метками
 - •Просмотр меток
 - •Создание меток
 - •Аннотированные метки
 - •Подписанные метки
 - •Легковесные метки
 - •Верификация меток
 - •Выставление меток позже
 - •Обмен метками
 - •Полезные советы
 - •Автоматическое дополнение
 - •Псевдонимы в Git
 - •Итоги
 - •Ветвление в Git
 - •Что такое ветка?
 - •Основы ветвления и слияния
 - •Основы ветвления
 - •Основы слияния
 - •Основы конфликтов при слиянии
 - •Управление ветками
 - •Приемы работы с ветками
 - •Долгоживущие ветки
 - •Тематические ветки
 - •Удалённые ветки
 - •Отправка изменений
 - •Отслеживание веток
 - •Удаление веток на удалённом сервере
 - •Перемещение
 - •Основы перемещения
 - •Более интересные перемещения
 - •Возможные риски перемещения
 - •Итоги
 - •Git на сервере
 - •Протоколы
 - •Локальный протокол
 - •Преимущества
 - •Недостатки
 - •Протокол SSH
 - •Достоинства
 - •Недостатки
 - •Git-протокол
 - •Достоинства
 - •Недостатки
 - •Протокол HTTP/S
 - •Достоинства
 - •Недостатки
 - •Установка Git на сервер
 - •Размещение «голого» репозитория на сервере
 - •Малые установки
 - •SSH доступ
 - •Создание открытого SSH-ключа
 - •Настраиваем сервер
 - •Открытый доступ
 - •GitWeb
 - •Gitosis
 - •Gitolite
 - •Установка
 - •Изменение параметров установки
 - •Конфигурационный файл и правила контроля доступа
 - •Продвинутый контроль доступа с запрещающими правилами
 - •Ограничение push-ей на основе изменённых файлов
 - •Персональные ветки
 - •«Шаблонные» репозитории
 - •Другие функции
 - •Git-демон
 - •Git-хостинг
 - •GitHub
 - •Настройка учётной записи
 - •Создание нового репозитория
 - •Импорт из Subversion
 - •Добавление участников
 - •Ваш проект
 - •Ответвления проектов
 - •Заключение о GitHub
 - •Итоги
 - •Распределённый Git
 - •Распределённые рабочие процессы
 - •Централизованный рабочий процесс
 - •Рабочий процесс с менеджером по интеграции
 - •Рабочий процесс с диктатором и его помощниками
 - •Содействие проекту
 - •Рекомендации по созданию коммитов
 - •Отдельная маленькая команда
 - •Отдельная команда с менеджером
 - •Небольшой открытый проект
 - •Большой открытый проект
 - •Итоги
 - •Сопровождение проекта
 - •Работа с тематическими ветками
 - •Применение патчей, отправленных по почте
 - •Применение патчей с помощью команды apply
 - •Применение патчей с помощью команды am
 - •Проверка удалённых веток
 - •Определение вносимых изменений
 - •Интегрирование чужих наработок
 - •Процессы слияния
 - •Рабочие процессы с крупными слияниями
 - •Рабочие процессы с перемещениями и отбором лучшего
 - •Отметка релизов
 - •Генерация номера сборки
 - •Подготовка релиза
 - •Команда shortlog
 - •Итоги
 - •Инструменты Git
 - •Выбор ревизии
 - •Одиночные ревизии
 - •Сокращенный SHA
 - •Небольшое замечание о SHA-1
 - •Ссылки на ветки
 - •RefLog-сокращения
 - •Ссылки на предков
 - •Диапазон коммитов
 - •Две точки
 - •Множество вершин
 - •Три точки
 - •Интерактивное индексирование
 - •Добавление и удаление файлов из индекса
 - •Индексирование по частям
 - •Прятанье
 - •Прятанье своих трудов
 - •Откат применения спрятанных изменений
 - •Создание ветки из спрятанных изменений
 - •Перезапись истории
 - •Изменение последнего коммита
 - •Изменение сообщений нескольких коммитов
 - •Переупорядочение коммитов
 - •Уплотнение коммитов
 - •Разбиение коммита
 - •Крайнее средство: filter-branch
 - •Удаление файла изо всех коммитов
 - •Сделать подкаталог новым корнем
 - •Отладка с помощью Git
 - •Аннотация файла
 - •Бинарный поиск
 - •Подмодули
 - •Начало использования подмодулей
 - •Клонирование проекта с подмодулями
 - •Суперпроекты
 - •Проблемы с подмодулями
 - •Слияние поддеревьев
 - •Итоги
 - •Настройка Git
 - •Конфигурирование Git
 - •Основные настройки клиента
 - •core.editor
 - •commit.template
 - •core.pager
 - •user.signingkey
 - •core.excludesfile
 - •help.autocorrect
 - •Цвета в Git
 - •color.ui
 - •color.*
 - •Внешние утилиты merge и diff
 - •Форматирование и пробельные символы
 - •core.autocrlf
 - •core.whitespace
 - •Настройка сервера
 - •receive.fsckObjects
 - •receive.denyNonFastForwards
 - •receive.denyDeletes
 - •Git-атрибуты
 - •Бинарные файлы
 - •Определение бинарных файлов
 - •Получение дельты для бинарных файлов
 - •Документы MS Word
 - •Текстовые файлы в формате OpenDocument
 - •Изображения
 - •Развёртывание ключа
 - •Экспорт репозитория
 - •export-ignore
 - •export-subst
 - •Стратегии слияния
 - •Перехватчики в Git
 - •Установка перехватчика
 - •Перехватчики на стороне клиента
 - •Перехватчики для работы с коммитами
 - •Другие клиентские перехватчики
 - •Перехватчики на стороне сервера
 - •update
 - •Пример навязывания политики с помощью Git
 - •Перехватчик на стороне сервера
 - •Установка особого формата сообщений коммитов
 - •Настройка системы контроля доступа для пользователей
 - •Перехватчики на стороне клиента
 - •Итоги
 - •Git и Subversion
 - •Настройка
 - •Приступим к работе
 - •Коммит в Subversion
 - •Получение новых изменений
 - •Проблемы с ветвлением в Git
 - •Ветвление в Subversion
 - •Создание новой ветки в SVN
 - •Переключение активных веток
 - •Команды Subversion
 - •Просмотр истории в стиле SVN
 - •SVN-Аннотации
 - •Игнорирование того, что игнорирует Subversion
 - •Заключение по Git-Svn
 - •Миграция на Git
 - •Импортирование
 - •Subversion
 - •Perforce
 - •Собственная утилита для импорта
 - •Итоги
 - •Git изнутри
 - •Сантехника и фарфор
 - •Объекты в Git
 - •Объекты-деревья
 - •Объекты-коммиты
 - •Хранение объектов
 - •Ссылки в Git
 - •HEAD
 - •Метки
 - •Ссылки на удалённые ветки
 - •Pack-файлы
 - •Спецификации ссылок
 - •Спецификации ссылок для команды push
 - •Удаление ссылок
 - •Протоколы передачи
 - •Тупой протокол
 - •Умный протокол
 - •Загрузка данных
 - •Скачивание данных
 - •Обслуживание и восстановление данных
 - •Обслуживание
 - •Восстановление данных
 - •Удаление объектов
 - •Итоги
 
Глава 8 Git и другие системы управления версиями  | 
	Scott Chacon Pro Git  | 
ограничениями. Во избежание проблем вы должны удалить локальную ветку (в нашем случае opera) после того, как вы вольёте её в trunk.
8.1.9 Команды Subversion
Набор утилит git svn предоставляет в ваше распоряжение несколько команд для облегчения перехода на Git, путём предоставления функциональности, подобной той, которую вы имеете
в Subversion. Ниже приведены несколько команд, которые дают вам то, что вы имели в Subversion.
Просмотр истории в стиле SVN Если вы привыкли к Subversion и хотите просматривать историю в стиле SVN, выполните команду git svn log, чтобы увидеть историю коммитов в формате таком же как в SVN:
$ git svn log
------------------------------------------------------------------------
r87 | schacon | 2009-05-02 16:07:37 -0700 (Sat, 02 May 2009) | 2 lines
autogen change
------------------------------------------------------------------------
r86 | schacon | 2009-05-02 16:00:21 -0700 (Sat, 02 May 2009) | 2 lines
Merge branch 'experiment'
------------------------------------------------------------------------
r85 | schacon | 2009-05-02 16:00:09 -0700 (Sat, 02 May 2009) | 2 lines
updated the changelog
Вы должны знать две важные вещи о команде git svn log. Во-первых, она работает в оффлайне, в отличие от оригинальной команды svn log, которая запрашивает информацию с сервера Subversion. Во-вторых, эта команда отображает только те коммиты, которые были переданы на сервер Subversion. Локальные коммиты Git, которые вы ещё не отправили с помощью dcommit не будут отображаться, равно как и коммиты, отправленные на сервер
Subversion другими людьми с момента последнего выполнения dcommit. Результат действия этой команды скорее похож на последнее известное состояние изменений на сервере Subversion.
SVN-Аннотации Так же как команда git svn log симулирует в оффлайне команду svn log, эквивалентом команды svn annotate является команда git svn blame [ФАЙЛ].
Её вывод выглядит следующим образом:
$ git svn blame README.txt
2temporal Protocol Buffers - Google's data interchange format
2temporal Copyright 2008 Google Inc.
2temporal http://code.google.com/apis/protocolbuffers/
2temporal
228
Scott Chacon Pro Git  | 
	Раздел 8.1 Git и Subversion  | 
||
  | 
	
  | 
	
  | 
|
22  | 
	temporal C++ Installation - Unix  | 
	
  | 
|
22  | 
	temporal =======================  | 
	
  | 
|
2  | 
	temporal  | 
	
  | 
	
  | 
79  | 
	schacon Committing in git-svn.  | 
	
  | 
|
78  | 
	schacon  | 
	
  | 
	
  | 
2  | 
	temporal  | 
	To build and install the C++ Protocol Buffer runtime and the Protocol  | 
|
2  | 
	temporal  | 
	Buffer compiler (protoc) execute the following:  | 
	
  | 
2  | 
	temporal  | 
	
  | 
	
  | 
  | 
	
  | 
	
  | 
	
  | 
Опять же, эта команда не показывает коммиты, которые вы сделали локально в Git или те,
которые за то время были отправлены на Subversion-сервер.
Информация о SVN-сервере Вы можете получить ту же информацию, которую даёт выполнение команды svn info, выполнив команду git svn info:
$ git svn info Path: .
URL: https://schacon-test.googlecode.com/svn/trunk
Repository Root: https://schacon-test.googlecode.com/svn
Repository UUID: 4c93b258-373f-11de-be05-5f7a86268029
Revision: 87
Node Kind: directory
Schedule: normal
Last Changed Author: schacon
Last Changed Rev: 87
Last Changed Date: 2009-05-02 16:07:37 -0700 (Sat, 02 May 2009)
Так же, как blame и log, эта команда выполняется оффлайн и выводит информацию,
актуальную на момент последнего вашего обращения к серверу Subversion.
Игнорирование того, что игнорирует Subversion Если вы клонируете репозиторий Subversion, в котором где-то установлены свойства svn:ignore, скорее всего вы захотите создать соответствующие им файлы .gitignore, чтобы ненароком не добавить в коммит те файлы,
которые не стоит добавлять. Для решения этой проблемы в git svn имеется две команды.
Первая — git svn create-ignore — автоматически создаст соответствующие файлы
.gitignore, и затем вы можете добавить их в свой следующий коммит.
Вторая команда — git svn show-ignore, которая выводит на стандартный вывод строки, которые вы должны включить в файл .gitignore. Таким образом вы можете перенаправить вывод этой команды в файл исключений вашего проекта:
$ git svn show-ignore > .git/info/exclude
Поступая таким образом, вы не захламляете проект файлами .gitignore. Это правильный подход, если вы являетесь единственным пользователем Git в команде, использующей Subversion, и ваши коллеги выступают против наличия файлов .gitignore в проекте.
229
