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