Рассмотрим как фиксировать и отслеживать изменения в проекте через систему контроля версий 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 проиндексирует всю папку.
Убедимся, что все файлы проиндексированы:
И вот теперь мы можем сделать наш первый коммит. Используем для этого комманду:
git commit -m "first setup of the project"
Флаг -m
образуется от слова message (рус. - сообщение). Наше сообщение коротко описывает что было сделано в проекте до этого коммита.
Далее проверяем состояние командой:
git status
В терминале мы увидим следующие сообщения:
Нам нечего коммитить и текущее состояние у нас сохранено.
Далее мы можем менять файлы. При этом можем использовать те редакторы, которые нам удобнее всего, например Vim.
Давайте откроем файл стилей в 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 для выхода.