Изучите команды Git на практических примерах в Linux — часть 1

Изучите команды Git на практических примерах в Linux — часть 1

Изучите команды Git на практических примерах в Linux — часть 2

 

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

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

Начальная конфигурация пользователя Git

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

Личность пользователя

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

$ git config --global user.name "Infoit User"
$ git config --global user.email "infoituser@infoit.com.ua"

Editor

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

$ git config --global core.editor vim

Compression

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

$ git config --global core.compression 2

Diff tool

Этот параметр настраивает инструмент просмотра различий. Например, команда ниже настраивает vimdiff как инструмент сравнения:

$ git config --global diff.tool vimdiff

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

Конфигурация списка

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

$ git config -l

Эта команда сгенерирует следующий вывод:

core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.editor=vim
core.compression=2
user.name=Infoit User
user.email=infoituser@infoit.com.ua
diff.tool=vimdiff

Репозитории Git

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

$ mkdir my-repo.git
$ cd my-repo.git
$ git init --bare
Initialized empty Git repository in my-repo.git

Этот метод будет полезен, когда вы начинаете новый проект. Другой способ — использовать существующий репозиторий. Такой репозиторий размещается на удаленном сервере, таком как GitHub. Чтобы загрузить удаленный репозиторий, используйте команду clone следующим образом:

$ git clone https://github.com/infoituser/my-repo.git

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

Рабочий процесс Git

В этом разделе мы обсудим рабочий процесс git.

Ввести новые изменения

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

$ touch AUTHORS                                  # Create new file
$ echo "New Contents" >> README                  # Update existing file

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

Git — это система отслеживания контента, она определяет два вышеупомянутых изменения. Проверим статус репозитория:

$ git status -s
 M README
?? AUTHORS

В приведенном выше выводе буква M появляется перед README, что указывает на то, что существующий файл был изменен. В то время как ?? появляется перед AUTHORS, что указывает на то, что это новый файл, и Git не знает об этом, поэтому такой файл называется неотслеживаемым файлом.

Добавить файл в набор изменений

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

$ git add AUTHORS

Давайте сейчас проверим статус репозитория:

$ git status -s
A  AUTHORS
M README

Вышеупомянутые выходные данные показывают A перед AUTHORS, что указывает на то, что этот файл был недавно добавлен в Git. С помощью этой команды мы можем добавить любое количество файлов.

Удалить файл из набора изменений

Давайте проинструктируем Git отследить этот недавно добавленный файл. Мы можем добиться этого с помощью команды сброса. Эта операция удалит файл из набора изменений.

$ git reset AUTHORS
$ git status -s
 M README
?? AUTHORS

Приведенные выше выходные данные показывают, что файл AUTHORS не отслеживается Git.

Зафиксировать изменения

В Git файлы, которые являются частью набора изменений, образуют фиксацию. Каждая фиксация получит уникальный идентификатор. Давайте сначала создадим ревизию

$ git add AUTHORS
$ git add README

Теперь давайте зафиксируем изменения в локальном репозитории с сообщением о фиксации. В приведенной ниже команде -m аргумент указывает сообщение фиксации.

$ git commit -m "Updated README and added AUTHORS"

Когда вы выполните указанную выше команду, она выдаст следующий вывод:

[master 0b124eb] Updated README and added AUTHORS
 2 files changed, 1 insertion(+)
 create mode 100644 AUTHORS

Проверить изменения

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

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

Репозиторий может содержать несколько коммитов от нескольких авторов. Мы можем использовать команду log для просмотра всех доступных коммитов:

$ git log

Когда вы выполните указанную выше команду, она выдаст следующий вывод:

commit 0b124eb6d0109d837f6f9396c9937406abd3f456 (HEAD -> master)
Author: Infoit User <infoituser@infoit.com.ua>
Date:   Fri Jul 27 21:06:55 2018 +0530

    Updated README and added AUTHORS

Это коммит, который мы создали ранее. В приведенной выше команде:

  • Шестнадцатеричный идентификатор представляет собой идентификатор фиксации.
  • Раздел коммита «Автор» показывает подробную информацию о том, кто внес эти изменения.
  • Раздел даты показывает дату и метку времени фиксации

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

Вышеупомянутая команда покажет подробную информацию о каждой фиксации. Чтобы просмотреть краткое описание каждой фиксации, используйте параметр –oneline следующим образом:

$ git log --oneline

Когда вы выполните указанную выше команду, она выдаст следующий вывод:

0b124eb (HEAD -> master) Updated README and added AUTHORS

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

Идентификатор фиксации связан с каждым набором изменений. Мы можем использовать этот идентификатор с командой show для просмотра содержимого фиксации.

$ git show 0b124eb6d0109d837f6f9396c9937406abd3f456

Когда вы выполните указанную выше команду, она выдаст следующий вывод:

commit 0b124eb6d0109d837f6f9396c9937406abd3f456 (HEAD -> master)
Author: Infoit User <infoituser@infoit.com.ua>
Date:   Fri Jul 27 21:06:55 2018 +0530
    Updated README and added AUTHORS
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..e69de29
diff --git a/README b/README
index 980a0d5..5680123 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
 Hello World!
+New Contents

Посмотреть разницу

Команда Diff позволяет нам просматривать изменения перед созданием набора изменений. Команда Diff показывает различия между репозиторием и локальной рабочей областью. Давайте модифицируем файл README и рассмотрим различия

$ echo "Generating diff" >> README
$ git diff
diff --git a/README b/README
index 5680123..3158230 100644
--- a/README
+++ b/README
@@ -1,2 +1,3 @@
 Hello World!
 New Contents
+Generating diff

В приведенной выше команде:

  • знак + указывает на изменения, которые добавляются в файл
  • — знак указывает на изменения, которые удалены из файла

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

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

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

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

$ git push

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

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

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

$ git pull

В Git эта операция называется операцией извлечения.

Разные команды Git

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

Изменить последнюю фиксацию

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

 

$ echo "Yet another new change" >> README
$ git add README
$ git commit --amend -m "This is amended commit

Теперь давайте проверим журнал фиксации:

$ git log
commit 8bf67aec1d1de87f03ab6aae93940b17826fde1c (HEAD -> master)
Author: Infoit User <infoituser@infoit.com.ua>
Date:   Fri Jul 27 21:54:55 2018 +0530

    This is amended commit

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

Удалить неотслеживаемые файлы

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

Давайте создадим несколько неотслеживаемых файлов:

$ touch delete-me-1 delete-me-2 delete-me-3

Чтобы удалить все указанные выше неотслеживаемые файлы, используйте команду clean с параметром -f следующим образом:

$ git clean -f
Removing delete-me-1
Removing delete-me-2
Removing delete-me-3

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

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

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

$ git log --author=Infoit

Когда вы выполните указанную выше команду, она отобразит все коммиты авторов Infoit следующим образом:

commit 8bf67aec1d1de87f03ab6aae93940b17826fde1c (HEAD -> master)
Author: Infoit User <infoituser@infoit.com.ua>
Date:   Fri Jul 27 21:54:55 2018 +0530

    This is amended commit

Просмотр истории каждого файла построчно

Чтобы просмотреть историю построчно, мы можем использовать команду blame.

$ git blame README

Когда вы выполните указанную выше команду, она выдаст следующий вывод:

76294131 (Infoit User         2018-07-27 21:12:11 -0700 1) Hello World!
8bf67aec (Infoit User         2018-07-27 21:54:55 +0530 2) New changes
8bf67aec (Infoit User         2018-07-27 21:54:55 +0530 3) Yet another changes

В приведенной выше команде:

  • Первый столбец указывает идентификатор фиксации
  • Второй столбец указывает автора
  • В третьем столбце указаны временные метки.
  • Последний столбец указывает номер строки и содержимое файла.

Просмотр различий из области подготовки

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

$ echo "Let us demonstrate staging area" >> README
$ git add README
$ git diff

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

$ git diff --staged
diff --git a/README b/README
index 74729a2..8bc5ffd 100644
--- a/README
+++ b/README
@@ -1,3 +1,4 @@
 Hello World!
 New changes
 Yet another changes
+Let us demonstrate staging area

Заключение

В этом руководстве мы обсудили основные операции Git на простых примерах. Это руководство — хорошая отправная точка для новичков в Git.