Для начала пройдем поверхностно весь путь от создания проекта в Git до начала отслеживания изменений. Этой теме мы посвятим этот урок, а уже в следующих — поговорим подробнее про все этапы. В процессе мы изучим большое количество новых терминов и команд, которые нужны для понимания работы Git.
Основные команды
Git может отслеживать файлы проекта только в том случае, когда они помещены под контроль версий. Для этого нужно зайти в директорию проекта и выполнить команду инициализации git init
.
Проект может быть как новый, так и уже существующий. Процесс инициализации от этого не поменяется:
# Создаем новый проект
mkdir hexlet-git
# Переходим в созданную директорию
cd hexlet-git
# Выполняем инициализацию
git init
Initialized empty Git repository in /private/tmp/hexlet-git/.git/
Команда git init
создает репозиторий — директорию .git, которая содержит все необходимые для работы Git-файлы.
С помощью команды git status
можно посмотреть статус репозитория:
git status
On branch main
No commits yet
nothing to commit (create/copy files and use "git add" to track)
В этом выводе указано, что репозиторий пустой (No commits yet
) — в нем нет новых или измененных файлов.
Давайте попробуем добавить несколько файлов:
# Создаем файл README.md со строкой текста
echo 'Hello, Hexlet!' > README.md
echo 'Haskell Curry' > PEOPLE.md
Теперь снова смотрим на статус:
git status
# Часть вывода убрана
Untracked files:
(use "git add <file>..." to include in what will be committed)
PEOPLE.md
README.md
Git увидел, что в проекте появились новые файлы, о которых ему ничего не известно. Они помечаются как неотслеживаемые файлы (untracked files).
Git не следит за изменениями в таких файлах, потому что они не добавлены в репозиторий.
Добавление в репозиторий происходит в два шага. Первым шагом выполняем команду подготовки файлов git add <путь до файла>
:
# Для каждого нового или измененного файла
git add README.md
Смотрим, что произошло:
git status
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
PEOPLE.md
Файл README.md теперь находится в состоянии «подготовлен к коммиту» — другими словами, файл попал в индекс.
Следующий шаг — это коммит. Под этим термином понимается окончательное добавление в репозиторий, когда Git запоминает файл навсегда и следит за всеми последующими изменениями.
Во время коммита мы берем все подготовленные изменения (они могут включать любое количество файлов) и отправляем их в репозиторий как единое целое. Вот, как он выполняется:
git commit -m 'add README.md'
[main (root-commit) 3c5d976] add README.md
1 file changed, 1 insertion(+)
create mode 100644 README.md
Флаг -m
означает message, то есть описание коммита. Коммит можно выполнять и без него, но тогда откроется редактор, в котором нужно будет ввести описание коммита.
Мы рекомендуем делать осмысленные описания — это хороший тон. Пример соглашения по именованию коммитов приведен в дополнительных материалах к уроку.
Перейдем к процессу работы с Git:
Может возникнуть вопрос: зачем так сложно? Зачем отдельно отправлять файлы в индекс командой git add
? Почему нельзя добавлять все измененные файлы сразу в коммит?
Как ни странно, такой процесс создан как раз для удобства программистов. Дело в том, что во время разработки может меняться и добавляться много файлов. Но это не значит, что мы хотим добавить все эти изменения в один коммит.
Со смысловой точки зрения, коммит — это какое-то логически завершенное изменение внутри проекта. Его размер бывает очень разным:
- Маленьким, если мы исправляем одну опечатку в одном файле
- Большим, если мы внедряем новую функциональность
Главное в коммите — его атомарность. Другими словами, он должен выполнять ровно одну задачу.
Теперь файл README.md находится внутри репозитория. Убедиться в этом можно, запустив команду git status
:
git status
Untracked files:
(use "git add <file>..." to include in what will be committed)
PEOPLE.md
Команда git status не выводит файлы, которые добавлены в репозиторий и не содержат изменений. При этом сам файл README.md находится внутри директории hexlet-git.
Самостоятельная работа
- Установите Git по инструкции
- Выполните все шаги из урока
- Добавьте файл PEOPLE.md в репозиторий
После добавления команда git status
покажет такой вывод:
git status
On branch main
nothing to commit, working tree clean
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты