Управление версиями
Управление версиями
Большинство проектов, выполняемых в отделе, предусматривают совместную работу нескольких разработчиков. Поэтому для обеспечения совместной работы мы используем распределенные системы контроля версий. Также контроль версий удобен при компиляции программ под целевые (target) операционные системы.
----------------
Первой системой контроля версий, которая начала использоваться в отделе в 2009 году, был Subversion. Затем использовался Mercurial.
В настоящее время основной системой управления версиями является Git. В нашем случае Git развернут на сервере отдела. Доступ программистов осуществляется по ssh с использованием ключей.
Рассмотрим пример: Вася (vas@oniip.local) и Петя (pet@oniip.local) совместно работают над проектом.
Сначала Администратор создает проект на сервере.
Все выполняется от имени пользователя git:
mkdir test
cd test
mkdir HelloWorld.git
cd HelloWorld.git
git --bare init
При этом в домашнем каталоге пользователя git будет создан каталог для решения (возможно проект будет включать в себя несколько программ) test, каталог основного проекта HelloWorld.git в котором будет инициализирован пустой репозиторий Git.
Затем пользователь, например, Вася создает пару «открытый-закрытый» ключей. В комментарий необходимо ввести электронный адрес пользователя.
ssh-keygen -C "vas@oniip.local"
Пара ключей хранится в каталоге .ssh в домашнем каталоге пользователя.
Открытый ключ id_rsa.pub пользователь отправляет Администратору, чтобы тот включил его в список доверенных ключей пользователя git.
После этого Вася создает в своем домашнем каталоге проект и выполняет первое обновление.
mkdir test
cd test
mkdir HelloWorld
cd Test
git init
git commit -m "Initial commit"
git remote add origin ssh://git@192.168.0.x/home/git/test/HelloWorld.git
git push origin master
Второй пользователь (Петя) также создает пару ключей, отправляет открытый ключ Администратору. Поскольку проект уже создан, пользователь получает себе текущую редакцию:
mkdir test
cd test
git clone ssh://git@192.168.0.x/home/git/test/HelloWorld.git
Добавление файлов (проекта) выполняется следующей командой:
git add .
Также эту команду необходимо выполненять каждый раз, чтобы добавить к предстоящему коммиту все сделанные изменения.
Список измененных со времени последнего сохранения файлов можно увидеть:
git status
Если файлы были удалены из проекта, то для них необходимо выполнить следующую команду:
git rm <filename>
Изменения следует сохранять (commit):
git add .
git commit -m "Commit message..."
Самое сложное — это слияние изменений (merge). Это тема отдельной статьи.
Основной средой разработки на языке Java, используемой в отделе, является NetBeans IDE. Подключаемый модуль позволяет работать с Git.
Например, клонирование репозитория выглядит следующим образом:
В меню «Группа» выбираем пункт «Git/Клонировать...». На экране появляется окно выбора репозитория:
В поле «URL-адрес репозитория» вводится путь к репозиторию. Также в поле «Имя пользователя» необходимо ввести git и указать путь к файлу секретного ключа в поле «Файл секретного ключа». Нажимаем кнопку «Далее».
На экране появляется страница выбора ветви:
Нажимаем «Далее».
Появляется страница выбора каталога для сохранения:
Вводим локальный путь и нажимаем кнопку «Готово».
По окончании клонирования NetBeans предлагает открыть проект:
Нажимаем кнопку «Открыть проект». После этого с проектом можно работать в среде разработки, и при необходимости сохранять или отменять изменения, используя пункт «Группа» главного меню или контекстное окно «Проекты».
В нашем отделе Git соединен с Redmine.
Redmine позволяет легко просматривать внесенные изменения и привязывать версии к задачам.
Если имя пользователя и электронный адрес автора коммита совпадают с соответствующими атрибутами пользователя RedMine, в поле «Автор» будут подставлены имя и фамилия пользователя (что удобнее для восприятия).
В данной статье рассмотрен базовый вариант использования Git для совместной работы над проектом. В дальнейшем мы расскажем о том как с использованием Git у нас организован release менеджмент и компиляция под целевые платформы.