Управление исходным кодом с помощью Git

Инструментарий, обеспечивающий надежное управление версиями в системах Linux

Git—программное обеспечение с открытым исходным кодом для управления версиями, разработанное Линусом Торвальдсом для использования в управлении разработкой ядра Linux®. Его можно скачать и использовать для работы с ядром—или для собственных программных проектов. В этой статье показывается, как начать разработку в среде Linux с помощью инструментария Git. [Обновление: Внесены изменения в два листинга для отражения замены протокола rsync на более новый протокол git для извлечения исходного кода -- ред.]

Эли М Доу, инженер-программист, IBM

Эли М. Доу - инженер-программист IBM Test and Integration Center for Linux в Паукипси, штат Нью-Йорк, США. Он получил степень бакалавра в области информатики и психологии и степень магистра в области информатики в Университете Кларксона. Он окончил Институт открытого исходного кода Кларксона. В область его интересов лежат рабочий стол GNOME, взаимодействие человека с компьютером, виртуализация и программирование систем под Linux. Он является соавтором руководства IBM Linux для IBM System z9 и IBM zSeries.



05.03.2009

Эффективность разработки программного обеспечения в любом современном проекте подразумевает возможность вести разработку параллельно с другими участниками проекта. Системы управления исходными кодами (SCM, Source code management)—не новая идея. Было сделано много попыток написать программное обеспечение, которое дало бы возможность разрабатывать будущие программные проекты быстрее и легче. Большинство современных решений в области управления исходными кодами включают в себя системы управления версиями, чтобы иметь возможность отказаться от изменений, которые оказались нежелательными для проекта, или просто отследить, кто является автором конкретных изменений. Системы управления версиями предохраняют изменения, сделанные одними пользователями, от перезаписи другими пользователями, решая проблему, возникающую, когда разработчики пытаются изменить какой-либо файл одновременно. Во многих популярных в настоящее время решениях для управления исходными кодами предпринимаются попытки устранить недостатки, существовавшие в прежних решениях.

Централизованные системы управления версиями обычно работают одним из двух способов:

  • Одни обеспечивают блокировку файлов для предотвращения одновременного доступа. Эти системы блокируют файлы таким образом, что только один разработчик в данный момент времени имеет доступ на запись к центральному хранилищу.
  • Другие, как, например, CVS, дают возможность многим разработчикам редактировать один и тот же файл одновременно и предоставляют средства для последующего объединения изменений.

Популярные системы управления версиями:

  • CVS
  • Subversion
  • Arch
  • Bazaar
  • BitKeeper

Что такое Git?

Очень просто, Git—это недавно разработанная Линусом Торвальдсом система управления версиями. Как говорится в документации: "Git—это быстрая, масштабируемая, распределенная система управления версиями с необычайно богатым набором команд, которые обеспечивают как операции верхнего уровня, так и полный доступ к внутренним механизмам".

Торвальдс начал разрабатывать Git в качестве временного решения для замещения BitKeeper, который до этого был основным инструментом для работы с исходными кодами, использовавшимся разработчиками ядра Linux по всему миру. Некоторые члены open source-сообщества считали, что лицензия BitKeeper не лучшим образом подходит для мира свободного программного обеспечения, и поэтому Линус Торвальдс решил рассмотреть системы управления версиями с более либеральными лицензиями. Хотя первоначально Git была разработана для использования в процессе разработки ядра Linux, ей находится применение и в других свободных программных проектах. Например, на Git недавно был переведен X.org, как и многие проекты Freedesktop.org.

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

  • Ветвление делается быстро и легко.
  • Поддерживается автономная работа; локальные фиксации изменений могут быть отправлены позже.
  • Фиксации изменений в Git атомарны и распространяются на весь проект, а не на единичный файл, как в CVS.
  • Каждое рабочее дерево в Git содержит хранилище с полной историей проекта.
  • Ни одно хранилище Git не является по своей природе более важным, чем любое другое.

Установка

Для установки текущей версии Git можно воспользоваться готовыми пакетами, поставляемыми с дистрибутивами Linux, или можно вручную скомпилировать его из последнего стабильного среза. Я рекомендую скачать tar-архив, содержащий наиболее свежую стабильную копию исходного кода Git; на момент написания этой статьи выпущена версия v1.4.0. Ссылку можно найти ниже в разделе Ресурсы.

После получения этого архива нужно убедиться, что удовлетворяются необходимые зависимости для первоначальной установки. В системе должны быть следующие пакеты, а также соответствующие им пакеты для разработки с заголовочными файлами:

  • zlib
  • libcurl
  • libcrypto (OpenSSL)
  • rsync (версия 2.6.0 или выше)

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

$ tar -jxvf git-1.4.0.tar.bz2

или

$ tar -zxvf git-1.4.0.tar.gz

Затем перейти в соответствующий каталог и использовать команду make. (Нужно иметь в виду, что имя каталога будет зависеть от даты загруженной копии пакета.)

$ cd git-1.4.0/
$ make prefix=/usr/local install
$ sudo make prefix=/usr/local install

Для продолжения установки будет предложено ввести пароль sudo. Теперь должно быть все готово для того, чтобы начать пользоваться утилитами Git.


Получение самого свежего дерева исходных кодов ядра

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

Для целей этой статьи нам нужно получить зеркальную копию хранилища Git, выложенного Торвальдсом в общий доступ. Следующая команда создаст каталог хранилища Git с именем linux-2.6. Этот каталог будет содержать скрытый каталог с именем .git/.

$ git-clone \
 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git \
 linux-2.6

Этот процесс займет много времени, так как Git переносит исходные коды ядра (что составляет сотни мегабайт) с kernel.org на локальную машину. Вывод на экран выглядит довольно непонятно и при хорошем интернет подключении должен прокручиваться достаточно быстро. Вывод должен быть похож на рис. 1.

Рис. 1. Вывод при загрузке дерева исходных кодов ядра
Вывод при загрузке дерева исходных кодов ядра

Теперь нужно перейти в каталог, содержащий только что загруженное ядро:

$ cd linux-2.6

На этом этапе на локальной машине должен получиться рабочий репозиторий Linux 2.6! Перейдем к основным операциям с этим хранилищем.


Обновление локального хранилища Git

Обычно при работе с Git предполагается, что локальное хранилище немного отстает от того, которое находится на kernel.org. Поэтому обычно начинают с обновления своего хранилища до новейшего дерева ядра. Этот процесс иногда называется ускоренным слиянием. Строго говоря, нет необходимости делать это сейчас, поскольку хранилище было только что установлено и не должно быть устаревшим. Но на всякий случай проверим:

$ cd linux-2.6
$ git-pull git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
		...

При успешном завершении на экране будет примерно следующий текст:

receiving file list ... done

sent 130 bytes  received 21677 bytes  14538.00 bytes/sec
total size is 127865858  speedup is 5863.52
Already up-to-date.
$>

Если ваше локальное хранилище устарело, то можно будет увидеть передачу информации из сети на локальную машину.


Извлечение файлов из хранилища

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

$ git-checkout

Если нужно перезаписать свои локальные изменения, можно сделать еще одно извлечение с параметром -f, чтобы вернуться к чистому листу:

$ git-checkout -f

Теперь в текущем рабочем каталоге находится знакомая структура каталогов исходных кодов Linux, и можно начинать вносить изменения в исходный код.


Изменение существующих файлов

Теперь можно редактировать любой файл по выбору. В качестве простого примера изменим что-нибудь в каталоге docs: добавим сообщение, которое потом будет легко распознать. Для того, чтобы этот пример было легче понять, я не буду вносить изменения в код, но читатель может пойти дальше и переписать всю подсистему ядра, если есть такое желание.

Сначала давайте откроем файл в редакторе:

$ vi ./Documentation/ManagementStyle

Очевидно, я тут использую vi, но вы, разумеется, свободны выбрать любой привычный для работы редактор. При редактировании файла я добавил следующую строку перед первым параграфом: "Эли будет отвечать за потребление сэндвичей. Подробности см. в Documentation/Sandwiches."

Если произведенные изменения вас устраивают и можно уже сделать их постоянной частью хранилища, нужно просто зафиксировать эти изменения с помощью следующей команды:

$ git-commit Documentation/ManagementStyle

Вас попросят ввести сообщение (commit message), представляющее собой комментарий пользователя, которое поможет другим разработчикам (или впоследствии самому автору) понять, что именно делает только что внесённое изменение. В моем случае этот текст состоял из предложения, описывающего изменения, которые я только что проделал в документации.

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


Добавление или удаление файлов

Но подождите! Мы же так и не добавили файл Documentation/Sandwiches, поэтому нужно добавить его в рабочий каталог и сообщить Git о нем, как только это будет сделано. Я создал файл, который хотел добавить, с помощью команды echo , поскольку это простой пример. Тут тоже можно использовать любые предпочитаемые средства.

$ echo "Индейка превосходна" > Documentation/Sandwiches

Теперь, когда файл добавлен, нужно дать Git знать об этом изменении, добавив его к Git, а затем зафиксировав версию с помощью следующих команд:

$ git-add Documentation/Sandwiches
$ git-commit Documentation/Sandwiches

Если добавляется несколько файлов, можно перечислить их после команды git-add в одной строке, поскольку нет необходимости добавлять их по одному за раз. Для удаления файла специальной команды наподобие git-addнет; нужно просто удалить файл, а затем зафиксировать изменения.

Теперь самое время проверить журнал изменений (git-log), чтобы убедиться в правильности того, что было сделано до сих пор. На этот раз воспользуемся параметром -p , чтобы увидеть журнал в формате индивидуальных патчей.

$git-log -p

Создание файлов различий (diff)

Наконец, может потребоваться создать текстовый файл, содержащий только отличия между измененным кодом и первоначальным. Это файл обычно создается с помощью утилиты diff и называется diff. файлом различий. Diff помогает создать файл исправлений, являющийся предпочтительным способом передачи кода во многих открытых проектах. Больше узнать о файлах различий можно по ссылкам на Kernel.org в Ресурсах в конце статьи.


Что еще может Git?

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

Предположим, что имеется стандартный архив с именем release.tar.gz, тогда можно создать локальное хранилище Git с помощью следующих команд:

$ tar -zxvf release.tar.gz
$ cd release
$ git init-db

Могут появиться сообщения о том, что Git "по умолчанию работает с локальным хранилищем." Это нормальные сообщения, они показывают, что хранилище Git установлено.

Теперь рабочий каталог инициализирован, и в каталоге проекта должен быть виден новый каталог с именем .git. Чтобы сообщить Git, что нужно отслеживать все файлы в каталоге проекта, выполняется следующая команда:

$ git add .

Наконец, фиксация изменений отслеживаемых файлов делается следующей командой:

$ git commit -a

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

Дополнительную информацию по управлению ветвями и другим интересным свойствам Git можно получить в отличном учебнике по Git на Kernel.org (см. ссылку в Ресурсах).


Заключение

Теперь, когда вы знаете, как использовать Git для получения исходных кодов и ядра Linux и других управляемых Git проектов, можете попробовать использовать Git для управления своим следующим проектом. Git все еще является относительно новым проектом и находится в стадии разработки. Создаются дополнительные скрипты и утилиты, чтобы сделать его еще более удобным в использовании; см. примеры в Ресурсах.

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=374287
ArticleTitle=Управление исходным кодом с помощью Git
publish-date=03052009