Библиотека сайта rus-linux.net
Серверы Linux. Часть VIII. Вводная информация о системе контроля версий git
Оригинал: gitАвтор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: A.Панин
Дата перевода: 15 июля 2015 г.
Глава 20. Система контроля версий git
Данная глава содержит вводную информацию о работе с системой контроля версий git
с использованием интерфейса командной строки. Рассматриваемый в главе репозиторий git
расположен на ресурсе GitHub
, но вы вольны выбрать какой-либо другой сервер git (или создать свой).
В сети можно найти множество отличных руководств, посвященных работе с системой контроля версий git
. Благодаря данным ссылкам вы можете не прибегать лишний раз к использованию поисковой системы Google:
20.1. О системе контроля версий git
Linus Torvalds создал систему контроля версий git
в 2005 году после того, как компания, разрабатывающая систему Bitkeeper, изменила условия лицензионного соглашения таким образом, что разработчики ядра Linux не могли больше использовать ее на безвозмездной основе.
Система контроля версий git
приобрела популярность и на данный момент является наиболее широко используемой распределенной системой контроля версий
в мире.
Комикс с ресурса "Geek and Poke" демонстрирует ситуацию, в которой просто необходима система контроля версий (изображение является собственностью ресурса "Geek and Poke" и распространяется в соответствии с условиями лицензии CCA 3.0).
Помимо исходного кода
программного обеспечения на ресурсе 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:
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 |