Строим Git - это глубокое погружение во внутренности системы контроля версий Git. Перестраивая его на языке программирования высокого уровня, мы исследуем информатику, стоящую за этим широко используемым инструментом. В процессе мы получаем более глубокое понимание самого Git, а также охватываем широкий спектр широко применимых тем программирования, в том числе:
Концепции Unix
Чтение и запись из файлов, делая записи атомарными, предотвращают состязание между процессами
Запуск дочерних процессов на переднем и заднем плане, общение с ними одновременно
Отображение вывода в терминале, включая форматирование цвета, постраничный вывод и взаимодействие с текстовым редактором пользователя
Анализ различных форматов файлов, включая модель фиксации на основе дерева Git, индекс, файлы конфигурации и упакованные объектные файлы.
Структуры данных
Как Git хранит контент на диске, чтобы эффективно использовать пространство, сделать историю эффективной для поиска и облегчить обнаружение различий между коммитами
Использование diffs для эффективного обновления содержимого рабочего пространства при извлечении нового коммита
Эффективное использование простых структур данных в памяти для решения задач программирования
Разбор и интерпретация языка запросов для адресации коммитов
Одновременное редактирование
Как Git использует ветки для моделирования одновременных правок
Алгоритмы обнаружения различий между версиями файлов и слиянием ветвей
Почему возникают конфликты слияний, как их можно избежать и как Git помогает пользователям предотвращать потерянные обновления
Как слияние может быть использовано в качестве основы для многочисленных операций по редактированию истории коммитов
Разработка программного обеспечения
Самозагрузка и развитие системы хостинга
Разработка через тестирование
Рефакторинг для обеспечения возможности разработки новых функций
Разработка программного обеспечения только для сбоев, которое позволяет прерывать и возобновлять программы
Сеть
Использование SSH для начальной загрузки сетевого протокола
Как Git-репозитории взаимодействуют, чтобы минимизировать данные, которые они должны передавать при извлечении контента
Как сетевой протокол использует атомарные операции для предотвращения перезаписи пользователями изменений друг друга
Джеймс Коглан - разработчик программного обеспечения из Лондона. Он имеет более чем десятилетний опыт разработки программного обеспечения, в основном на Ruby и JavaScript, и является автором многочисленных библиотек с открытым исходным кодом для этих платформ.