Найти в Дзене

Git. Продолжаем фиксировать изменения, а что-то наоборот.

Оглавление

Изменение индексированных файлов.

Что будет, если модифицировать файл, который уже добавлен под версионный контроль. Давайте проверим. Допустим у нас есть файл file1.

[user@server~]$ ls
file1
[user@server~]$git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
file1

Сейчас этот файл находится в неотслеживаемом состоянии. Давайте его проиндексируем командой git add

[user@server~]$ git add file1
[user@server~]$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: file1

Теперь этот файл проиндексирован и войдет в следующий коммит. И тут я вспомнил, что в файл надо что-то добавить. Добавляем, например, следующее в файл

[user@server~]$ echo "something" > file1
[user@server~]$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: file1
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: file1

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

Не забывайте индексировать файлы, чтобы зафиксировать все внесенные изменения.

Игнорирование файлов в проекте.

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

[user@server~] cat .gitignore
# Комментарий
temp/
*.log
file[3-6]
!history.log

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

  • Строки начинающиеся с символа # и пустые строки игнорируются. В файле выше это первые две строки.
  • шаблон, в конце с / - означает, что надо игнорировать директорию в рабочем каталоге. В примере выше temp/ - говорит git, что не надо добавлять весь каталог temp, включая файлы в нем.
  • Можно использовать стандартные регулярные выражения. В примере, выше, с помощью таких шаблонов, мы говорим git, что не надо индексировать файлы, заканчивающиеся на log, а также файлы с именами file3, file4, file5 и file6.
  • С помощью ! можно инвертировать шаблон. По сути этот знак обозначает "нет". В файле выше, мы сообщаем git, что надо игнорировать все файлы log, но ниже указываем исключение !history.log. В итоге этот файл будет индексироваться, несмотря на суффикс log.

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

Команда git status показывает Вам только файлы, в которые вы внесли изменения. Но что, если вы хотите знать, что конкретно вы изменили в файле. Для этого есть команда git diff. Давайте посмотрим, как она работает. У нас уже есть файл file1, давайте изменим его и посмотрим, какие изменения мы внесли, но еще не проиндексировали.

[user@server~]$ echo line2 >> file1
[user@server~]$ git diff
diff --git a/file1 b/file1
index 809274b..4afbb48 100644
--- a/file1
+++ b/file1
@@ -1 +1,2 @@
something
+line2

Последняя строка говорит, о том, что мы добавили строку line2. Но у этой команды есть небольшой нюанс, если мы проиндексируем наш файл, то она ничего не покажет. Для того чтобы посмотреть изменения между проиндексированным и закоммиченым файлом, команда git diff используется с параметром --cached, либо --staged.

[user@server~]$ git add file1
[user@server~]$ git diff
[user@server~]$ git diff --cached
diff --git a/file1 b/file1
index 809274b..4afbb48 100644
--- a/file1
+++ b/file1
@@ -1 +1,2 @@
something
+line2

Заключение.

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