Предыдущая часть:
У системы контроля версий Git есть куча сложного функционала, но хорошая новость заключается в том, что для себя, для дома достаточно освоить всего пару команд и это даст вам 90% всей возможной пользы.
Что такое GitHub и GitLab
Это то, что нам сейчас НЕ ПОНАДОБИТСЯ. Это сайты, работающие на базе Git, но чтобы пользоваться Git, ходить на эти сайты и регистрироваться там совершенно необязательно. Контроль версий вы ведёте на своей собственной машине, поэтому никакие сайты вам не нужны.
Их назначение ровно в одном – чтобы иметь облачную ссылку на свой проект в формате Git, и чтобы организовать коллективную работу. Разница между двумя сайтами в том, что GitLab дополнительно позволяет автоматизировать процессы сборки, тестов и т.п., а GitHub больше похож на социальную сеть, но это сейчас очень далеко от текущей темы.
Поэтому всё, что вам нужно для себя, это сама программа Git.
Установка Git
В Linux вы можете просто
apt install git
В Windows – скачать и запустить установщик.
После этого вы можете пользоваться командой git в командной строке.
Чтоооооо? В командной строке?
Программируете вы обычно в каком-нибудь IDE, а там обычно есть встроенные средства работы с Git. Если хотите, можете пользоваться этими встроенными средствами, но лично мне проще и понятнее делать это из командной строки. Кроме того, как я писал ранее, Git можно использовать не только для кода, а для чего угодно. А скажем у программы Word нет никаких кнопок для Git, поэтому по-любому придётся делать это в командной строке.
1. Инициализация
Вы можете начать с пустого проекта или добавить контроль версий в уже существующий. Для этого вы просто заходите в папку своего проекта.
Например, у меня есть локальный сайт в папке c:\www\notes.
Я захожу в эту папку (используя cmd или Far) и даю команду:
git init
Результат: создано пустое хранилище Git в папке c:/www/notes/.git/. Вот оно:
Это служебная папка, и что в ней находится, вообще не волнует. Git ничем другим больше отсвечивать не будет.
Если вы скопируете весь проект вместе с этой папкой в другое место, то вся история Git также скопируется и можно будет продолжать с ней работать. Если вы сотрёте эту папку, то удалите контроль версий из данного проекта, и на диске останутся только те файлы и в том состоянии, которые есть сейчас.
2. Статус
Чтобы проверить, как у нас дела, мы даём команду
git status
Информация, которую возвращает эта команда:
- On branch main – мы находимся в ветке main
- No commits yet – пока не сделано коммитов
- Untracked files – есть неотслеживаемые файлы
Мы видим папки проекта: components/, models/, public_html/, views/, и все они пока не отслеживаются. Изменения в них не будут учитываться.
3. Добавление файлов
Чтобы сделать файл отслеживаемым и добавить его в будущий коммит, мы можем дать команду
git add components
Это добавит в коммит папку components. Снова запустив git status, мы увидим, что изменилось:
Теперь папка components отслеживается, и в ней найден один новый файл DB.php. Остальные папки ещё не добавлены, и мы можем продолжить их добавлять с помощью git add models, git add views и т.д. Но это слишком долго, особенно когда файлов много.
Поэтому можно сразу дать команду
git add .
Точка обозначает текущий каталог.
И снова посмотрим git status:
Теперь в список коммита добавились все папки и файлы, которые находятся в текущем каталоге.
4. Коммит
Изменение может быть не только внутри файла. Появление нового файла или удаление старого – это тоже изменение. Так как мы только что добавили отслеживаемые файлы, все они являются изменениями. И чтобы они окончательно закрепились в истории Git, нужно создать первый узел в стволе дерева – то есть сделать коммит.
Для этого есть команда:
git commit
Но Git заботится о вас и не даёт сделать коммит без комментария – иначе потом вы всё забудете. Git автоматически запускает текстовый редактор для ввода комментария, но к несчастью это редактор vim, в котором люди теряются навсегда. Чтобы этого не произошло, просто укажите комментарий прямо в команде с ключом -m, который означает "message". Например,
git commit -m "Initial commit"
И вот все изменения оказались "закоммичены" с комментарием "Initial commit".
Посмотрим ещё раз git status:
Мы по-прежнему в ветке main, коммитить больше нечего, так как изменений с момента последнего коммита нет. Наше дерево выглядит так:
(Initial commit)--> мы находимся здесь
У нас есть исходное состояние проекта в виде всех добавленных файлов, и с этого момента мы можем работать дальше.
Процесс
Допустим, я некоторое время поработал и в результате у меня появился новый файл readme.txt, а также был изменён файл NoteModel.php.
git status покажет текущую обстановку:
Всё верно, один файл изменён и один файл новый.
Я решил, что данное состояние заслуживает фиксации в отдельном узле. Тогда я опять добавляю файлы в список коммита:
git add .
И делаю коммит:
git commit -m "new changes"
В стволе дерева создан новый узел, куда сохранено текущее состояние. Дерево теперь выглядит так:
(Initial commit)-->(new changes)--> мы находимся здесь
Пара команд git add и git commit и есть та, которой вы будете пользоваться постоянно.
И её можно сократить до одной команды, которая автоматически делает add:
git commit -a -m "new changes"
Каждый раз, когда вы её применяете, вы фиксируете очередные изменения в новом узле дерева.
Рассматривайте эту операцию как "Save Game" – в случае фатальной ошибки вы сможете восстановиться из точки сохранения.
(save1)-->(save2)-->(save3)--> ...
Допустим, я случайно удалил файл readme.txt. Команда git status показывает, что он удалён:
(Initial commit)-->(new changes)--> файл удалён здесь
Чтобы восстановить файл, я пишу:
git restore readme.txt
И всё – файл восстановлен из точки сохранения.
(Initial commit)-->(new changes)>>> файл восстановлен отсюда
Можно восстанавливать файлы поимённо или все сразу в текущем каталоге:
git restore .
Это пока очень ограниченный функционал, но вы уже защищены от случайной потери/изменения файлов. Главное – не забывать делать коммиты после важных этапов или перед ними, совсем как в играх.
Переход между коммитами
Восстановление это хорошо, но в данном случае оно работает только из узла (коммита), который был сохранён последним. Чтобы сделать восстановление из другого коммита, нужно в него перейти.
Переход делается просто, но попутно с этим придётся затронуть концепцию веток, поэтому я отложу данный вопрос до следующего выпуска.
Читайте дальше: