Mercurial: Полное руководство

Bryan O'Sullivan


Содержание

Предисловие
1. Технические детали
2. Спасибо за поддержку Mercurial
3. Благодарности
4. Соглашения, принятые в этой книге
5. Использование примеров кода
6. Safari® Books Online
7. Как с нами связаться
1. Как мы сюда попали?
1.1. Зачем нужен контроль версий? Почему Mercurial?
1.1.1. Зачем использовать систему контроля версий?
1.1.2. Множество названий для контроля версий
1.2. О примерах в этой книге
1.3. Тенденции в этой области
1.4. Некоторые из преимуществ распределенных систем контроля версий
1.4.1. Преимущества для проектов с открытым исходным кодом
1.4.2. Преимущества для коммерческих проектов
1.5. Почему следует остановить выбор на Mercurial?
1.6. Сравнение Mercurial с другими системами контроля версий
1.6.1. Subversion
1.6.2. Git
1.6.3. CVS
1.6.4. Коммерческий инструментарий
1.6.5. Выбор системы контроля версий
1.7. Переход с других систем контроля версий на Mercurial
1.8. Краткая история контроля версий
2. Экскурсия по Mercurial: основы
2.1. Установка Mercurial на вашем компьютере
2.1.1. Windows
2.1.2. Mac OS X
2.1.3. Linux
2.1.4. Solaris
2.2. Начало работы
2.2.1. Встроенная справка
2.3. Работа с репозиторием
2.3.1. Создание локальной копии репозитория
2.3.2. Что есть в репозитории?
2.4. Путешествие по истории
2.4.1. Изменения, ревизии и общение с другими людьми
2.4.2. Просмотр определенных ревизий
2.4.3. Подробности
2.5. Об опциях команд
2.6. Создание и анализ изменений
2.7. Запись изменений в новую ревизию
2.7.1. Установка имени пользователя
2.7.2. Описание ревизии
2.7.3. Написание хорошего сообщения к коммиту ревизии
2.7.4. Отмена публикации ревизии
2.7.5. Полюбуемся на наше творение
2.8. Распространение изменений
2.8.1. Получение (вытягивание) изменений из другого репозитория
2.8.2. Обновление рабочего каталога
2.8.3. Передача (проталкивание) изменений в другой репозиторий
2.8.4. Размещение по умолчанию
2.8.5. Распространение изменений по сети
2.9. Начало нового проекта
3. Экскурсия по Mercurial: слияние результатов работы
3.1. Слияние потоков работы
3.1.1. Головная ревизия
3.1.2. Выполнение слияния
3.1.3. Фиксация результатов слияния
3.2. Слияние конфликтующих изменений
3.2.1. Использование графического инструмента слияния
3.2.2. Рабочий пример
3.3. Упрощение последовательности pull-merge-commit
3.4. Переименование, копирование и слияние
4. За кулисами
4.1. Запись истории в Mercurial
4.1.1. Отслеживание истории одного файла
4.1.2. Управление отслеживаемыми файлами
4.1.3. Запись информации о ревизиях
4.1.4. Зависимости между ревизиями
4.2. Безопасное и эффективное хранилище
4.2.1. Эффективное хранилище
4.2.2. Безопасность работы
4.2.3. Быстрый поиск
4.2.4. Идентификация и надежная целостность
4.3. История ревизий, ветвление и слияние
4.4. Рабочий каталог
4.4.1. Что происходит, когда вы фиксируете изменения (commit)
4.4.2. Создание новой головы (head)
4.4.3. Слияние изменений
4.4.4. Слияние и переименование
4.5. Другие интересные дизайнерские решения
4.5.1. Умное сжатие
4.5.2. Порядок чтения/записи и атомартность
4.5.3. Конкурентный доступ
4.5.4. Предотвращение поиска секторов
4.5.5. Другое содержимое dirstate
5. Повседневное использование Mercurial
5.1. Указание Mercurial, какие файлы необходимо отслеживать
5.1.1. Явное и неявное именование файлов
5.1.2. Mercurial отслеживает файлы, а не каталоги
5.2. Как прекратить отслеживание файла
5.2.1. Удаление файла не влияет на его историю
5.2.2. Отсутствующие файлы
5.2.3. Замечание: почему в Mercurial явно указывается удаление файла?
5.2.4. Полезное сокращение — добавление и удаление файлов в один прием
5.3. Копирование файлов
5.3.1. Поведение копии при слиянии
5.3.2. Почему изменения следуют за копией?
5.3.3. Как сделать, чтобы изменения не преследовали копию
5.3.4. Поведение команды hg copy
5.4. Переименование файлов
5.4.1. Переименование файлов и объединение изменений
5.4.2. Расходящиеся переименования и слияние
5.4.3. Сходящиеся переименования и слияние
5.4.4. Другие проблемы с именованием
5.5. Избавление от ошибок
5.6. Работа со сложными слияниями
5.6.1. Файл анализа состояний
5.6.2. Разрешение файлов при слиянии
5.7. Более удобные diff-ы
5.8. Какими файлами управлять, а каких избегать
5.9. Резервные копии и мониторинг.
6. Взаимодействие с людьми
6.1. Веб-интерфейс Mercurial
6.2. Модели сотрудничества
6.2.1. Факторы, которые необходимо иметь в виду
6.2.2. Неформальный подход
6.2.3. Единый центральный репозиторий
6.2.4. Хостинг центрального репозитория
6.2.5. Работа с несколькими ветвями
6.2.6. Ветви для новых функций
6.2.7. Релиз по расписанию
6.2.8. Модель ядра Linux
6.2.9. Втягивающее против совместно-вносимого сотрудничества
6.2.10. Когда разработка сталкивается с управлением ветвлениями
6.3. Техническая сторона совместного использования
6.4. Неофициальный обмен с помощью hg serve
6.4.1. Несколько деталей к размышлению
6.5. Использование протокола Secure Shell (ssh)
6.5.1. Как читать и записывать, используя ssh URL-ы
6.5.2. Выбор ssh-клиента для Вашей системы
6.5.3. Генерация криптографической пары (открытого и секретного ключей)
6.5.4. Использование агента аутентификации
6.5.5. Правильная настройка сервера.
6.5.6. Использование сжатия по ssh
6.6. Работа по HTTP с использованием CGI
6.6.1. Список проверок конфигурации веб-сервера
6.6.2. Базовая конфигурация CGI
6.6.3. Настройка доступа к нескольким хранилищам с помощью одного CGI-скрипта
6.6.4. Загрузка исходных архивов
6.6.5. Опции настройки веб интерфейса
6.7. Системный файл конфигурации
6.7.1. Делаем Mercurial более доверенным.
7. Имена файлов и шаблоны совпадений
7.1. Простое именование файлов
7.2. Запуск команд без указания имен файлов
7.3. Информация о том что произошло;
7.4. Использование шаблонов для указания файлов
7.4.1. glob-шаблоны в стиле shell
7.4.2. Шаблоны регулярных выражений
7.5. Фильтрация файлов
7.6. Постоянное игнорирование ненужных файлов и директорий
7.7. Регистрозависимость
7.7.1. Безопасное и переносимое хранилище
7.7.2. Определение конфликтов регистра символов
7.7.3. Исправление конфликта регистра символов
8. Управление релизами и ветками
8.1. Задание постоянного имени для ревизии
8.1.1. Обработка конфликтов слияния тегов
8.1.2. Теги и клонирование
8.1.3. Когда тегов становится слишком много
8.2. Поток изменений — «большая картинка» против «маленькой»
8.3. Управление ветками «больших картинок» в репозитории (хранилище)
8.4. Не повторяйте сами себя: слияния между «ветками»
8.5. Наименование веток в одном репозитории(хранилище)
8.6. Работа с несколькими поименованными ветками в хранилище.
8.7. Имена веток и слияние
8.8. Именнованные ветки — это очень удобно.
9. Поиск и исправление ваших ошибок
9.1. Удаление локальной истории
9.1.1. Случайная фиксация
9.1.2. Откат транзакции
9.1.3. Ошибочное вытягивание
9.1.4. hg rollback бесполезен если изменения уже внесены.
9.1.5. Вы можете отменить только последнее изменение
9.2. Отмена ошибочных изменений
9.2.1. Ошибки управления файлами
9.3. Работа с зафиксированными изменениями
9.3.1. Отзыв набора измений
9.3.2. Отзыв последней ревизии (tip)
9.3.3. Отзыв ревизии, не являющейся последней
9.3.4. Получение бОльшего контроля над процессом возврата
9.3.5. Почему команда hg backout работает именно так
9.4. Изменения, которых быть не должно
9.4.1. Откат слияния
9.4.2. Защитите себя от «беглых» изменении
9.4.3. Что делать с чувствительными изменениями, как избежать
9.5. Поиск источника ошибки
9.5.1. Использование команды hg bisect
9.5.2. Очистка после поиска
9.6. Советы для эффективного поиска ошибок
9.6.1. Давайте согласованный ввод
9.6.2. Автоматизируйте как можно больше
9.6.3. Проверка ваших результатов
9.6.4. Остерегайтесь интерференции ошибок
9.6.5. Опора вашего ленивого поиска
10. Обработка событий в репозитории с помощью ловушек
10.1. Обзор ловушек Mercurial
10.2. Ловушки и безопасность
10.2.1. Ловушки выполняются с Вашими привелегиями
10.2.2. Ловушки не распространяются
10.2.3. Возможно переопределение ловушек
10.2.4. Обеспечение выполнения критических ловушек
10.3. Краткое руководство по использованию ловушек
10.3.1. Выполнение нескольких действий на событие
10.3.2. Управление возможностью выполнения действия
10.4. Написание собственных ловушек
10.4.1. Выбор того, как должна работать ваша ловушка
10.4.2. Параметры ловушек
10.4.3. Возвращаемое значение ловушки и контроль за действием
10.4.4. Написание внешних ловушек
10.4.5. Приказ Mercurial использовать внутренние ловушки
10.4.6. Написание внутрипроцессных ловушек
10.5. Несколько примеров ловушек
10.5.1. Проверка сообщений при фиксации
10.5.2. Проверка на конечные пробелы
10.6. Встроенные ловушки
10.6.1. acl — контроль доступа к частям репозитория
10.6.2. bugzilla — интеграция с Bugzilla
10.6.3. notify — отправка email оповещения
10.7. Информация для разработчиков ловушек
10.7.1. Выполнение внутрипроцессорых ловушек
10.7.2. Выполнение внешних ловушек
10.7.3. Как определить, откуда пришли изменения
10.8. Ловушки. Описание.
10.8.1. changegroup — после внесения внешних ревизий
10.8.2. commit—после создания новой ревизии
10.8.3. incoming — после добавления одной удаленной ревизии
10.8.4. outgoing — после распространения ревизии
10.8.5. prechangegroup — до начала добавления ревизий удалённого репозитория
10.8.6. precommit — перед фиксацией ревизии
10.8.7. preoutgoing — до начала передачи ревизий в другие репозитории
10.8.8. pretag — перед тегированием ревизии
10.8.9. pretxnchangegroup — перед завершением добавления ревизий удалённого репозитория
10.8.10. pretxncommit — перед завершением фиксации новой ревизии
10.8.11. preupdate — перед обновлением или слиянием рабочей директории.
10.8.12. tag — после создания метки ревизии
10.8.13. update — после обновления или слияния рабочей директории
11. Настройка вывода Mercurial
11.1. Использование предустановленых стилей
11.1.1. Установка стиля по умолчанию
11.2. Команды, которые поддерживают стили и шаблоны
11.3. Основы шаблонизации
11.4. Обычные ключевые слова шаблонов
11.5. Escape последовательности
11.6. Фильтрация ключевых слов, чтобы отобразить результат
11.6.1. Объединение фильтров
11.7. От шаблонов к стилям
11.7.1. Простейшие файлы стилей
11.7.2. Синтаксис файла стиля
11.8. Примеры файлов стиля
11.8.1. Определение ошибки в файле стиля
11.8.2. Уникальный идентификатор репозитория
11.8.3. Просмотр файлов на нескольких строках
11.8.4. Вывод похожий на Subversion
12. Управление изменениями с Mercurial Queues
12.1. Проблема управления патчами
12.2. Предыстория Mercurial Queues
12.2.1. A patchwork quilt
12.2.2. От patchwork quilt до Mercurial Queues
12.3. Огромное преимущество MQ
12.4. Понимание патчей
12.5. Начало работы с Mercurial Queues
12.5.1. Создание нового патча
12.5.2. Обновление патча
12.5.3. Укладка и отслеживания патчей
12.5.4. Манипуляция стеком патчей
12.5.5. Вставка и извлечение нескольких патчей
12.5.6. Безопасные проверки и их основа
12.5.7. Работа с различными патчами сразу
12.6. Более подробно о патчах
12.6.1. The strip count
12.6.2. Стратегия для применения патчей
12.6.3. Некоторые причуды из представления патчей
12.6.4. Остерегайтесь неточностей
12.6.5. Обработка отказа
12.7. Подробнее о управление патчами
12.7.1. Удаление нежелательных патчей
12.7.2. Преобразование в и из постоянных ревизий
12.8. Получение максимальной производительности от MQ
12.9. Обновление патчей когда исходный код измененился
12.10. Идентификация патчей
12.11. Полезные вещи, которые необходимо знать
12.12. Управление патчами в репозитории
12.12.1. Поддержка MQ для репозитория патчей
12.12.2. Несколько вещей для отслеживания
12.13. Инструменты сторонних разработчиков для работы с патчами
12.14. Хорошие методы работы с патчами
12.15. Поваренная книга MQ
12.15.1. Управление «тривиальными» патчами
12.15.2. Объединение целых патчей
12.15.3. Слияние части одного патча с другим
12.16. Различия между quilt и MQ
13. Расширенное использование Mercurial Queues
13.1. Проблема множества целей
13.1.1. Соблазнительные подходы, которые работают не очень хорошо
13.2. Условное применение патчей с защитой
13.3. Управление защитой патча
13.4. Выбор используемых охранников
13.5. Правила применения патчей в MQ
13.6. Обрезка рабочего окружения
13.7. Разделение файла series
13.8. Поддержка серии патчей
13.8.1. Искусство писать backport патчи
13.9. Полезные советы для разработки с MQ
13.9.1. Организация патчей в каталогах
13.9.2. Просмотр истории патча
14. Добавление функциональности с помощью расширений.
14.1. Улучшение производительности с расширением inotify
14.2. Гибкая поддержка diff с расширением extdiff
14.2.1. Определение псевдонимов команд
14.3. cherrypicking изменений используя расширение transplant
14.4. Отправить изменений по электронной почте с расширением patchbomb
14.4.1. Изменение поведения patchbomb
A. Переход на Mercurial
A.1. Импорт истории из другой системы
A.1.1. Конвертирование нескольких ветвей
A.1.2. Связь имён пользователей
A.1.3. Очистка дерева
A.1.4. Улучшение эффективности преобразования Subversion
A.2. Переход из Subversion
A.2.1. Философские различия
A.2.2. Краткий справочник
A.3. Полезные советы для новичков
B. Справочник Mercurial Queues
B.1. Справочник команд MQ
B.1.1. qapplied — печатает применённые патчи
B.1.2. qcommit — фиксирует изменения в репозитории очереди
B.1.3. qdelete — удалить патч из файла series
B.1.4. qdiff — печатает diff для верхнего применяемого патча
B.1.5. qfinish — перемещает применённые патчи в историю репозитория
B.1.6. qfold — слияние («свёртка»), нескольких патчей в один
B.1.7. qheader — отображает заголовки/описание патча
B.1.8. qimport — импорт сторонних патчей в очередь
B.1.9. qinit — подготовить хранилище для работы с MQ
B.1.10. qnew — создание новых патчей
B.1.11. qnext — печатает имя следующего патча
B.1.12. qpop— извлекает патчи из стека
B.1.13. qprev — печатает имя предыдущего патча
B.1.14. qpush — вставляет патчи в стек
B.1.15. qrefresh — обновление верхнего применённого патча
B.1.16. qrename — переименование патча
B.1.17. qseries — печатает записи серии патчей
B.1.18. qtop— печатает имя текущего патча
B.1.19. qunapplied— печатает не применённые патчи
B.1.20. hg strip — удаляет ревизию и потомков
B.2. Справочник файлов MQ
B.2.1. Файл series
B.2.2. Файл status.
C. Установка Mercurial из исходников
C.1. На Unix-подобных системах
C.2. На Windows
D. Open Publication License
D.1. Требования в обоих немодифицированной и модифицированной версии
D.2. Исключительное авторское право
D.3. Отношения, регулируемые лицензией
D.4. Требования к модифицированным копиям
D.5. Рекомендации
D.6. Дополнительные ограничения

Список иллюстраций

2.1. Графическое представление истории репозитория hello
3.1. Расхождение историй репозиториев my-hello и my-new-hello
3.2. Содержимое хранилища my-new-hello после получения изменений из my-hello
3.3. Рабочий каталог и репозиторий во время и после совершения слияния
3.4. Конфликт изменений в документе
3.5. Использование kdiff3 для слияния версий файлов
4.1. Связь между файлами в рабочей директории и filelog'ом в репозитории
4.2. Взаимосвязь метаданных
4.3. Моментальный снимок журнала изменений с возрастающими дельтами
4.4. Общий вид структуры журнала ревизий
4.5. Рабочий каталог может иметь две родительские ревизии
4.6. После коммита у рабочего каталога появляются новые родители
4.7. Рабочий каталог, обновленный до ранней ревизии
4.8. После фиксации, сделанной в то время, как рабочий каталог был обновлен до ранней ревизии.
4.9. Слияние двух голов
6.1. Ветви для новых функций
9.1. Отмена изменения используя команду hg backout
9.2. Автоматический возврат не последнего набора изменений с помощью команды hg backout
9.3. Возврат изменений с помощью команды hg backout
9.4. Ручное слияние возвращённых изменений
9.5. Плохое слияние
9.6. Откат слияния, в пользу одного из родителей
9.7. Поддержка отката слияния в пользу другого родителя
9.8. Слияние откатов
9.9. Слияние откатов
12.1. Применение и отмена патчей в стеке патчей MQ

Список таблиц

A.1. Команды Subversion и их эквиваленты в Mercurial