|
\subsection{Git - система управления версиями} |
|
|
|
\textbf{Git} (произн. <<\textit{гит}>>) --— распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года. На сегодняшний день поддерживается Джунио Хамано. |
|
|
|
Примерами проектов, использующих Git, являются ядро Linux, Drupal, Cairo, GNU Core Utilities, Mesa, Wine, Chromium, Compiz Fusion, FlightGear, jQuery, PHP и некоторые дистрибутивы Linux (см. ниже). |
|
Программа является свободной и выпущена под лицензией GNU GPL версии 2. |
|
|
|
\subsubsection{Возможности} |
|
|
|
Система спроектирована как набор программ, специально разработанных с учётом их использования в скриптах. Это позволяет удобно создавать специализированные системы контроля версий на базе Git или пользовательские интерфейсы. Например, Cogito является именно таким примером фронтенда к репозиториям Git, а StGit использует Git для управления коллекцией патчей. |
|
|
|
Git поддерживает быстрое разделение и слияние версий, включает инструменты для визуализации и навигации по нелинейной истории разработки. Как и Darcs, BitKeeper, Mercurial, Bazaar и Monotone, Git предоставляет каждому разработчику локальную копию всей истории разработки, изменения копируются из одного репозитория в другой. |
|
|
|
Удалённый доступ к репозиториям Git обеспечивается git-daemon, SSH- или HTTP-сервером. TCP-сервис git-daemon входит в дистрибутив Git и является наряду с SSH наиболее распространённым и надёжным методом доступа. Метод доступа по HTTP, несмотря на ряд ограничений, очень популярен в контролируемых сетях, потому что позволяет использовать существующие конфигурации сетевых фильтров. |
|
|
|
\subsubsection{Особенности реализации} |
|
|
|
Ядро Git представляет собой набор утилит командной строки с параметрами. Все настройки хранятся в текстовых файлах конфигурации. Такая реализация делает Git легко портируемым на любую платформу и даёт возможность легко интегрировать Git в другие системы (в частности, создавать графические git-клиенты с любым желаемым интерфейсом). |
|
|
|
Репозиторий Git представляет собой каталог файловой системы, в котором находятся файлы конфигурации репозитория, файлы журналов, хранящие операции, выполняемые над репозиторием, индекс, описывающий расположение файлов и хранилище, содержащее собственно файлы. Структура хранилища файлов не отражает реальную структуру хранящегося в репозитории файлового дерева, она ориентирована на повышение скорости выполнения операций с репозиторием. Когда ядро обрабатывает команду изменения (неважно, при локальных изменениях или при получении патча от другого узла), оно создаёт в хранилище новые файлы, соответствующие новым состояниям изменённых файлов. Существенно, что никакие операции не изменяют содержимого уже существующих в хранилище файлов. |
|
|
|
По умолчанию репозиторий хранится в подкаталоге с названием ``.git'' в корневом каталоге рабочей копии дерева файлов, хранящегося в репозитории. Любое файловое дерево в системе можно превратить в репозиторий git, отдав команду создания репозитория из корневого каталога этого дерева (или указав корневой каталог в параметрах программы). Репозиторий может быть импортирован с другого узла, доступного по сети. При импорте нового репозитория автоматически создаётся рабочая копия, соответствующая последнему зафиксированному состоянию импортируемого репозитория (то есть не копируются изменения в рабочей копии исходного узла, для которых на том узле не была выполнена команда \textit{commit}). |
|
|
|
\subsubsection{Преимущества и недостатки} |
|
|
|
Часто называемые преимущества git перед другими DVCS: |
|
\begin{itemize} |
|
\item Высокая производительность. |
|
\item Развитые средства интеграции с другими VCS, в частности, с CVS, SVN и Mercurial. Помимо разнонаправленных конвертеров репозиториев, имеющиеся в комплекте программные средства позволяют разработчикам использовать git при размещении центрального репозитория в SVN или CVS, кроме того, git может имитировать cvs-сервер, обеспечивая работу через клиентские приложения и поддержку в средах разработки, специально не поддерживающих git. |
|
\item Продуманная система команд, позволяющая удобно встраивать git в скрипты. |
|
\item Качественный веб-интерфейс «из коробки». |
|
\item Репозитории git могут распространяться и обновляться общесистемными файловыми утилитами архивации и обновления, такими как \textbf{rsync}, благодаря тому, что фиксации изменений и синхронизации не меняют существующие файлы с данными, а только добавляют новые (за исключением некоторых служебных файлов, которые могут быть автоматически обновлены с помощью имеющихся в составе системы утилит). Для раздачи репозитория по сети достаточно любого веб-сервера. |
|
\end{itemize} |
|
|
|
В числе недостатков git обычно называют: |
|
|
|
\begin{itemize} |
|
\item Отсутствие переносимой на другие операционные системы поддержки путей в кодировке Unicode в Microsoft Windows. Если путь содержит символы, отличные от ANSI, то их поддержка из командной строки требует специфических настроек, которые не гарантируют правильного отображения файловых имён при пользовании тем же репозиторием из других ОС. Одним из способов решения проблемы для git 1.7 является использование специально пропатченного консольного клиента. Другой вариант — использование графических утилит, работающих напрямую через API, таких как TortoiseGit. |
|
\item Некоторое неудобство для пользователей, переходящих с других VCS. Команды git, ориентированные на наборы изменений, а не на файлы, могут вызвать недоумение у пользователей, привыкших к файл-ориентированным VCS, таким как SVN. Например, команда ``\textit{add}'', которая в большинстве систем управления версиями производит добавление файла к проекту, в git делает совершенно другое: она находит и подготавливает к фиксации (commit’у) сделанные в проекте или его части изменения (то есть её название «добавить» относится не к файлам, а к сделанным изменениям, которые добавляются в индекс для последующей фиксации). |
|
\item Использование для идентификации ревизий хэшей SHA1, что приводит к необходимости оперировать длинными строками вместо коротких номеров версий, как во многих других системах (хотя в командах допускается использование неполных хэш-строк). |
|
\item Большие накладные расходы при работе с проектами, в которых делаются многочисленные несвязанные между собой изменения файлов. При работе в таком режиме размеры наборов изменений становятся достаточно велики и происходит быстрый рост объёма репозиториев. |
|
\item Бо́льшие затраты времени, по сравнению с файл-ориентированными системами, на формирование истории конкретного файла, истории правок конкретного пользователя, поиска изменений, относящихся к заданному месту определённого файла. |
|
\item Отсутствие отдельной команды переименования/переноса файла, которая отображалась бы в истории как соответствующее единое действие. Существующий скрипт \textbf{git mv} фактически выполняет переименование, копирование файла и удаление его на старом месте, что требует специального анализа для определения, что в действительности файл был просто перенесён (этот анализ выполняется автоматически командами просмотра истории). |
|
\item Система работает только с файлами и их содержимым, и не отслеживает пустые каталоги. |
|
\item Некоторые команды работают неожиданно, в частности, могут приводить к неочевидным ошибкам или требовать для правильной работы указания специальных параметров, когда применяются к исходно пустому репозиторию или к репозиторию, в котором ещё не было сделано ни одного коммита. |
|
\item В ряде публикаций, относящихся преимущественно к 2005—-2008 годам можно встретить также нарекания в отношении документации git, отсутствия удобной windows-версии и удобных графических клиентов. В настоящее время эта критика неактуальна: существует версия git на основе MinGW (<<родная>> сборка под Windows), и несколько высококачественных графических клиентов для различных операционных систем, в частности, под Windows имеется клиент TortoiseGit, идеологически очень близкий к широко распространённому TortoiseSVN —-- клиенту SVN, встраиваемому в оболочку Windows. |
|
\end{itemize} \cite{wiki:git} %http://ru.wikipedia.org/wiki/Git |
|
|
|
\subsubsection{Применение в проекте} |
|
|
|
Как было описано выше, \textbf{git} используется в качестве децентрализованной системы управлениями версий, позволяет разрабатывать и модифицировать различную функциональность независимо от основной ветки. |
|
|
|
Еще используется как способ передачи кодовой базы на сервер. |
|
|
|
Упрощенный пример процесса разработки. Команды приведены из консоли |
|
{\scriptsize |
|
\begin{verbatim} |
|
$ git push |
|
Counting objects: 9, done. |
|
Delta compression using up to 2 threads. |
|
Compressing objects: 100% (5/5), done. |
|
Writing objects: 100% (5/5), 464 bytes, done. |
|
Total 5 (delta 4), reused 0 (delta 0) |
|
To git@linode_git:nyasha.git |
|
800c5f6..0d126e9 master -> master |
|
\end{verbatim} |
|
} |
http://blog.tavda.net/2011/03/latex.html -> https://blog.tavda.net/latex_diplom