Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Серверы Linux. Часть VIII. Вводная информация о системе контроля версий git

Оригинал: git
Автор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: A.Панин
Дата перевода: 15 июля 2015 г.

Глава 20. Система контроля версий git

Данная глава содержит вводную информацию о работе с системой контроля версий git с использованием интерфейса командной строки. Рассматриваемый в главе репозиторий git расположен на ресурсе GitHub, но вы вольны выбрать какой-либо другой сервер git (или создать свой).

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

http://gitimmersion.com/

http://git-scm.com/book

20.1. О системе контроля версий git

Linus Torvalds создал систему контроля версий git в 2005 году после того, как компания, разрабатывающая систему Bitkeeper, изменила условия лицензионного соглашения таким образом, что разработчики ядра Linux не могли больше использовать ее на безвозмездной основе.

Система контроля версий git приобрела популярность и на данный момент является наиболее широко используемой распределенной системой контроля версий в мире.

Комикс с ресурса "Geek and Poke" демонстрирует ситуацию, в которой просто необходима система контроля версий (изображение является собственностью ресурса "Geek and Poke" и распространяется в соответствии с условиями лицензии CCA 3.0).

О системе контроля версий git

Помимо исходного кода программного обеспечения на ресурсе GitHub вы также можете найти тексты немецких и исландских законов (и, скорее всего, еще много интересных вещей, которые были опубликованы до того, как вы приступили к чтению данной главы).

20.2. Установка компонентов git

В дистрибутиве Debian 6 мы можем установить пакет программного обеспечения git с помощью команды aptitude install git таким образом, как показано ниже:

root@debian6:~# aptitude install git
НОВЫЕ пакеты, которые будут установлены:
  git libcurl3-gnutls{a} liberror-perl{a}
обновлено 0, установлено 3 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
...
Обрабатываются триггеры для man-db ...
Настраивается пакет libcurl3-gnutls (7.21.0-2.1+squeeze2) ...
Настраивается пакет liberror-perl (0.17-1) ...
Настраивается пакет git (1:1.7.2.5-3) ...

20.3. Начало работы над новым проектом

В первую очередь мы должны создать директорию для хранения файлов проекта и поместить простой файл в нее.

paul@debian6~$ mkdir project42
paul@debian6~$ cd project42/
paul@debian6~/project42$ echo "echo Ответ: 42." >> question.sh

20.3.1. Команда git init

После этого мы должны сообщить git о желании создать пустой репозиторий git в данной директории.

paul@debian6~/project42$ ls -la
итого 12
drwxrwxr-x  2 paul paul 4096 дек  8 16:41 .
drwxr-xr-x 46 paul paul 4096 дек  8 16:41 ..
-rw-rw-r--  1 paul paul   23 дек  8 16:41 question.sh
paul@debian6~/project42$ git init
Initialized empty Git repository in /home/paul/project42/.git/
paul@debian6~/project42$ ls -la
итого 16
drwxrwxr-x  3 paul paul 4096 дек  8 16:44 .
drwxr-xr-x 46 paul paul 4096 дек  8 16:41 ..
drwxrwxr-x  7 paul paul 4096 дек  8 16:44 .git
-rw-rw-r--  1 paul paul   23 дек  8 16:41 question.sh

20.3.2. Команда git config

После этого мы используем команду git config для установки значений некоторых глобальных параметров.

paul@debian6$ git config --global user.name Paul
paul@debian6$ git config --global user.email "paul.cobbaut@gmail.com"
paul@debian6$ git config --global core.editor vi

Мы можем проверить корректность установки значений этих параметров, просмотрев содержимое файла ~/.gitconfig:

paul@debian6~/project42$ cat ~/.gitconfig
[user]
        name = Paul
        email = paul.cobbaut@gmail.com
[core]
        editor = vi

20.3.3. Команда git add

Пришло время добавить файл в наш проект с помощью команды git add, а также проверить корректность его добавления с помощью команды git status.

paul@debian6~/project42$ git add question.sh
paul@debian6~/project42$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   question.sh
#

В выводе команды git status можно обнаружить информацию о том, что новый файл готов к помещению в репозиторий.

20.3.4. Команда git commit

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

paul@debian6~/project42$ git commit -m "начало разработки проекта"
[master (root-commit) 5c10768] начало разработки проекта
 1 file changed, 1 insertion(+)
 create mode 100644 question.sh
paul@debian6~/project42$ git status
# On branch master
nothing to commit (working directory clean)

20.3.5. Модификация добавленного в репозиторий файла

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

paul@debian6~/project42$ git status
# On branch master
nothing to commit (working directory clean)
paul@debian6~/project42$ vi question.sh 

После этого проверяем состояние проекта и убеждаемся в корректном установлении факта модификации файла:

paul@debian6~/project42$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   question.sh
#
no changes added to commit (use "git add" and/or "git commit -a")

Наконец, мы сохраняем модификацию в репозитории git.

paul@debian6~/project42$ git add question.sh
paul@debian6~/project42$ git commit -m "добавлена строка she-bang в главный сценарий"
[master 86b8347]  добавлена строка she-bang в главный сценарий
 1 file changed, 1 insertion(+)
paul@debian6~/project42$ git status
# On branch master
nothing to commit (working directory clean)

20.3.6. Команда git log

Мы можем ознакомиться со списком изменений содержимого репозитория (списком коммитов) с помощью команды git log.

paul@debian6~/project42$ git log
commit 86b8347192ea025815df7a8e628d99474b41fb6c
Author: Paul <paul.cobbaut@gmail.com>
Date:   Sat Dec 8 17:12:24 2012 +0100

    добавлена строка she-bang в главный сценарий

commit 5c10768f29aecc16161fb197765e0f14383f7bca
Author: Paul <paul.cobbaut@gmail.com>
Date:   Sat Dec 8 17:09:29 2012 +0100

    начало разработки проекта

Формат вывода списка изменений может быть изменен.

paul@debian6~/project42$ git log --pretty=oneline
86b8347192ea025815df7a8e628d99474b41fb6c добавлена строка she-bang в главный сценарий
5c10768f29aecc16161fb197765e0f14383f7bca начало разработки проекта

Формат вывода данного списка может изменяться в значительной степени.

paul@debian6~/project42$ git log --pretty=format:"%an: %ar :%s"
Paul: 8 minutes ago :добавлена строка she-bang в главный сценарий
Paul: 11 minutes ago :начало разработки проекта

20.3.7. Команда git mv

Переименование файла проекта может осуществляться с помощью команды mv, после которой должны быть выполнены команды git remove с передачей старого имени файла и git add с передачей нового имени файла. Но аналогичная операция может быть выполнена гораздо проще с помощью единственной команды git mv.

paul@debian6~/project42$ git mv question.sh thequestion.sh
paul@debian6~/project42$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    question.sh -> thequestion.sh
#
paul@debian6~/project42$ git commit -m "улучшена схема имен файлов проекта"
[master 69b2c8b]  улучшена схема имен файлов проекта
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename question.sh => thequestion.sh (100%)

20.4. Ветви git

Работа над проектом может осуществляться как в рамках одной, так и в рамках большего количества ветвей git. В данном случае мы создадим новую ветвь, в рамках которой внесем изменения в сценарий. После того, как мы удостоверимся в корректности внесенных изменений, мы объединим данную ветвь с основной ветвью (master). (При повторении описанных действий полезно также неоднократно использовать команду git status для лучшего понимания).

paul@debian6~/project42$ git branch
* master
paul@debian6~/project42$ git checkout -b newheader
Switched to a new branch 'newheader'
paul@debian6~/project42$ vi thequestion.sh 
paul@debian6~/project42$ git add thequestion.sh
paul@debian6~/project42$ source thequestion.sh 
Ответ: 42.

Похоже, сценарий является работоспособным, поэтому сохраним изменения, внесенные в рамках данной ветви, в репозитории.

paul@debian6~/project42$ git commit -m "добавлен новый заголовок с информацией об авторах"
[newheader 730a22b]  добавлен новый заголовок с информацией об авторах
 1 file changed, 4 insertions(+)
paul@debian6~/project42$ git branch
  master
* newheader
paul@debian6~/project42$ cat thequestion.sh 
#!/bin/bash
#
# copyright linux-training.be
#

echo Ответ: 42.

Давайте вернемся к работе с основной ветвью и посмотрим, что случилось с ней.

paul@debian6~/project42$ git checkout master
Switched to branch 'master'
paul@debian6~/project42$ cat thequestion.sh 
#!/bin/bash
echo Ответ: 42.

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

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

paul@debian6~/project42$ cat thequestion.sh 
#!/bin/bash
echo Ответ: 42.
paul@debian6~/project42$ git merge newheader
Updating 69b2c8b..730a22b
Fast-forward
 thequestion.sh |    4 ++++
 1 file changed, 4 insertions(+)
paul@debian6~/project42$ cat thequestion.sh 
#!/bin/bash
#
# copyright linux-training.be
#

echo Ответ: 42.

Теперь новая ветвь с именем newheader может быть удалена.

paul@debian6~/project42$ git branch
* master
  newheader
paul@debian6~/project42$ git branch -d newheader
Deleted branch newheader (was 730a22b).
paul@debian6~/project42$ git branch
* master

20.5. Продолжение следует...

Рассказ о системе контроля версий git далек от своего завершения...

Ниже приведены отличные онлайн-руководства, в которых описываются приемы работы с системой контроля версий git. Данный список поможет вам избежать отправки одного лишнего запроса в процессе работы с поисковой системой Google:

http://gitimmersion.com/

http://git-scm.com/book

20.6. Ресурс github.com

Создайте учетную запись на ресурсе github.com. Данный ресурс предоставляет графический интерфейс для сервера git огромного масштаба с более чем двумя с половиной миллионами пользователей и практически пятью миллионами проектов (включая такие проекты, как Fedora, ядро Linux, Android, Ruby on Rails, Wine, X.org, VLC...).

https://github.com/signup/free

Данная учетная запись создается бесплатно и будет использоваться в приведенных ниже примерах.

20.7. Добавление вашего публичного ключа на GitHub

Я предпочитаю работать с ресурсом GitHub, используя свой публичный ключ, поэтому вы, скорее всего, также высоко оцените идею загрузки вашего публичного ключа на ресурс github.com.

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

https://github.com/settings/ssh

Пожалуйста не забывайте о том, что ваш закрытый ключ не должен быть опубликован!

20.8. Практическое задание: система контроля версий git

1. Создайте проект с разработанным вами сценарием на ресурсе GitHub. Как минимум два человека должны внести усовершенствования в него.


Предыдущий раздел: Оглавление Следующий раздел:
19.18. Расширенные атрибуты файлов   Глава 21. Знакомство с протоколом IPv6