Система контроля версий Git
Git — распределённая система управления версиями. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года. На сегодняшний день его поддерживает Джунио Хамано.
Оки.. поняли когда выпущено и что это такое, но не понятно, что такое "система управления версиями"
Система управления версиями (Version Control System) — программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое.
Так уже понятнее. Если кратко Git помогает нам:
- Хранить разные версии нашего когда
- Хранить их распределенно
- Находить и разрешать конфликты
Установка git
- У вас windows - идем на сайт и скачиваем инстайлер
- У вас Linux - git уже есть, либо пишем
apt install git
- У вас Mac - git может быть уже есть, но я уже не помню. Если нет, то устанавливаем
Homebrew
в одну комманду и устанавливаемgit
через командуbrew install git
Как git хранит наш код
Git хранит наш код(но и не только код) в виде последовательности изменений, т.е каждая следующая запись в истории - информация об изменении относительно предыдущей записи. Такие записи в git называются коммитами
Вы сейчас можете видеть что у каждого коммита есть имя автора
, его email
и ссылка на предыдущий коммит
. Ссылка на родительский коммит позволяет нам выстраивать коммиты в цепочки или деревья.
Для бинарных файлов
diff
не хранится.
Базовые понятия
- Коммит(commit) - запись в нашей истории изменений.
- Репозиторий(repository) - давайте будем считать, что это последовательность коммитов, некая наша база объектов.
- Удаленный репозиторий(remote repository) - репозиторий находящийся на другом сервере.
- Ссылка(ref) - указатель на какой-то коммит... в дальнейшем станет понятнее
- Индекс(index) - некий промежуточный раздел, в который мы можем добавлять изменения для дальнейшей записи их в историю(коммит в репозитории)
- Рабочая директория - Ваша папка на диске, в которой вы производите изменения
Создание репозитория в текущей директории
Для создания репозитория следует набрать комманду:
после ее выполнения будет создана скрытая папка .git
в директории проекта.
Иногда вам надо получить данные из удаленного репозитория, в таком случае вы должны воспользоваться командой git clone
Новые команды
git init
- создать репозиторий в текущей директорииgit clone <remote url> <dirname>
- склонировать удаленный репозиторий
Получение справки по командам
Для получения справки по командам есть флаг --help
для каждой команды или команда git help <command>
.
Справка у git
отличная и в ней легко разобраться.
Настройка git
Как я написал выше, каждый коммит хранит дополнительную информацию об авторе, обязательным шагом является настройка этой информации для этого можем набрать комманду:
Комманды представленные выше, поменяют конфигурацию только для проекта, для того чтобы поменять настройки на уровне пользователя следует добавить флаг --global
Новые команды
git config
- для изменения настроекgit
, если настройки должны иметь глобальный характер добавляем параметр--global
index
Добавление изменений в Для большего удобства я добалю сюда такое изображение, которое сильно облегчит понимание команд git
.
👆 Мы будем очень часто ссылаться к этому изображению и советую вам при самостоятельной работе с
git
держать его при себе.
На текущий момет времени мы уже создали с вами репозиторий и сконфигурировали информацию о пользователе. Теперь мы можем начать вносить изменения в рабочую директорию.
- Создайте файл text1.txtecho "I am text1" >> text1.txt
- Добавьте файл в
index
использую командуgit add text1.txt
Вуаля! Файл уже в индексе. Для того чтобы посмотреть текущее состояние репозитория есть комманда git status
Новые команды
git add <files>
- добавить файл или изменения в нем в индексgit status
- получить информацию о текущем состоянии репозитория/рабочей директории
Добавление коммита в локальный репозиторий
Отлично! У нас есть изменения, которые мы хотим с вами добавить в репозиторий для этого воспользуемся командой git commit
Но если вы выполните эту команду у вас откроется редактор текста в котором вы должны будете добавить комментарий к коммиту, чтобы указать комментарий сразу следует воспользоваться флагом -m
.
Теперь посмотрите на статус изпользуя комманду git status
, вы должны будете увидеть то, что никаких изменений в рабочей директории или индексе нет.
Новые команды
git commit
- создать новый коммит из изменений вindex
Подготовка изменений к коммиту
Мы уже знаем как сделать коммит и добавить изменения в индекс.. но что если этих изменений много? В таком случае мы можем воспользоваться командой:
Удаление изменений из индекса
Иногда вам может понадобиться отменить добавлений каких-то изменений в коммит, для этого можно воспользоваться коммандой git rm
с флагом --cached
что обозначает совершить удаление из индекса.
Так же для удаления файла(только если он уже был в репозитории) и добавления информации о его удалении в индекс можно воспользоваться командой git rm
без флага --cached
Новые команды
git rm
- Удалить файл из рабочей директории и добавить удаление вindex
Если вы хотите удалить файл только из индекса есть флаг
--cached
Просмотр истории коммитов
Для того чтобы посмотреть список коммитов используется комманда git log
с ее помощью мы можем вывести в консоль список всех коммитов, которые были.
Эта команда получает большое кол-во параметров для настройки отображения списка, но самые популярные из них:
--oneline
- Вывести каждый коммит в одну строку--graph
- Вывести коммиты ввиде дерева
Просмотр изменений в коммите
Это делается через git diff
. Команда покажет может показывать нам изменения между:
- Рабочей директорией и коммитом
- Двумя коммитами
- Рабочей директорией и индексом
Давайте посмотрим как это делать:
Изменение рабочей директории к состоянию коммита
Для перемещения между ветками и изменению состояния рабочей директории используется команда git checkout <commit>
, использую ее мы можем перемещаться между коммитами.
Ветки
По умолчанию у нас есть ветка master
, но бывает так что мы хотим сделать что-то, что в мастер попасть не должно в таком случае мы воспользуемся функционалом веток в git
.