Работа с git в ОС Linux

git linux

Содержание статьи

Показать/скрыть подробное содержание
  1. Конфигурация Git
    1. Пользовательские идентификаторы
    2. Редактор по умолчанию
    3. Компрессия
    4. Инструмент Diff
    5. Список параметров конфигурации
    6. Создание git-репозитория
  2. Работа с Git
    1. Внесение изменений
    2. Проверка статуса репозитория
    3. Добавление файлов
    4. Удаление файлов
    5. Фиксация изменений
  3. Просмотр изменений
    1. Просмотр журнала фиксаций
    2. Просмотр краткого журнала фиксаций
    3. Просмотр фиксаций
    4. Просмотр разницы
  4. Работа с удалёнными репозиториями
    1. Публикация в удалённом репозитории
    2. Синхронизация с удалённым репозиторием
  5. Работа с ветками
    1. Создание ветки
    2. Просмотр списка веток
    3. Удаление ветки git
    4. Переключение между ветками
    5. Восстановление рабочего дерева
    6. Объединение веток
  6. Работа с тегами
    1. Создание тегов
    2. Просмотр списка тегов
    3. Удаление тегов
  7. Другие команды Git
    1. Изменение последнего коммита
    2. Удаление ненужных файлов
    3. Просмотр коммитов конкретного автора
    4. Переименование файлов
    5. Перемещение файлов
    6. Удаление файлов
    7. Сброс

Git - это распределённая система контроля версий. Он в основном используется разработчиками программного обеспечения для управления исходным кодом.

Это бесплатное программное обеспечение с открытым исходным кодом. Многие крупные организации используют его для управления своей огромной базой кода.

В этой статье представлено базовое руководство по работе с git в операционных системах на базе ядра линукс и предполагается, что Git уже установлен в вашей системе. Если это не так, то установите его из репозитория своего дистрибутива.

Конфигурация Git

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

Пользовательские идентификаторы

В Git мы можем задать идентификатор пользователя, указав его имя и адрес электронной почты. Эта информация будет использоваться во время каждой операции фиксации изменений репозитория. Чтобы назначить идентификаторы выполняем в терминале следующие команды: git config --global user.name "Ваше имя"
git config --global user.email "ваш_адрес@почты.com"

Редактор по умолчанию

Команда, приведённая ниже, указывает редактор, который будет использоваться при написании сообщения коммитов: git config --global core.editor mcedit

Данной командой мы указали гиту, что в случае необходимости редактирования текста, надо использовать редактор mcedit. Вы можете указать здесь свой любимый редактор, например vim, nano или любой другой.

Компрессия

Этот параметр позволяет настроить уровень сжатия. Допустимый диапазон для сжатия от -1 до 9. Значение указывает на степень сжатия zlib, уровень сжатия по умолчанию 0, что означает отсутствие компрессии, а уровни от 1 до 9 — различные варианты компромисса скорости сжатия / размера, 9 - самое медленное сжатие.

Пример установки 3-го уровня сжатия: git config --global core.compression 3

Инструмент Diff

Параметр diff.tool устанавливает инструмент для просмотра различи. Команда, указанная ниже, выбирает редактор mcedit в качестве инструмента diff: git config --global diff.tool mcedit

В приведённых выше командах везде использовалась опция --global, которая задаёт глобальную конфигурацию. Это означает, что конфигурация, указанная с этим параметром, будет применена ко всем репозиториям, присутствующим в текущей системе. Чтобы создать конфигурацию для одного конкретного репозитория, просто введите параметры настройки без --global.

Список параметров конфигурации

Чтобы посмотреть конфигурацию Git, выполните следующую команду в терминале: git config -l

Команда сгенерирует примерно следующий вывод: user.name=AVD-SF
user.email=mail@andrew-dmitriev.pro
user.signingkey=4CE7EBEE098B909F
core.editor=mcedit
core.compression=3
gpg.program=gpg2 diff.tool=mcedit
в котором можно увидеть установленные параметры для git.

Создание git-репозитория

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

Чтобы создать новый пустой репозиторий, выполните команды: mkdir newRepo
cd newRepo
git init

Эти команды создают новую папку с именем newRepo и инициализируют в ней пустой репозиторий. Метод будет полезен, когда вы начинаете новый проект.

Другой метод - использовать существующий репозиторий. В этом способе сначала репозиторий создаётся на удалённом сервере, например на GitHub, а затем загружается с использованием команды clone: git clone https://github.com/имя _пользователя_на_github/имя_репозитория.git

В приведённой выше команде последним аргументом является путь до удалённого репозитория.

Работа с git

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

Внесение изменений

Первый шаг в работе с созданным репозиторием — это внесение изменений. Это может быть добавление нового файла или обновление (редактирование) уже существующих.

Создадим новый файл, для этого используем утилиту touch: touch README.md

Теперь изменим содержимое файла newFile.txt, добавив в него слова «Новый контент»: echo «Новый контент» » README.md

Проверка статуса репозитория

Git идентифицирует контент и отслеживает его изменения, чтобы посмотреть внесённые изменения можно воспользоваться краткой (с опцией -s) командой проверки статуса: git status -s
?? README

Знаки ?? здесь означают, что файл README.md новый и ещё не добавлен гитом, поэтому такой файл называется неотслеженным.

Для более подробного вывода статуса можно использовать предыдущую команду без опции -s.

Добавление файлов в git

Теперь пора поручить Git отслеживать новые файлы. Этого можно добиться командой add: git add README.md

После этой операции git начнёт отслеживать изменения, внесённые в добавленный нами файл README.md.

Теперь при проверке статуса перед файлом отображается буква «А», так как он добавлен в git и никаких других изменений в нём не произошло: git status -s
A README.md

Можно добавить любое количество файлов, используя эту команду, но чтобы не вводить каждый раз имена новых файлов, а добавить сразу всё, можно воспользоваться командой: git add . либо git add -A

Удаление файла

Чтобы удалить файл из git можно воспользоваться командой reset, которая отменит слежение за изменениями файла, например: git reset README.md Теперь при проверке статуса увидим следующее: git status -s
?? README.md
это значит, что файл README.md больше не отслеживается.

Фиксация изменений

Для того чтобы зафиксировать созданный набор изменений в файлах проекта нам понадобится команда commit, которая «сохранит» состояние отслеживаемых файлов. В приведённой ниже команде после ключа -m указано дополнительное сообщение, в котором мы кратко пояснясним какие изменения были внесены в файлы проекта. git commit -m «Обновлён файл README.md»

Когда вы выполняете команду выше, она сгенерирует примерно следующий вывод: [master (корневой коммит) a791514] Обновлён файл README.md
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md

Просмотр изменений

В этом разделе мы увидим команды, которые позволят посмотреть изменения в репозитории.

Просмотр журнала фиксаций

Репозиторий может содержать несколько коммитов (фиксаций), причём возможно созданных несколькими авторами и для их просмотра можно использовать различные команды журнала, например, для просмотра всех доступных коммитов: git log Команда выдаст примерно следующий результат: commit a791514d3e75536a4e077893fc8ab2cf01e4327f (HEAD -> master)
Author: AVD-SF <mail@andrew-dmitriev.pro>
Date: Tue Oct 23 22:30:33 2018 +0300

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

  • шестнадцатеричный идентификатор коммита (фиксации);
  • подробности о том, кто внёс изменения;
  • дата и время создания фиксации.

Просмотр краткого журнала фиксации

Чтобы просмотреть однострочное краткое описание имеющегося коммита, можно использовать команду log с параметром --oneline: git log --oneline
результат будет примерно таким:
a791514 (HEAD -> master) Обновлён файл README.md

Просмотр фиксаций

Каждая фиксация в репозитории имеет свой идентификатор - Commit ID. Мы можем использовать его с командой show для просмотра содержимого фиксации: git show a791514d3e75536a4e077893fc8ab2cf01e4327f когда вы выполните эту команду, будет сгенерирован примерно такой результат: Author: AVD-SF <mail@andrew-dmitriev.pro>
Date: Tue Oct 23 22:30:33 2018 +0300
Обновлён файл README.md
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29

Просмотр разницы

Команда diff позволяет просматривать изменения, она показывает различия между репозиторием и локальной рабочей областью. Модифицируем файл README и рассмотрим различия с помощью команды diff: echo "различные изменения" >> README.md
git diff
в результате увидим следующий вывод в консоле: diff --git a/README.md b/README.md
index e69de29..63660e5 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+различные изменения
Здесь после знака + мы видим добавленную нами в файл информацию.

Работа с удалёнными репозиториями

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

Публикация в удалённом репозитории

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

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

Синхронизация с удалённым репозиторием

Многие разработчики могут публиковать изменения своего рабочего пространства в удалённом репозитории. Git позволяет нам загружать эти изменения к себе, то есть синхронизироваться с удалённым репозиторием. Добиться этого можно используя команду pull: git pull

Работа с ветками

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

Создание ветки

Для создания новой ветви выполните следующую команду: git branch newBranch

Команда создаст новую локальную ветку с названием newBranch.

Чтобы создать удалённую ветвь выполните команду git push следующим образом: git push origin newBranch

Просмотр списка веток

Чтобы просмотреть список существующих веток достаточно выполнить следующую команду: git branch
* master
newBranch

Знаком * будет обозначена текущая рабочая ветвь.

Для отображения локальных и удалённых веток выполните предыдущую команду с ключом -a: git branch -a

Ветви, которые будут выделены красным цветом, являются удалёнными.

Удаление ветки git

Чтобы удалить локальную ветвь, используйте параметр -d следующим образом: git branch -d newBranch где newBranch — имя удаляемой ветки.

Для удаления удалённой ветви выполните следующую команду: git push origin: newBranch

Обратите внимание, что требуется использование двоеточия перед именем ветки.

Переключение между ветками

Для переключения между ветвями выполните команду checkout с именем требуемой ветки, например, чтобы переключиться на newBranch: git checkout newBranch

До сих пор мы использовали отдельные команды для создания и переключения на ветвь, но мы можем добиться этого, выполнив одну команду: git checkout -b newBranch которая создаст новую ветку newBranch и сразу переключиться на неё.

Восстановление рабочего дерева

Git позволяет нам откатить ненужные изменения. Мы можем добиться этого, используя команду checkout. Поясним это на примере. Сначала внесём изменения в существующий файл README.md и проверим статус репозитория: echo "вносим изменения README" >> README.md
git status -s
M README

Теперь, чтобы отменить добавление фразы "вносим изменения README" в файл README.md, выполним следующую команду: git checkout - README

Объединение веток

Как видно из названия, операция объединения применяется для слияния одной ветви с другой. Сначала создадим новую ветку и зафиксируем изменения в этой ветке: git checkout -b newBranch
echo "вносим изменения в README" >> README.md
git add README.md
git commit -m "коммитим изменённый README"
теперь перейдём к ветке master и сделаем слияние с newBranch. git checkout master
git merge newBranch
в результате увидим следующий вывод: Обновление 8711914..d6b5750
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)

Теперь проверим, какие изменения произошли в мастер-ветке: git log -1 --oneline
42e28сa (HEAD -> master, newBranch) Обновлено README

Работа с тегами

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

Создание тега

Операция очень простая и сводится к выполнению команды следующего вида: git tag myTag в которой myTag — название созданного тега.

Чтобы создать тег в удалённом репозитории, выполните команду push следующим образом: git push origin myTag

Просмотр списка тегов

Чтобы выполнить данную операцию, просто введите команду tag без каких-либо аргументов: git tag
myTag

Удаление тега

Для удаления тегов, выполните команду tag с аргументом -d следующим образом: git tag -d myTag

Команда, приведённая выше, удалит тег с названием myTag.

Чтобы удалить тег из удалённого репозитория, выполните следующую команду: git push origin: myTag

Другие команды Git

В этом разделе обсудим различные дополнительные команды Git, которые будут полезны для выполнения повседневных задач.

Изменение последнего коммита

Git позволяет нам изменять последнюю фиксацию без создания нового коммита. Это используется в основном для исправления допущенных ошибок в предыдущем сообщении фиксации, для этого используется ключ --amend: echo «Исправили сообщение последнего коммита» >> README
git add README
git commit --amend -m «Это исправленная фиксация»

Давайте проверим журнал фиксации: git log
commit 234145f69f4c7d8828f2dcc159cb9760242082cf (HEAD -> master)
Author: AVD-SF <mail@andrew-dmitriev.pro>
Date: Wed Oct 24 19:31:02 2018 +0300
Это исправленная фиксация

Теперь мы видим новое сообщение о фиксации, идентификатор и новую метку времени.

Удаление ненужных файлов

Неотслеживаемые (ненужные) файлы - это те, которые неизвестны Git. Мы можем удалить все неотслеживаемые файлы с помощью команды clean.

Создадим в текущей папке несколько новых файлов: touch delete-1 delete-2 delete-3

Для удаления всех вышесозданных файлов одной командой используем clean с параметром -f: git clean -f
Удаление delete-1
Удаление delete-2
Удаление delete-3

Обратите внимание, эта команда безвозвратно удаляет файлы, поэтому используйте её с осторожностью.

Просмотр коммитов конкретного автора

Если мы используем команду log, то она показывает коммиты всех авторов. Для просмотра коммитов конкретного автора используйте флаг --author следующим образом: git log --author = имя_автора

Переименование файлов

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

Теперь проверим статус: git status -s
R README -> new-README

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

Перемещение файлов

Операция перемещения используется для перемещения файла из одного каталога в другой. Для перемещения файла выполните следующую команду: mkdir new-dir
git mv ./README.md ./new-dir/

В этом примере мы создали новый каталог с названием new-dir и переместили файл README.md в него.

Теперь проверим статус репозитория: git status -s в результате увидим: R README.md -> new-dir/README.md

Удаление файлов

Чтобы удалить файл, выполните следующую команду: git rm README.md

При проверке статуса репозитория увидим: git status -s
D README
то есть файл README был удалён.

Сброс

Поясним это на примере: touch README.md
git add README.md
git status -s
A README.md

В приведённых выше строках мы создали файл README.md и добавили его Git. Теперь возможно сделать сброс с помощью команды reset, которая удалит файл README.md из набора изменений: git reset README.md

Теперь проверим статус репозитория: git status -s
?? README.md

Как и ожидалось, файл был удалён из набора изменений.