stringtranslate.com

Гит

Git ( / ɡ ɪ t / ) [8] — распределенная система контроля версий [9] , отслеживающая изменения в любом наборе компьютерных файлов , обычно используемая для координации работы программистов, совместно разрабатывающих исходный код во время разработки программного обеспечения . В его цели входят скорость, целостность данных и поддержка распределенных , нелинейных рабочих процессов (тысячи параллельных ветвей , работающих на разных компьютерах). [10] [11] [12]

Первоначально Git был создан Линусом Торвальдсом в 2005 году для разработки ядра Linux , при этом другие разработчики ядра внесли свой вклад в его первоначальную разработку. [13] С 2005 года Джунио Хамано является основным сопровождающим. Как и в большинстве других распределенных систем контроля версий и в отличие от большинства клиент-серверных систем, каждый каталог Git на каждом компьютере представляет собой полноценный репозиторий с полной историей и возможностями полного отслеживания версий, независимо от доступа к сети или центрального сервера . [14] Git — это бесплатное программное обеспечение с открытым исходным кодом , распространяемое только под лицензией GPL-2.0 .

С момента своего создания Git стала самой популярной распределенной системой контроля версий: по состоянию на 2022 год почти 95% разработчиков назвали ее своей основной системой контроля версий. [15] Существует множество популярных предложений служб репозитория Git, включая GitHub , SourceForge . , Bitbucket и GitLab . [16] [17] [18] [19] [20]

История

Разработка Git была начата Торвальдсом в апреле 2005 года, когда проприетарная система управления исходным кодом (SCM), используемая для разработки ядра Linux с 2002 года, BitKeeper , отозвала свою бесплатную лицензию на разработку Linux. [21] [22] Владелец авторских прав BitKeeper Ларри МакВой утверждал, что Эндрю Триджелл создал SourcePuller путем обратного проектирования протоколов BitKeeper . [23] Тот же инцидент послужил толчком к созданию еще одной системы контроля версий, Mercurial .

Торвальдсу нужна была распределенная система, которую он мог бы использовать, как BitKeeper, но ни одна из доступных бесплатных систем не отвечала его потребностям. Он привел пример системы управления исходным кодом, требующей 30 секунд для применения исправления и обновления всех связанных метаданных, и отметил, что это не соответствует потребностям разработки ядра Linux, где для синхронизации с другими сопровождающими может потребоваться 250 таких действий за раз. один раз. В качестве критерия проектирования он указал, что установка исправлений должна занимать не более трех секунд, и добавил еще три цели: [10]

Эти критерии исключали все системы контроля версий, использовавшиеся в то время, поэтому сразу после выпуска разработки ядра Linux 2.6.12-rc2 Торвальдс решил написать свою собственную. [12]

Разработка Git началась 3 апреля 2005 года. [24] Торвальдс объявил о проекте 6 апреля и на следующий день стал самостоятельным хостингом . [24] [25] Первое слияние нескольких филиалов произошло 18 апреля. [26] Торвальдс достиг своих целей; 29 апреля зарождающийся Git протестировал запись исправлений в дерево ядра Linux со скоростью 6,7 исправлений в секунду. [27] 16 июня Git выпустил ядро ​​2.6.12. [28]

26 июля 2005 года Торвальдс передал техническое обслуживание Юнио Хамано, который внес основной вклад в проект. [29] Хамано отвечал за выпуск версии 1.0 21 декабря 2005 года. [30]

Именование

Торвальдс саркастически пошутил по поводу имени git (что на британском английском сленге означает «неприятный человек»): «Я эгоистичный ублюдок и называю все свои проекты в честь себя. Сначала « Linux », теперь «git». [31] [32] На странице руководства Git описывается как «тупой трекер контента». [33]

В файле исходного кода, доступном для чтения, более подробно описано: [34]

«git» может означать что угодно, в зависимости от вашего настроения.

В исходном коде Git программа называется «адским информационным менеджером».

Характеристики

Дизайн Git представляет собой синтез опыта Торвальдса в работе с Linux при поддержке большого проекта распределенной разработки, а также его глубоких знаний о производительности файловой системы, полученных в ходе того же проекта, и острой необходимости создать работающую систему в короткие сроки. Эти влияния привели к следующим вариантам реализации: [13]

Сильная поддержка нелинейного развития
Git поддерживает быстрое ветвление и слияние и включает специальные инструменты для визуализации и навигации по истории нелинейной разработки. В Git основное предположение заключается в том, что изменение будет объединяться чаще, чем оно записано, поскольку оно передается различным рецензентам. В Git ветки очень легкие: ветка — это всего лишь ссылка на один коммит.
Распределенная разработка
Подобно Darcs , BitKeeper , Mercurial , Bazaar и Monotone , Git предоставляет каждому разработчику локальную копию полной истории разработки, а изменения копируются из одного такого репозитория в другой. Эти изменения импортируются как добавленные ветки разработки и могут быть объединены так же, как и ветки, разработанные локально. [35]
Совместимость с существующими системами и протоколами
Репозитории можно публиковать через защищенный протокол передачи гипертекста (HTTPS), протокол передачи гипертекста (HTTP), протокол передачи файлов (FTP) или протокол Git через простой сокет или безопасную оболочку (ssh). Git также имеет эмуляцию сервера CVS, которая позволяет использовать существующие клиенты CVS и плагины IDE для доступа к репозиториям Git. Репозитории Subversion можно использовать напрямую с git-svn. [36]
Эффективное управление крупными проектами
Торвальдс описал Git как очень быстрый и масштабируемый [37] , а тесты производительности, проведенные Mozilla [38], показали, что он на порядок быстрее различает большие репозитории, чем Mercurial и GNU Bazaar ; получение истории версий из локально хранящегося репозитория может быть в сто раз быстрее, чем получение ее с удаленного сервера. [39]
Криптографическая аутентификация истории
История Git хранится таким образом, что идентификатор конкретной версии ( коммита в терминах Git) зависит от полной истории разработки, приведшей к этому коммиту. После публикации невозможно изменить старые версии незаметно. Структура аналогична дереву Меркла , но с добавлением данных в узлах и листьях. [40] ( Таким свойством также обладают Mercurial и Monotone .)
Проектирование на основе набора инструментов
Git был разработан как набор программ, написанных на C , и нескольких сценариев оболочки, которые предоставляют оболочки для этих программ. [41] Хотя большинство этих сценариев с тех пор было переписано на C для обеспечения скорости и переносимости, дизайн остался прежним, и компоненты можно легко объединить. [42]
Подключаемые стратегии слияния
В рамках своего набора инструментов Git имеет четко определенную модель неполного слияния и несколько алгоритмов для его завершения, кульминацией которых является сообщение пользователю о том, что он не может завершить слияние автоматически и что необходимо редактирование вручную. [43]
Мусор накапливается, пока не будет собран
Прерывание операций или откат изменений приведут к тому, что в базе данных останутся бесполезные висячие объекты. Как правило, это лишь небольшая часть постоянно растущей истории разыскиваемых объектов. Git автоматически выполнит сбор мусора , когда в репозитории будет создано достаточно свободных объектов. Сборку мусора можно вызвать явно с помощью git gc. [44] [45]
Периодическая явная упаковка объектов
Git хранит каждый вновь созданный объект в отдельном файле. Несмотря на индивидуальное сжатие, он занимает много места и неэффективен. Это решается использованием пакетов , которые хранят большое количество объектов, дельта-сжатых между собой, в одном файле (или сетевом потоке байтов), называемом пакетным файлом . Пакеты сжимаются с использованием эвристики , согласно которой файлы с одинаковыми именами, вероятно, похожи, без зависимости от этого правильности. Для каждого файла пакета создается соответствующий индексный файл, в котором указывается смещение каждого объекта в файле пакета. Вновь созданные объекты (с новой добавленной историей) по-прежнему хранятся как отдельные объекты, и для поддержания эффективности использования пространства необходима периодическая переупаковка. Процесс упаковки репозитория может оказаться очень затратным в вычислительном отношении. Позволяя объектам существовать в репозитории в свободном, но быстро генерируемом формате, Git позволяет отложить дорогостоящую операцию упаковки на более позднее время, когда время имеет меньшее значение, например, на конец рабочего дня. Git выполняет периодическую переупаковку автоматически, но возможна и ручная переупаковка с помощью git gcкоманды. [46] Для обеспечения целостности данных и пакетный файл, и его индекс содержат внутри контрольную сумму SHA-1 [47] , а имя файла пакетного файла также содержит контрольную сумму SHA-1. Чтобы проверить целостность репозитория, выполните git fsckкоманду. [48] ​​[49]

Еще одним свойством Git является то, что он делает снимки деревьев каталогов файлов. Самые ранние системы отслеживания версий исходного кода, система контроля исходного кода (SCCS) и система контроля версий (RCS), работали с отдельными файлами и подчеркивали экономию места, которую можно получить за счет чередующихся дельт (SCCS) или дельта-кодирования (RCS). (в основном схожие) версии. Более поздние системы контроля версий поддерживали идею о том, что файл имеет идентичность в нескольких версиях проекта. Однако Торвальдс отверг эту концепцию. [50] Следовательно, Git не записывает явным образом отношения версий файлов ни на каком уровне ниже дерева исходного кода.

Эти неявные отношения ревизии имеют некоторые существенные последствия:

Git реализует несколько стратегий слияния; во время слияния можно выбрать стратегию не по умолчанию: [56]

Структуры данных

Примитивы Git по своей сути не являются системой управления исходным кодом . Торвальдс объясняет: [58]

Во многих отношениях вы можете рассматривать git просто как файловую систему — она адресуется по содержимому и имеет понятие управления версиями, но на самом деле я разработал ее, исходя из проблемы с точки зрения специалиста по файловой системе (эй, ядра — это то, что я делаю) , и у меня фактически нет абсолютно никакого интереса к созданию традиционной SCM-системы.

На основе этого первоначального подхода к проектированию Git разработал полный набор функций, ожидаемых от традиционного SCM, [59] причем функции в основном создаются по мере необходимости, а затем со временем уточняются и расширяются.

Некоторые потоки данных и уровни хранения в системе контроля версий Git

Git имеет две структуры данных : изменяемый индекс (также называемый этапом или кешем ), который кэширует информацию о рабочем каталоге и следующей ревизии, которую необходимо зафиксировать; и неизменяемая объектная база данных , допускающая только добавление .

Индекс служит точкой соединения между объектной базой данных и рабочим деревом.

Хранилище объектов содержит пять типов объектов: [60] [48]

Каждый объект идентифицируется хэшем SHA-1 его содержимого. Git вычисляет хэш и использует это значение в качестве имени объекта. Объект помещается в каталог, соответствующий первым двум символам его хеша. Остальная часть хэша используется в качестве имени файла для этого объекта.

Git хранит каждую редакцию файла как уникальный объект. Отношения между большими двоичными объектами можно найти, исследуя дерево и объекты фиксации. Вновь добавленные объекты сохраняются целиком с использованием сжатия zlib . Это может быстро занять большой объем дискового пространства, поэтому объекты можно объединять в пакеты , которые используют дельта-сжатие для экономии места, сохраняя большие двоичные объекты по мере их изменений относительно других больших двоичных объектов.

Кроме того, git хранит метки, называемые refs (сокращение от ссылок), для обозначения местоположений различных коммитов. Они хранятся в справочной базе данных и составляют соответственно: [67]

Рекомендации

Каждый объект в базе данных Git, на который нет ссылки, можно очистить с помощью команды сборки мусора или автоматически. На объект может ссылаться другой объект или явная ссылка. Git знает разные типы ссылок. Команды для создания, перемещения и удаления ссылок различаются. git show-refперечисляет все ссылки. Некоторые типы:

Реализации

gitg — это графический интерфейс, использующий GTK+ .

Git (основная реализация на C) в основном разработан для Linux , хотя он также поддерживает большинство основных операционных систем, включая BSD ( DragonFly BSD , FreeBSD , NetBSD и OpenBSD ), Solaris , macOS и Windows . [69] [70]

Первый порт Git для Windows представлял собой в первую очередь среду эмуляции Linux, на которой размещена версия Linux. При установке Git в Windows создается каталог Program Files с аналогичным названием, содержащий порт Mingw-w64 из коллекции компиляторов GNU , Perl 5, MSYS2 (который сам по себе является ответвлением Cygwin , Unix-подобной среды эмуляции для Windows) и различные другие порты или эмуляции Windows. утилит и библиотек Linux. В настоящее время собственные сборки Git для Windows распространяются в виде 32- и 64-битных установщиков. [71] На официальном сайте git в настоящее время поддерживается сборка Git для Windows, по-прежнему использующая среду MSYS2. [72]

Реализация Git в формате JGit — это чистая программная библиотека Java , предназначенная для встраивания в любое приложение Java. JGit используется в инструменте проверки кода Gerrit и в EGit, клиенте Git для Eclipse IDE. [73]

Go-git — это реализация Git с открытым исходным кодом , написанная на чистом Go . [74] В настоящее время он используется для поддержки проектов в качестве SQL- интерфейса для репозиториев кода Git [75] и обеспечения шифрования для Git. [76]

Реализация Git в Далвиче — это чистый программный компонент Python для Python 2.7, 3.4 и 3.5. [77]

Реализация Git в libgit2 — это программная библиотека ANSI C без каких-либо других зависимостей, которую можно построить на нескольких платформах, включая Windows, Linux, macOS и BSD. [78] Он имеет привязки для многих языков программирования, включая Ruby , Python и Haskell . [79] [80] [81]

JS-Git — это реализация JavaScript подмножества Git. [82]

Git-сервер

Снимок экрана интерфейса Gitweb, показывающий разницу коммитов

Поскольку Git — это распределенная система контроля версий, ее можно использовать в качестве сервера «из коробки». Он поставляется со встроенной командой git daemon, которая запускает простой TCP-сервер, работающий по протоколу Git. [83] [84] Выделенные HTTP-серверы Git помогают (помимо других функций) путем добавления контроля доступа, отображения содержимого репозитория Git через веб-интерфейсы и управления несколькими репозиториями. Уже существующие репозитории Git можно клонировать и предоставлять к ним общий доступ для использования другими в качестве централизованного репозитория. Доступ к нему также можно получить через удаленную оболочку, просто установив программное обеспечение Git и разрешив пользователю войти в систему. [85] Серверы Git обычно прослушивают TCP-порт 9418. [86]

Открытый источник

Git-сервер как услуга

Существует множество предложений репозиториев Git в качестве услуги. Наиболее популярные — GitHub , SourceForge , Bitbucket и GitLab . [91] [17] [18] [19] [20]

Принятие

Фонд Eclipse Foundation сообщил в своем ежегодном опросе сообщества, что по состоянию на май 2014 года Git в настоящее время является наиболее широко используемым инструментом управления исходным кодом: 42,9% профессиональных разработчиков программного обеспечения сообщили, что они используют Git в качестве основной системы управления исходным кодом [92]. по сравнению с 36,3% в 2013 г., 32% в 2012 г.; или для ответов Git без учета использования GitHub : 33,3% в 2014 г., 30,3% в 2013 г., 27,6% в 2012 г. и 12,8% в 2011 г. [93] Каталог открытого исходного кода Black Duck Open Hub сообщает об аналогичном распространении среди проектов с открытым исходным кодом. [94]

Stack Overflow включил контроль версий в свой ежегодный опрос разработчиков [95] в 2015 году (16 694 ответа), [96] 2017 году (30 730 ответов), [97] 2018 году (74 298 ответов) [98] и 2022 году (71 379 ответов). [15] Git был подавляющим фаворитом среди опрошенных разработчиков в этих опросах: в 2022 году этот показатель составил 93,9%.

Системы контроля версий, используемые ответившими разработчиками:

Британский веб-сайт вакансий в области ИТ itjobswatch.co.uk сообщает, что по состоянию на конец сентября 2016 года 29,27% постоянных вакансий в области разработки программного обеспечения в Великобритании упоминали Git, [ 99] опережая 12,17% для Microsoft Team Foundation Server , [100] 10,60% для Subversion , [101] 1,30% для Mercurial , [102] и 0,48% для Visual SourceSafe . [103]

Расширения

Существует множество расширений Git , например Git LFS, который начинался как расширение Git в сообществе GitHub и теперь широко используется другими репозиториями. Расширения обычно разрабатываются и поддерживаются разными людьми независимо друг от друга, но в какой-то момент в будущем широко используемое расширение может быть объединено с Git.

Другие расширения Git с открытым исходным кодом включают:

Microsoft разработала расширение Virtual File System для Git (VFS for Git; ранее Git Virtual File System или GVFS) для управления размером дерева исходного кода Windows в рамках миграции с Perforce в 2017 году . VFS для Git позволяет клонированным репозиториям использовать заполнители, содержимое которых загружается только после доступа к файлу. [104]

Конвенции

Git не накладывает особых ограничений на то, как его следует использовать, но для организации историй приняты некоторые соглашения, особенно те, которые требуют сотрудничества многих участников.

Безопасность

Git не предоставляет механизмов контроля доступа, но был разработан для работы с другими инструментами, специализирующимися на управлении доступом. [114]

17 декабря 2014 года был обнаружен эксплойт, затрагивающий версии клиента Git для Windows и macOS . Злоумышленник может выполнить произвольный код на целевом компьютере с установленным Git, создав вредоносное дерево Git (каталог) с именем .git (каталог в репозиториях Git, в котором хранятся все данные репозитория) в другом регистре (например, .GIT). или .Git, необходимый, поскольку Git не позволяет вручную создавать версию .git , написанную только строчными буквами ) с вредоносными файлами в подкаталоге .git/hooks (папка с исполняемыми файлами, которые запускает Git) в репозитории, созданном злоумышленником. или в репозитории, который злоумышленник может изменить. Если пользователь Windows или Mac извлекает (загружает) версию репозитория с вредоносным каталогом, а затем переключается на этот каталог, каталог .git будет перезаписан (из-за нечувствительности к регистру в файловых системах Windows и Mac) и могут быть запущены вредоносные исполняемые файлы в .git/hooks , что приведет к выполнению команд злоумышленника. Злоумышленник также может изменить файл конфигурации .git/config , что позволяет злоумышленнику создавать вредоносные псевдонимы Git (псевдонимы для команд Git или внешних команд) или изменять существующие псевдонимы для выполнения вредоносных команд при запуске. Уязвимость была исправлена ​​в версии Git 2.2.1, выпущенной 17 декабря 2014 года, о которой было объявлено на следующий день. [115] [116]

Версия Git 2.6.1, выпущенная 29 сентября 2015 года, содержала исправление для уязвимости безопасности ( CVE — 2015-7545) [117] , которая позволяла выполнять произвольный код. [118] Эту уязвимость можно было использовать, если злоумышленник мог убедить жертву клонировать определенный URL-адрес, поскольку произвольные команды были встроены в сам URL-адрес. [119] Злоумышленник мог использовать эксплойт посредством атаки «человек посередине», если соединение было незашифрованным, [119] поскольку он мог перенаправить пользователя на URL-адрес по своему выбору. Рекурсивные клоны также были уязвимы, поскольку позволяли контроллеру репозитория указывать произвольные URL-адреса через файл gitmodules. [119]

Git использует внутри себя хэши SHA-1 . Линус Торвальдс ответил, что хэш в основном предназначен для защиты от случайного повреждения, а безопасность, которую обеспечивает криптографически безопасный хэш, была всего лишь случайным побочным эффектом, поскольку основная безопасность подписывалась где -то еще. [120] [121] После демонстрации атаки SHAttered на git в 2017 году git был модифицирован для использования варианта SHA-1, устойчивого к этой атаке. План перехода хэш-функции пишется с февраля 2020 года. [122]

Товарный знак

«Git» является зарегистрированным товарным знаком компании Software Freedom Conservancy под номером US500000085961336 с 3 февраля 2015 г.

Смотрите также

Примечания

  1. ^ GPL-2.0 - только с 11 апреля 2005 г. Некоторые части находятся под совместимыми лицензиями, такими как LGPLv2.1 . [6]
  2. ^ abcdefghijklmnopqrs Не указан в качестве опции в этом опросе.

Цитаты

  1. ^ «Первоначальная версия «git», адского информационного менеджера» . Гитхаб . 8 апреля 2005 г. Архивировано из оригинала 16 ноября 2015 г. Проверено 20 декабря 2015 г.
  2. ^ "График фиксации" . Гитхаб . 8 июня 2016 г. Архивировано из оригинала 20 января 2016 г. . Проверено 19 декабря 2015 г.
  3. Джунио С. Хамано (14 февраля 2024 г.). «[АНОНС] Git v2.43.2» . Проверено 15 февраля 2024 г.
  4. ^ "Сайт Git" . Архивировано из оригинала 9 июня 2022 года . Проверено 9 июня 2022 г.
  5. ^ "Зеркало исходного кода Git" . Гитхаб . Архивировано из оригинала 3 июня 2022 года . Проверено 9 июня 2022 г.
  6. ^ «Лицензия Git LGPL на github.com» . Гитхаб . 20 мая 2011 года. Архивировано из оригинала 11 апреля 2016 года . Проверено 12 октября 2014 г.
  7. ^ «Лицензия Git GPL на github.com» . Гитхаб . 18 января 2010 г. Архивировано из оригинала 11 апреля 2016 г. Проверено 12 октября 2014 г.
  8. ^ «Технический разговор: Линус Торвальдс на git (в 00:01:30)» . Архивировано из оригинала 20 декабря 2015 года . Проверено 20 июля 2014 г. - через YouTube.
  9. ^ Чакон и Штрауб 2014, стр. 29–31.
  10. ^ аб Торвальдс, Линус (7 апреля 2005 г.). «Re: Сага о Kernel SCM». linux-kernel (список рассылки). Архивировано из оригинала 1 июля 2019 года . Проверено 3 февраля 2017 г.«Поэтому я пишу несколько сценариев, чтобы попытаться отслеживать ситуацию намного быстрее».
  11. ^ аб Торвальдс, Линус (10 июня 2007 г.). «Re: фатально: серьезное раздутое несоответствие». git (список рассылки).
  12. ^ abcd Линус Торвальдс (3 мая 2007 г.). Google tech talk: Линус Торвальдс о git. Событие происходит в 02:30. Архивировано из оригинала 28 мая 2007 года . Проверено 16 мая 2007 г.
  13. ^ ab «Краткая история Git». Pro Git (2-е изд.). Апресс. 2014. Архивировано из оригинала 25 декабря 2015 года . Проверено 26 декабря 2015 г.
  14. Чакон, Скотт (24 декабря 2014 г.). Pro Git (2-е изд.). Нью-Йорк, штат Нью-Йорк: Апресс . стр. 29–30. ISBN 978-1-4842-0077-3. Архивировано из оригинала 25 декабря 2015 года.
  15. ^ ab «Опрос разработчиков Stack Overflow, 2022 г.» . Переполнение стека . Проверено 4 августа 2022 г.
  16. ^ Криль, Пол (28 сентября 2016 г.). «Корпоративные войны репо: GitHub против GitLab против Bitbucket». Инфомир . Проверено 2 февраля 2020 г.
  17. ^ ab «Конкурентный анализ github.com, маркетинговый комплекс и трафик» . Алекса . Архивировано из оригинала 31 марта 2013 года . Проверено 2 февраля 2020 г.
  18. ^ ab «Конкурентный анализ sourceforge.net, маркетинговый комплекс и трафик» . Алекса . Архивировано из оригинала 20 октября 2020 года . Проверено 2 февраля 2020 г.
  19. ^ ab «Конкурентный анализ Bitbucket.org, маркетинговый комплекс и трафик». Алекса . Архивировано из оригинала 23 июня 2017 года . Проверено 2 февраля 2020 г.
  20. ^ ab «Конкурентный анализ gitlab.com, маркетинговый комплекс и трафик» . Алекса . Архивировано из оригинала 30 ноября 2017 года . Проверено 2 февраля 2020 г.
  21. Браун, Зак (27 июля 2018 г.). «История происхождения Git». Linux-журнал . Linux-журнал. Архивировано из оригинала 13 апреля 2020 года . Проверено 28 мая 2020 г.
  22. ^ «BitKeeper и Linux: конец пути?». Linux.com . 11 апреля 2005 года . Проверено 18 мая 2023 г.
  23. Макаллистер, Нил (2 мая 2005 г.). «Ошибка BitKeeper Линуса Торвальдса». Инфомир . Архивировано из оригинала 26 августа 2015 года . Проверено 8 сентября 2015 г.
  24. ^ аб Торвальдс, Линус (27 февраля 2007 г.). «Re: Общая информация: Когда git стал самостоятельным хостом?». git (список рассылки).
  25. Торвальдс, Линус (6 апреля 2005 г.). «Сага о Kernel SCM». linux-kernel (список рассылки).
  26. Торвальдс, Линус (17 апреля 2005 г.). «Первое настоящее слияние ядра git!». git (список рассылки).
  27. Макколл, Мэтт (29 апреля 2005 г.). «Mercurial 0.4b против теста git patchbomb». git (список рассылки).
  28. Торвальдс, Линус (17 июня 2005 г.). «Линукс 2.6.12». git-commits-head (список рассылки).
  29. Торвальдс, Линус (27 июля 2005 г.). «Знакомьтесь, новый сопровождающий». git (список рассылки).
  30. Хамано, Джунио К. (21 декабря 2005 г.). «Анонс: Git 1.0.0». git (список рассылки).
  31. ^ «GitFaq: Почему такое название «Git»?». Git.or.cz. Архивировано из оригинала 23 июля 2012 года . Проверено 14 июля 2012 г.
  32. ^ «После разногласий Торвальдс начинает работу над« git »» . Мир ПК . 14 июля 2012 г. Архивировано из оригинала 1 февраля 2011 г. Торвальдс, похоже, осознавал, что его решение отказаться от BitKeeper также будет спорным. Когда его спросили, почему он назвал новое программное обеспечение «мерзавцем», что на британском сленге означает «гнилой человек», он ответил. «Я эгоистичный ублюдок, поэтому все свои проекты называю в свою честь. Сначала Linux, теперь git».
  33. ^ "Страница руководства git(1)" . Архивировано из оригинала 21 июня 2012 года . Проверено 21 июля 2012 года .
  34. ^ «Первоначальная версия 'git', адского информационного менеджера · git/git@e83c516» . Гитхаб . Архивировано из оригинала 8 октября 2017 года . Проверено 21 января 2016 г.
  35. ^ «Git – Распределенные рабочие процессы» . Гит . Архивировано из оригинала 22 октября 2014 года . Проверено 15 июня 2020 г.
  36. Гунджал, Сиддхеш (19 июля 2019 г.). «Что такое инструмент контроля версий? Изучите Git и GitHub». Середина . Проверено 25 октября 2020 г.
  37. Торвальдс, Линус (19 октября 2006 г.). «Re: Сравнительная таблица VCS». git (список рассылки).
  38. ^ Блог Jst о Mozillazine "производительность bzr/hg/git". Архивировано из оригинала 29 мая 2010 года . Проверено 12 февраля 2015 г.
  39. Драйер, Роланд (13 ноября 2006 г.). «О, какое это облегчение». Архивировано из оригинала 16 января 2009 года., заметив, что «git log» работает в 100 раз быстрее, чем «svn log», поскольку последний должен связаться с удаленным сервером.
  40. ^ «Доверие». Концепции Git . Руководство пользователя Git. 18 октября 2006 г. Архивировано из оригинала 22 февраля 2017 г.
  41. ^ Торвальдс, Линус. «Re: Сравнительная таблица VCS». git (список рассылки) . Проверено 10 апреля 2009 г., описывающий скрипт-ориентированный дизайн Git
  42. ^ Ябервон (22 декабря 2005 г.). «Гит рулит!». Архивировано из оригинала 14 сентября 2016 года., хваля возможности Git по написанию сценариев.
  43. ^ "Git - Git SCM Wiki" . git.wiki.kernel.org . Проверено 25 октября 2020 г.
  44. ^ Чакон и Штрауб 2014.
  45. ^ «Руководство пользователя Git». 10 марта 2020 г. Архивировано из оригинала 10 мая 2020 г.
  46. ^ Чакон и Штрауб 2014, с. 499.
  47. ^ Чакон и Штрауб, 2014, стр. 33–34.
  48. ^ ab «Git – Packfiles». Гит .
  49. ^ Чакон и Штрауб 2014, с. 568.
  50. Торвальдс, Линус (10 апреля 2005 г.). «Re: больше обновлений git». linux-kernel (список рассылки).
  51. Хайбле, Бруно (11 февраля 2007 г.). «как ускорить «git log»?». git (список рассылки).
  52. Торвальдс, Линус (1 марта 2006 г.). «Re: нечистые переименования/отслеживание истории». git (список рассылки).
  53. Хамано, Джунио К. (24 марта 2006 г.). «Re: Ошибки GITtifying GCC и Binutils». git (список рассылки).
  54. Хамано, Джунио К. (23 марта 2006 г.). «Re: Ошибки GITtifying GCC и Binutils». git (список рассылки).
  55. Торвальдс, Линус (28 ноября 2006 г.). «Re: git и bzr». git (список рассылки)., при использовании git-blameдля отображения кода, перемещаемого между исходными файлами.
  56. Торвальдс, Линус (18 июля 2007 г.). «git-merge(1)». Архивировано из оригинала 16 июля 2016 года.
  57. Торвальдс, Линус (18 июля 2007 г.). «КриссКроссСлияние». Архивировано из оригинала 13 января 2006 года.
  58. Торвальдс, Линус (10 апреля 2005 г.). «Re: больше обновлений git...» linux-kernel (список рассылки).
  59. Торвальдс, Линус (23 марта 2006 г.). «Re: Ошибки GITtifying GCC и Binutils». git (список рассылки). Архивировано из оригинала 22 марта 2021 года . Проверено 3 февраля 2017 г.
  60. ^ «Git – Объекты Git». Гит .
  61. ^ Некоторые внутренности git
  62. ^ ab Chacon & Straub 2014, стр. 81–83.
  63. ^ Чакон и Штрауб, 2014, стр. 485–488.
  64. ^ Чакон и Штрауб, 2014, стр. 488–490.
  65. ^ Чакон и Штрауб, 2014, стр. 495–496.
  66. ^ Чакон и Штрауб 2014, стр. 497–501.
  67. ^ "Git - Ссылки на Git" . Гит .
  68. ^ «Формат файла конфигурации проекта» . Обзор кода Геррита . Архивировано из оригинала 3 декабря 2020 года . Проверено 2 февраля 2020 г.
  69. ^ «Загрузки». Архивировано из оригинала 8 мая 2012 года . Проверено 14 мая 2012 г.
  70. ^ «Версии пакетов git – Репология» . Архивировано из оригинала 19 января 2022 года . Проверено 30 ноября 2021 г.
  71. ^ "мсисГит". Гитхаб . Архивировано из оригинала 10 октября 2016 года . Проверено 20 сентября 2016 г.
  72. ^ «Git – Загрузка пакета» . Гит .(исходный код)
  73. ^ "ДжГит". Архивировано из оригинала 31 августа 2012 года . Проверено 24 августа 2012 г.
  74. ^ "Гит - давай-гит" . Гит . Проверено 19 апреля 2019 г.
  75. ^ «Интерфейс SQL для репозиториев Git, написанный на Go», github.com , получено 19 апреля 2019 г.
  76. ^ «Keybase запускает зашифрованный git» . keybase.io . Проверено 19 апреля 2019 г.
  77. ^ "Далвич". Архивировано из оригинала 29 мая 2012 года . Проверено 27 августа 2012 г.
  78. ^ "libgit2". Гитхаб . Архивировано из оригинала 11 апреля 2016 года . Проверено 24 августа 2012 г.
  79. ^ "Прочный". Гитхаб . Архивировано из оригинала 24 июля 2013 года . Проверено 24 августа 2012 г.
  80. ^ "Пигит2". Гитхаб . Архивировано из оригинала 5 августа 2015 года . Проверено 24 августа 2012 г.
  81. ^ "хлибгит2". Архивировано из оригинала 25 мая 2013 года . Проверено 30 апреля 2013 г.
  82. ^ «js-git: реализация Git на JavaScript» . Гитхаб . Архивировано из оригинала 7 августа 2013 года . Проверено 13 августа 2013 г.
  83. ^ Чакон и Штрауб, 2014, стр. 138–139.
  84. ^ "Git - Git Daemon" . Гит . Проверено 10 июля 2019 г.
  85. ^ 4.4 Git на сервере — настройка сервера. Архивировано 22 октября 2014 г. на Wayback Machine , Pro Git.
  86. ^ «1.4 Начало работы – установка Git» . Гит. Архивировано из оригинала 2 ноября 2013 года . Проверено 1 ноября 2013 г.
  87. ^ Чакон, Скотт; Штрауб, Бен (2014). «Git на сервере – Настройка сервера». Pro Git (2-е изд.). Апресс. ISBN 978-1484200773.
  88. ^ Руководство пользователя Diffusion: Хостинг репозитория. Архивировано 20 сентября 2020 г. на Wayback Machine .
  89. ^ «Gitolite: размещение репозиториев Git» .
  90. ^ «Gogs: безболезненный самостоятельный сервис Git» .
  91. ^ «Основные моменты Git 2.26» . Блог GitHub . 22 марта 2020 г. Архивировано из оригинала 22 марта 2021 г. . Проверено 25 ноября 2020 г. Возможно, вы помните, когда еще в 2018 году Git представил новую версию своего протокола сетевой выборки. Теперь этот протокол используется по умолчанию в версии 2.26, поэтому давайте освежим информацию о том, что это значит. Самая большая проблема старого протокола заключается в том, что сервер немедленно перечисляет все ветки, теги и другие ссылки в репозитории, прежде чем клиент сможет что-либо отправить. Для некоторых репозиториев это может означать отправку мегабайтов дополнительных данных, когда клиент действительно хочет знать только о главной ветке. Новый протокол начинается с запроса клиента и предоставляет клиенту возможность сообщить серверу, какие ссылки его интересуют. При выборе одной ветки будет запрашиваться только об этой ветке, в то время как большинство клонов будут запрашивать только о ветках и тегах. Это может показаться всем, но репозитории серверов могут хранить и другие ссылки (например, заголовок каждого запроса на включение, открытого в репозитории с момента его создания). Теперь скорость выборки из больших репозиториев увеличивается, особенно когда сама выборка невелика, что, условно говоря, делает стоимость первоначальной ссылочной рекламы более дорогой. И самое приятное то, что вам не нужно ничего делать! Благодаря продуманной конструкции любой клиент, поддерживающий новый протокол, может беспрепятственно работать как со старыми, так и с новыми серверами, возвращаясь к исходному протоколу, если сервер его не поддерживает. Единственная причина задержки между внедрением протокола и его использованием по умолчанию заключалась в том, чтобы позволить ранним пользователям обнаружить любые ошибки.
  92. ^ «Результаты опроса сообщества Eclipse 2014 | Ян Скерретт» . Ianskerrett.wordpress.com. 23 июня 2014 года. Архивировано из оригинала 25 июня 2014 года . Проверено 23 июня 2014 г.
  93. ^ «Результаты опроса сообщества Eclipse 2012» . eclipse.org. Архивировано из оригинала 11 апреля 2016 года.
  94. ^ «Сравнить репозитории - Open Hub» . Архивировано из оригинала 7 сентября 2014 года.
  95. ^ «Ежегодный опрос разработчиков Stack Overflow» . Стек Биржа, Inc. Проверено 9 января 2020 г. Ежегодный опрос разработчиков Stack Overflow — это крупнейший и наиболее полный опрос людей, которые программируют по всему миру. Каждый год мы проводим опрос, охватывающий все: от любимых технологий разработчиков до их предпочтений в работе. В этом году мы уже девятый раз публикуем результаты ежегодного опроса разработчиков, и в начале этого года почти 90 000 разработчиков приняли участие в 20-минутном опросе.
  96. ^ «Опрос разработчиков Stack Overflow, 2015» . Переполнение стека. Архивировано из оригинала 4 мая 2019 года . Проверено 29 мая 2019 г.
  97. ^ «Опрос разработчиков Stack Overflow, 2017» . Переполнение стека. Архивировано из оригинала 29 мая 2019 года . Проверено 29 мая 2019 г.
  98. ^ «Опрос разработчиков Stack Overflow, 2018» . Переполнение стека. Архивировано из оригинала 30 мая 2019 года . Проверено 29 мая 2019 г.
  99. ^ «Работа в Git (программное обеспечение), средняя зарплата для навыков работы с распределенной системой контроля версий Git» . Itjobswatch.co.uk. Архивировано из оригинала 8 октября 2016 года . Проверено 30 сентября 2016 г.
  100. ^ «Работа на сервере Team Foundation Server, средняя зарплата для навыков Microsoft Team Foundation Server (TFS)» . Itjobswatch.co.uk. Архивировано из оригинала 29 октября 2016 года . Проверено 30 сентября 2016 г.
  101. ^ «Работа по подрывной деятельности, средняя зарплата для навыков Apache Subversion (SVN)» . Itjobswatch.co.uk. Архивировано из оригинала 25 октября 2016 года . Проверено 30 сентября 2016 г.
  102. ^ «Метуативные рабочие места, средняя зарплата для ртутных навыков» . Itjobswatch.co.uk. Архивировано из оригинала 23 сентября 2016 года . Проверено 30 сентября 2016 г.
  103. ^ «Работа VSS/SourceSafe, средняя зарплата для навыков Microsoft Visual SourceSafe (VSS)» . Itjobswatch.co.uk. Архивировано из оригинала 29 октября 2016 года . Проверено 30 сентября 2016 г.
  104. ^ «Переход Windows на Git почти завершен: 8500 коммитов и 1760 сборок каждый день» . Арс Техника . 24 мая 2017 года. Архивировано из оригинала 24 мая 2017 года . Проверено 24 мая 2017 г.
  105. ^ "git-инициализация". Гит . Архивировано из оригинала 15 марта 2022 года.
  106. ^ «Git - Коротко о ветках» . Гит . Архивировано из оригинала 20 декабря 2020 года . Проверено 15 июня 2020 г. Ветка «master» в Git не является специальной веткой. Это точно так же, как и любая другая отрасль. Единственная причина, по которой он есть почти в каждом репозитории, заключается в том, что команда git init создает его по умолчанию, и большинство людей не удосуживаются его изменить.
  107. ^ Чакон и Штрауб 2014, стр. 103–109.
  108. ^ github/renameming, GitHub, 4 декабря 2020 г. , получено 4 декабря 2020 г.
  109. ^ Имя ветки по умолчанию для новых репозиториев, которые теперь являются основными, GitLab, 22 июня 2021 г. , получено 22 июня 2021 г.
  110. ^ "Git Revert | Учебное пособие по Atlassian Git" . Атласиан . Возврат имеет два важных преимущества перед сбросом. Во-первых, он не меняет историю проекта, что делает его «безопасной» операцией для коммитов, которые уже были опубликованы в общем репозитории.
  111. ^ «Рабочий процесс Gitflow | Учебное пособие по Atlassian Git» . Атласиан . Проверено 15 июня 2020 г.
  112. ^ Чакон и Штрауб, 2014, стр. 170–174.
  113. ^ «Рабочий процесс разветвления | Учебное пособие по Atlassian Git» . Атласиан . Проверено 15 июня 2020 г.
  114. ^ «Контроль доступа к репозиторию Git» . Архивировано из оригинала 14 сентября 2016 года . Проверено 6 сентября 2016 г.
  115. Петтерсен, Тим (20 декабря 2014 г.). «Защита вашего сервера Git от CVE-2014-9390». Архивировано из оригинала 24 декабря 2014 года . Проверено 22 декабря 2014 г.
  116. Хамано, JC (18 декабря 2014 г.). «[Анонс] Git v2.2.1 (и обновления для старых версий обслуживания)». Группа новостей : gmane.linux.kernel. Архивировано из оригинала 19 декабря 2014 года . Проверено 22 декабря 2014 г.
  117. ^ «CVE-2015-7545». 15 декабря 2015 года. Архивировано из оригинала 26 декабря 2015 года . Проверено 26 декабря 2015 г.
  118. ^ "Git 2.6.1" . Гитхаб . 29 сентября 2015 года. Архивировано из оригинала 11 апреля 2016 года . Проверено 26 декабря 2015 г.
  119. ^ abc Блейк Беркхарт; и другие. (5 октября 2015 г.). «Re: Запрос CVE: git». Архивировано из оригинала 27 декабря 2015 года . Проверено 26 декабря 2015 г.
  120. ^ «хеш — насколько безопасны подписанные теги git? Только так же безопасно, как SHA-1, или как-то безопаснее?». Обмен стеками информационной безопасности. 22 сентября 2014 г. Архивировано из оригинала 24 июня 2016 г.
  121. ^ «Почему Git использует криптографическую хэш-функцию?». Переполнение стека. 1 марта 2015 г. Архивировано из оригинала 1 июля 2016 г.
  122. ^ «Git – Документация по переходу хэш-функций» . Гит .

Рекомендации

Внешние ссылки