Вводный курс GIT

19 Августа 2019 20:21

Что такое GIT

GIT - распределенная система контроля версий. Она позволяет разработчику сохранять различные состояния проекта и управлять ими. GIT страхует разработчика от потери данных, а также создает удобные условия для разработки в команде.

Данный урок позволит разобраться с азами GIT и по практиковаться на небольшом html-проекте.

1. Подготовка

Для начала, необходимо скачать и установить GIT. Как только установили, открываем GIT BASH (с подсветкой текста) и вводим следующие команды:

Установка имени и электронной почты

Выполняем:

git config --global user.name "Your Name"
git config --global user.email "your_email@whatever.com"

Установка параметров окончания строк

Выполняем:

git config --global core.autocrlf input
git config --global core.safecrlf true

Установка отображения unicode

По умолчанию, git будет печатать не-ASCII символов в именах файлов в виде восьмеричных последовательностей \nnn. Что бы избежать нечитаемых строк, установите соответствующий флаг.

Выполняем:

git config --global core.quotepath off

Качаем и устанавливаем заготовку

 git_tutorial.zip

Пакет учебных материалов должен иметь главную папку «git_tutorial» с двумя подпапками:

  • work — пустой рабочий каталог. Здесь будут лежать ваши репозитории.
  • files — заранее упакованные файлы для того, чтобы вы могли продолжить работать с учебными материалами на любом этапе. Если вы застрянете, просто скопируйте нужный урок в свою рабочую папку.

2. Создание проекта

Создаем файл для работы

Открываем пустой каталог Work. Далее с помощью GIT созданем пустой каталог с именем «hello», затем входим в него и создаем там файл с именем «hello.html», далее руками добавляем в файл «Hello, World».

Выполняем:

mkdir hello
cd hello
touch hello.html

Создаем репозиторий

Теперь у нас есть каталог с одним файлом. Чтобы создать git репозиторий из этого каталога, выполняем команду git init.

Выполняем:

git init

Результат:

$ git init
Initialized empty Git repository in /Users/alex/Documents/Presentations/githowto/auto/hello/.git/

Добавляем страницу в репозиторий

Выполняем:

git add hello.html
git commit -m "First Commit"

Результат:

$ git add hello.html
$ git commit -m "First Commit"
[master (root-commit) 911e8c9] First Commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 hello.html

3. Проверка состояния

Проверяем состояние

Используйте команду git status, чтобы проверить текущее состояние репозитория.

Выполняем:

git status

Результат:

$ git status
# On branch master
nothing to commit (working directory clean)

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

Мы будем использовать команду git status, чтобы продолжать отслеживать состояние репозитория и рабочего каталога.

4. Внесение изменений

Вносим изменения

Добавим кое-какие HTML-теги к нашему приветствию. Изменяем содержимое файла на:

<h1>Hello, World!</h1>

Проверяем состояние

Выполняем:

git status

Результат:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   hello.html
#
no changes added to commit (use "git add" and/or "git commit -a")

Первое, что нужно заметить, это то, что git знает, что файл hello.html был изменен, но при этом эти изменения еще не зафиксированы в репозитории.

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

5. Индексация изменений

Добавляем изменения

Делаем так, чтобы git проиндексировал изменения.

Выполняем:

git add hello.html
git status

Результат:

$ git add hello.html
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   hello.html

Изменения файла hello.html были проиндексированы. Это означает, что git теперь знает об изменении, но изменение пока не перманентно (читай, навсегда) записано в репозиторий. Следующий коммит будет включать в себя проиндексированные изменения.

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

6. Индексация и коммит

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

Предположим, что мы отредактировали три файла (a.htmlb.html, и c.html). Теперь мы хотим закоммитить все изменения, при этом чтобы изменения в a.html и b.html были одним коммитом, в то время как изменения в c.html логически не связаны с первыми двумя файлами и должны идти отдельным коммитом.

В теории, можно сделать следующее:

Выполняем:

git add a.html
git add b.html
git commit -m "Changes for a and b"
git add c.html
git commit -m "Unrelated change to c"

Разделяя индексацию и коммит можно с легкостью настроить, что идет в какой коммит.