Найти тему
ZDG

Git на практике #1

Оглавление

Предыдущая часть:

У системы контроля версий Git есть куча сложного функционала, но хорошая новость заключается в том, что для себя, для дома достаточно освоить всего пару команд и это даст вам 90% всей возможной пользы.

Что такое GitHub и GitLab

Это то, что нам сейчас НЕ ПОНАДОБИТСЯ. Это сайты, работающие на базе Git, но чтобы пользоваться Git, ходить на эти сайты и регистрироваться там совершенно необязательно. Контроль версий вы ведёте на своей собственной машине, поэтому никакие сайты вам не нужны.

Их назначение ровно в одном – чтобы иметь облачную ссылку на свой проект в формате Git, и чтобы организовать коллективную работу. Разница между двумя сайтами в том, что GitLab дополнительно позволяет автоматизировать процессы сборки, тестов и т.п., а GitHub больше похож на социальную сеть, но это сейчас очень далеко от текущей темы.

Поэтому всё, что вам нужно для себя, это сама программа Git.

Установка Git

В Linux вы можете просто

apt install git

В Windows – скачать и запустить установщик.

Releases · git-for-windows/git

После этого вы можете пользоваться командой git в командной строке.

Чтоооооо? В командной строке?

Программируете вы обычно в каком-нибудь IDE, а там обычно есть встроенные средства работы с Git. Если хотите, можете пользоваться этими встроенными средствами, но лично мне проще и понятнее делать это из командной строки. Кроме того, как я писал ранее, Git можно использовать не только для кода, а для чего угодно. А скажем у программы Word нет никаких кнопок для Git, поэтому по-любому придётся делать это в командной строке.

1. Инициализация

Вы можете начать с пустого проекта или добавить контроль версий в уже существующий. Для этого вы просто заходите в папку своего проекта.

Например, у меня есть локальный сайт в папке c:\www\notes.

-2

Я захожу в эту папку (используя cmd или Far) и даю команду:

git init

-3

Результат: создано пустое хранилище Git в папке c:/www/notes/.git/. Вот оно:

-4

Это служебная папка, и что в ней находится, вообще не волнует. Git ничем другим больше отсвечивать не будет.

Если вы скопируете весь проект вместе с этой папкой в другое место, то вся история Git также скопируется и можно будет продолжать с ней работать. Если вы сотрёте эту папку, то удалите контроль версий из данного проекта, и на диске останутся только те файлы и в том состоянии, которые есть сейчас.

2. Статус

Чтобы проверить, как у нас дела, мы даём команду

git status

-5

Информация, которую возвращает эта команда:

  1. On branch main – мы находимся в ветке main
  2. No commits yet – пока не сделано коммитов
  3. Untracked files – есть неотслеживаемые файлы

Мы видим папки проекта: components/, models/, public_html/, views/, и все они пока не отслеживаются. Изменения в них не будут учитываться.

3. Добавление файлов

Чтобы сделать файл отслеживаемым и добавить его в будущий коммит, мы можем дать команду

git add components

Это добавит в коммит папку components. Снова запустив git status, мы увидим, что изменилось:

-6

Теперь папка components отслеживается, и в ней найден один новый файл DB.php. Остальные папки ещё не добавлены, и мы можем продолжить их добавлять с помощью git add models, git add views и т.д. Но это слишком долго, особенно когда файлов много.

Поэтому можно сразу дать команду

git add .

Точка обозначает текущий каталог.

И снова посмотрим git status:

-7

Теперь в список коммита добавились все папки и файлы, которые находятся в текущем каталоге.

4. Коммит

Изменение может быть не только внутри файла. Появление нового файла или удаление старого – это тоже изменение. Так как мы только что добавили отслеживаемые файлы, все они являются изменениями. И чтобы они окончательно закрепились в истории Git, нужно создать первый узел в стволе дерева – то есть сделать коммит.

Для этого есть команда:

git commit

Но Git заботится о вас и не даёт сделать коммит без комментария – иначе потом вы всё забудете. Git автоматически запускает текстовый редактор для ввода комментария, но к несчастью это редактор vim, в котором люди теряются навсегда. Чтобы этого не произошло, просто укажите комментарий прямо в команде с ключом -m, который означает "message". Например,

git commit -m "Initial commit"

-8

И вот все изменения оказались "закоммичены" с комментарием "Initial commit".

Посмотрим ещё раз git status:

-9

Мы по-прежнему в ветке main, коммитить больше нечего, так как изменений с момента последнего коммита нет. Наше дерево выглядит так:

(Initial commit)--> мы находимся здесь

У нас есть исходное состояние проекта в виде всех добавленных файлов, и с этого момента мы можем работать дальше.

Процесс

Допустим, я некоторое время поработал и в результате у меня появился новый файл readme.txt, а также был изменён файл NoteModel.php.

git status покажет текущую обстановку:

-10

Всё верно, один файл изменён и один файл новый.

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

git add .

-11

И делаю коммит:

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 показывает, что он удалён:

-12

(Initial commit)-->(new changes)--> файл удалён здесь

Чтобы восстановить файл, я пишу:

git restore readme.txt

И всё – файл восстановлен из точки сохранения.

(Initial commit)-->(new changes)>>> файл восстановлен отсюда

Можно восстанавливать файлы поимённо или все сразу в текущем каталоге:

git restore .

Это пока очень ограниченный функционал, но вы уже защищены от случайной потери/изменения файлов. Главное – не забывать делать коммиты после важных этапов или перед ними, совсем как в играх.

Переход между коммитами

Восстановление это хорошо, но в данном случае оно работает только из узла (коммита), который был сохранён последним. Чтобы сделать восстановление из другого коммита, нужно в него перейти.

Переход делается просто, но попутно с этим придётся затронуть концепцию веток, поэтому я отложу данный вопрос до следующего выпуска.

Читайте дальше:

Git на практике #2. Ветки