Начало работы с Git
Инициализируем репозиторий
Сделать папку репозиторием — git init
Чтобы Git начал отслеживать изменения в проекте, папку с файлами этого проекта нужно сделать Git-репозиторием (от англ. repository — «хранилище»). Для этого следует переместиться в неё и ввести команду git init
(от англ. initialize — «инициализировать»).
Например, создайте папку first-project
и сделайте её Git-репозиторием: перейдите в неё с помощью команды cd
и выполните git init
.
$ cd ~/dev/first-project # перешли в нужную папку $ git init # создали репозиторий
Вы можете создать папку в любом месте на компьютере. Но в этом случае не забывайте менять в наших примерах путь ~/dev/first-project
на тот, который ведёт к вашей папке. Помните, что не рекомендуется создавать репозиторий Git внутри другого Git-репозитория. Это может вызывать проблемы с отслеживанием изменений.
В некоторых случаях при инициализации репозитория Git может показать объёмное сообщение, которое начинается со слов Using 'master' as the name…
. Не пугайтесь: это не ошибка. Пока это сообщение не имеет большого значения.
Также git init
выведет сообщение вида Initialized empty Git repository in <*ваша папка с проектом*>/.git/
(англ. «инициализирован пустой Git-репозиторий в <*ваша папка*>/.git/
»). В подпапке .git
Git будет хранить всю служебную информацию.
Команда git init
— одна из редко применяемых, ведь репозиторий создаётся один раз, а пользоваться им можно сколько угодно долго.
«Разгитить» папку, если что-то пошло не так, — rm -rf .git
Если вы случайно сделали Git-репозиторием не ту папку, её можно «разгитить». Для этого нужно удалить скрытую подпапку .git
.
$ cd <папка с репозиторием> # перешли в папку $ rm -rf .git # удалили подпапку .git
Разберём подробнее, что такое -rf
:
- ключ
-r
(от англ. recursive — «рекурсивно») позволяет удалять папки вместе с их содержимым; - ключ
-f
(от англ. force — «заставить») избавит вас от вопросов вроде «Вы точно хотите удалить этот файл? А этот? И этот тоже?».
Проверить состояние репозитория — git status
После инициализации репозитория first-project
запустите команду git status
(от англ. status — «статус», «состояние») — она показывает текущее состояние репозитория.
- название текущей ветки:
On branch master
илиOn branch main
; - сообщение о том, что в репозитории ещё нет коммитов:
No commits yet
; - сообщение, которое говорит: «чтобы что-нибудь закоммитить (то есть зафиксировать), нужно сначала это создать» —
nothing to commit (create/copy files and use "git add" to track)
.
В отличие от git init
, команду git status
используют часто. В любой непонятной ситуации стоит посмотреть состояние (статус) репозитория, а потом решить, что делать дальше.
Добавляем файлы в репозиторий
Вы инициализировали Git-репозиторий, но в нём пока ничего нет. В этом уроке разберём, как добавить туда файлы.
Подготовить файлы к сохранению — git add
Добавим в репозиторий два файла. Например, файл todo.txt
, в котором будет список дел, и readme.txt
для информации о проекте.
Почему именно текстовые файлы? Чаще всего в Git хранят исходный код программ. Но с точки зрения системы контроля версий любой код — это всего лишь текстовый файл. Какой-то специальной логики для хранения программ в ней нет.
Так что Git вполне может быть повседневным инструментом как разработчиков, которые пишут на разных языках программирования, так и администраторов и DevOps, которые, например, работают над файлами конфигураций, или технических писателей, которые создают документацию, и так далее.
Чтобы сделать наши примеры универсальными, мы будем использовать именно текстовые файлы.
Создайте файлы todo.txt
и readme.txt
в папке first-project
и запустите git status
, чтобы посмотреть, что изменилось.
Git сообщит, что в папке first-project
есть untracked files
(от англ. track — «следить», untracked — «неотслеженный», «неотслеживаемый») — ещё не отслеживаемые файлы readme.txt
и todo.txt
.
Состояние untracked
значит, что Git ещё не хранит информацию о версиях файла и не может отследить, как он изменялся.
Сейчас в first-project
два файла. Мы хотим отслеживать состояние обоих, поэтому можем использовать команду git add --all
(от англ. add — «добавить» + от англ. all — «всё»). Ключ, или флаг, --all
позволяет подготовить к сохранению все файлы в репозитории.
Добавлять файлы можно и по одному, без ключа --all
.
$ git add todo.txt $ git add readme.txt $ git status
Также можно добавить текущую папку целиком — в этом случае все файлы в ней тоже будут добавлены. Обратиться к текущей папке в Bash позволяет точка (.
).
$ git add . # добавить всю текущую папку $ git status
Чем отличается запоминание от сохранения? Командаgit add
не сохраняет содержимое файлов в репозитории. Само сохранение, или фиксацию состояния файлов, называют коммитом (от англ. commit — «совершать», «фиксировать»). «Сделать коммит» значит сохранить текущую версию файла.
Если провести аналогию, командуgit add
можно сравнить с добавлением товаров в корзину в интернет-магазине, а коммит — с оформлением и оплатой заказа.
Если сейчас отредактировать любой из «зелёных» файлов в папке first-project
, он перейдёт в состояние modified
(англ. «изменённый») и будет и в «зелёном», и в «красном» списках.
Например, откройте файл todo.txt
в любом редакторе (подойдёт даже блокнот) и напишите в нём: 1. Пройти пару уроков по Git.
.
Файл todo.txt
теперь есть и в «зелёном», и в «красном» списках:
- зелёным отмечена пустая версия файла — в таком виде он был во время последнего запуска команды
git add
; - красным отмечена версия с текстом
1. Пройти пару уроков по Git.
.
Чтобы запомнить новое состояние файла, нужно снова ввести команду git add
и передать в качестве параметра имя изменённого файла или ключ --all
.
$ git add todo.txt # или $ git add --all
Теперь файл todo.txt
снова готов к сохранению! Будет сохранена последняя добавленная версия с текстом 1. Пройти пару уроков по Git.
.
Делаем первый коммит
Коммит — это одна из основных сущностей в Git (и в других системах контроля версий). Коммит гарантирует, что изменения будут сохранены в истории и при необходимости к ним можно будет «откатиться». Это как если бы вы могли выполнить операцию Ctrl+Z
для целой папки (репозитория).
Выполнить коммит — git commit
Сделать коммит можно командой git commit
c ключом -m
(от англ. message — «сообщение»), который присваивает коммиту сообщение.
Обычно в таком сообщении поясняется, в чём именно состояли изменения. Это как заметки на полях: благодаря им проще читать и понимать текст. Сообщение коммита выполняет те же функции — улучшает понимание и упрощает навигацию. Оно пишется после ключа -m
в кавычках.
Например, перейдите в папку first-project
и выполните коммит со следующим комментарием.
После нажатия Enter
текущая версия файлов будет сохранена в репозитории с сообщением Мой первый коммит!
.
Коммит (по названию команды git commit
) — это по сути список файлов с их контентом.
Команда git commit
выведет информацию о коммите.
[master (root-commit) baa3b6e]
значит:- коммит был в ветке
master
; root-commit
— это самый первый, или «корневой» (англ. root), коммит в ветке, у следующих коммитов такой надписи не будет;baa3b6e
— сокращённый идентификатор коммита (подробнее об этом мы ещё расскажем).2 files changed, 1 insertion(+)
значит:- изменились два файла (
readme.txt
иtodo.txt
); - одна строка была добавлена (
1. Пройти пару уроков по Git.
). - Строки вида
create mode 100644 readme.txt
— это более подробная информация о новых (добавленных в Git) файлах. create
(англ. «создать») говорит, что файл был создан. Если бы файл был удалён, на этом месте было бы словоdelete
(англ. «удалить»).mode 100644
сообщает, что это обычный файл. Также возможны варианты100755
для исполняемых файлов (например,что-нибудь.exe
) и120000
для файлов-ссылок в Linux. Файлы-ссылки не содержат данных сами по себе, а только ссылаются на другие файлы — как «ярлыки» в Windows.
Ещё раз о разнице между git add
и git commit
Сначала команда git add
сообщает Git, какие именно файлы нужно сохранить и какую их версию. Затем с помощью команды git commit
происходит само сохранение.
В прошлом уроке мы сравнили add
c добавлением товаров в корзину, а commit
— с заказом. Теперь проведём ещё одну аналогию — с фотографией.
Сначала вы просите друзей встать в ряд — это команда git add
. И только после того, как все заняли свои места, поправили волосы и улыбнулись, вы нажимаете кнопку и делаете снимок — это команда git commit
. Сам получившийся снимок и будет коммитом. В нашем случае на этой фотографии с обратной стороны ещё есть подпись «Мой первый коммит!».
Кстати, Мой первый коммит!
— всё же не лучший вариант сообщения. Коммит нужно описывать так, чтобы было понятно, какие именно изменения были сделаны. Например: Добавлено важное дело в TODO
, Добавлена сортировка имён
, Исправлена ошибка в цикле
или Добавлены заготовки рекламных текстов
.
Задание для самостоятельной работы
1) Откройте файл readme.txt
в любом редакторе (например, в блокноте).
2) Добавьте в файл описание проекта, например: Тренировочный проект для работы с Git.
.
3) Сделайте коммит с подходящим сообщением.
4) В файле todo.txt
замените 1. Пройти пару уроков по Git.
на 1. Пройти пару тем по Git.
.
Просматриваем историю коммитов
В этом уроке разберём, как вывести историю коммитов, — это понадобится для отслеживания того, что происходит в репозитории.
Просмотреть историю коммитов — git log
В самостоятельном задании прошлого урока вы сделали три коммита в ваш репозиторий. Чтобы увидеть их все, введите команду git log
(от англ. log — «журнал [записей]»).
Обратите внимание, что по умолчанию git log
выводит коммиты в обратном хронологическом порядке — последние коммиты оказываются первыми сверху. В этом можно убедиться, если посмотреть на дату и время их создания.