Рассмотрим как фиксировать и отслеживать изменения в проекте через систему контроля версий Git.

Для начала создаем папку проекта. Потом переходим в неё и проверяем какие файлы она содержит.

cd ~/Desktop/Projects/Keksholidays/
ls -1

Выглядит это примерно так:

На этом этапе мы можем начать использовать Git.

Сперва мы должны указать для Git имя и e-mail автора. Git записывает их в каждом изменении.

Все команды системы контроля начинаются со слова git. Используем следующую команду:

git config --global user.name "<your_name>"

Флаг --global сообщает git, что настройка будет применена для всех проектов, user.name - имя настройки.

В кавычках мы меняем <your_name> на имя автора.

Повторяем операцию для почты автора:

git config --global user.email "you@email"

И также в кавычках указываем почтовый адрес автора. Это нужно настроить один раз.

Теперь мы можем проверить все настройки, и что они сохранились, следующей командой:

git config --list

В терминале вы увидите примерно следующие строки:

user.name=michael
user.email=michael@gmail.com

Все настройки сохранены в файле .gitconfig и его содержимое мы можем посмотреть командой:

cat ~/.gitconfig

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

Теперь git настроен и можно сделать из нашего проекта репозиторий и начать отслеживать изменения.

Для этого мы инициализируем git командой:

git init

Мы увидим в ответ сообщение о том, что пустой репозиторий инициализирован:

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

ls -1 -a
// также можно писать команду короче ls -1a

Флаг -1 показывает файлы в столбик, а флаг -a показывает скрытые файлы.

Появилась папка .git. Она делает из простого проекта репозиторий. Её удалять нельзя, особенно, если вы еще не разбираетесь хорошо в том, что для чего нужно и как это работает. В этой папке хранится вся история изменений.

Дальше мы переходим к тем методам, которые будем использовать в каждом проекте. Изначально нам нужно понять какое у нас состояние репозитория. Делаем это командой:

git status

И мы увидим следующее:

Эта команда показывает состояние репозитория и мы видим, что у нас выводится фраза "On branch master". Git сообщает нам, что мы находимся в ветке master. Про ветки и ветвления мы будем говорить в следующих разделах курса, а пока будем работать в этой главной ветке.

Также вы можете увидеть фразу "initial commit", которая означает, что мы в самом начале и еще пока ничего не зафиксировали.

Далее мы видим "Untracked files", где приводится список файлов, которые мы пока не отслеживаем. Изменения этих файлов пока не сохранены и не зафиксированы.

Мы видим, что файлы на данном этапе выделаны красным цветом и не отслеживаемы. Изначально у нас два типа файлов - tracked и untracked, т.е. отслеживаемые и не отслеживаемые. Первые файлы находятся под контролем версий и они были в последнем слепке состояния, а вторые - нет.

Сохранение состояния называется - коммитом (коммит, commit, фиксация). Сленговое выражение закоммитить означает зафиксировать изменения. Если у вас несколько коммитов, то вы можете вернуться к любому из них или посмотреть состояние этого коммита и что было в нем.

Нам нужно сообщить Гиту что именно мы хотим сохранить. На последнем скриншоте выше сам git нам подсказывает что нужно сделать - "git add" to track.

Добавим один файл командой:

git add index.html

И посмотрим статус Гита:

git status

В итоге видим такую картину:

Видим, что файл carousel.html стал зеленым и попал в изменения, для которых можно делать коммит, т.е. он проиндексирован. Мы можем проиндексировать все файлы командой:

git add .

В команде выше точка означает текущую папку. Если мы ставим точку, то git проиндексирует всю папку.

Справка. В терминале Cmder можно очистить окно командой clear.

Убедимся, что все файлы проиндексированы:

И вот теперь мы можем сделать наш первый коммит. Используем для этого комманду:

git commit -m "first setup of the project"

Флаг -m образуется от слова message (рус. - сообщение). Наше сообщение коротко описывает что было сделано в проекте до этого коммита.

Далее проверяем состояние командой:

git status

В терминале мы увидим следующие сообщения:

Нам нечего коммитить и текущее состояние у нас сохранено.

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

Справка. Удалить файл в терминале можно командой rm - от англ. remove, а если вы хотите удалить каталог со всеми подкаталогами и файлами в нем, используйте опцию -R.

Давайте откроем файл стилей в Vim:

$ vim style.css

Если вы не внесли никаких изменений и решили выйти из Vim, то нужно нажать последовательно Esc, затем : (двоеточие) и после написать q!.

Если вы внесли изменения и хотите их сохранить, то последовательно нажимаем Esc, потом : и после пишем: conf q. Жмем Enter. И теперь можем проверить, что изменилось:

$ git status

Видим, что файл был изменен - modified и выделен красным:

Чтобы узнать что было изменено в файле мы используем команду:

$ git diff

Здесь diff происходит от англ. слова difference (рус. - разница).

Здесь мы видим информацию в каком файле произошли изменения и какие строки были удалены (выделено красным) и добавлены (выделены зеленым).

Если изменения были в двух файлах, то терминал выведет их друг за другом.

Теперь мы можем сохраниться. Сначала индексируем измененные файлы:

$ git add carousel.html
// можно использовать также команду: git add .

Проверяем изменения командой git status и снова сделаем коммит:

$ git commit -m "Changed title"

Стоит ли делать коммиты чаще? Всё зависит от вас, но лучше всего делать коммиты тогда, когда изменения обрели какую-то законченную форму.

История коммитов нам покажет команда:

$ git log

Мы увидим два коммита для моего примера:

Здесь мы видим идентификатор для каждого коммита. Этот идентификатор еще называют словом хеш. Если коммитов много, то листаем в терминале коммиты стрелками. Закрыть лог можно клавишей q.

Копируем хеш коммита и вводим команду, чтобы посмотреть конкретный коммит:

$ git show 38a77c799f59acaa120cc4e984c8474fade5b633

Мы увидим те изменения, которые были сделаны и сохранены.

Также жмем q для выхода.