Git: гайд для начинающих

Использование Git — необходимое условия для всех, кто работает разработчиком. Однако для начинающего специалиста это может показаться сложным. В Git много особенностей, с которыми приходится знакомиться в работе. Чтобы упростить знакомство с Git, собрали в этой статье все самые необходимые команды, которые пригодятся на первое время. В статье рассказываем, как начать работать с Git и не сойти с ума. 

Содержание

Что такое система контроля версий

Система контроля версий (VCS) —  ПО для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий, следить за изменениями, возвращаться к предыдущему состоянию в случае ошибки и многое другое. 

Самый простой пример — Google Документы, которые позволяют посмотреть изменения в документе.

Основные задачи:

  • отслеживание истории изменений
  • откат изменений
  • совместная работа

Существует несколько видом систем контроля версий. Глобально они все подразделяются на:

  • локальные
  • централизованные
  • распределённые

ЛОКАЛЬНЫЕ VCS

RCS, SCCS

 

Это такое ПО, которое работает в рамках локальной машины. Такие системы хранят на диске наборы патчей (различий между файлами) в специальном формате, применяя которые она может воссоздавать состояние каждого файла в заданный момент времени.
SCCS (Source Code Control System) считается одной из первых успешных систем управления версиями. Она была разработана в 1972 году.
Эти системы до сих пор используются в некоторых операционных системах и другом ПО, но они имеют ряд значительных недостатков. С такими системами можно работать только в рамках одного файла и имеют ограниченный функционал.

Локальные VCS

ЦЕНТРАЛИЗОВАННЫЕ VCS

CVS, SourceSafe, Subversion

 

Такие системы, используют единственный сервер, содержащий все версии файлов, и некоторое количество клиентов, которые получают файлы из этого централизованного хранилища (репозиторий). Они были достаточно долго популярными и являлись флагманами VCS лет 15 назад. Главный недостаток — вся история хранится на центральном сервере, и в случае неполадок с ним, историю практически невозможно восстановить, она будет утеряна. 

Централизованные VCS

РАСПРЕДЕЛЕННЫЕ VCS

Git, Mercurial, Bazaar

 

В отличие от централизованных, они хранят информацию не только на центральном сервере. В таких системах клиенты не просто скачивают снимок всех файлов (состояние файлов на определенный момент времени) — они полностью копируют репозиторий. Сейчас это самые распространённые системы управлениям версиями.

Распределённые VCS

ЧТО ТАКОЕ GIT

Git — система управления версиями с распределенной архитектурой.

Разработана в 2005 году Линусом Торвальдсом, более известный как автор ядра Linux.

Является абсолютным лидером по популярности среди современных VCS. 

Git в двух словах

Каждое сохранённое изменение проекта — это коммит. У каждого коммита есть комментарий, то есть объяснение того, что изменилось. Из таких коммитов собирается ветка (branch). Ветка — это история изменений со своим названием. В репозитории может быть несколько веток, которые создаются из других веток или вливаются в них. 

Основные термины

Репозиторий — каталог файловой системы, в котором находятся: файлы конфигурации, файлы журналов операций, выполняемых над репозиторием, индекс расположения файлов и хранилище, содержащее сами контролируемые файлы.

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

Удаленный репозиторий — репозиторий, находящийся на удаленном сервере. Это общий репозиторий, в который приходят все изменения, и из которого забираются все обновления.

Коммит (Commit) — зафиксированное состояние репозитория.
У коммита есть метаданные: идентификатор, имя автора, дата создания, комментарий.

Ветка (Branch) — это отдельная история изменений (коммитов) в рамках одного репозитория. Git поощряет создание отдельных веток для каждой решаемой задачи, благодаря чему и достигается эффективная параллельная работа — каждый разработчик может работать со своей историей и не бояться, что изменения в чужом коде повлияют на его работу

Слияние (Merge) — слияние изменений из какой-либо ветки репозитория с любой веткой этого же репозитория. 

Клонирование (Clone) — скачивание репозитория с удаленного сервера на локальный компьютер в определённый каталог для дальнейшей работы с этим каталогом как с репозиторием.

Пул (Pull) — получение последних изменений с удалённого сервера репозитория.

Пуш (Push) — отправка всех неотправленных коммитов на удалённый сервер репозитория.

УСТАНОВКА GIT

Чтобы приступить к работе с Git, необходимо установить его на свою машину. Это довольно просто:

  • Windows — нужно скачать .exe файл и запустить его. Для работы достаточно bash консоли. 
  • Linux — обычно Git уже установлен и есть в дистрибутивах. Чтобы проверить, есть ли Git, откройте терминал и пропишите: git --version. В Ubuntu Git можно установить через терминал. Для этого введите sudo apt-get install git
  • MacOS — здесь также проверьте, установлен ли Git. Если у вас есть XCode, то Git точно есть. Если всё же нет, самый простой путь — скачать последнюю версию отсюда.

НАСТРОЙКА GIT

Теперь, когда Git установлен на вашей машине, нужно его настроить. Есть много опций, с которыми можно экспериментировать. У гита есть настройка пользователя, от которого будет идти работа. Когда создаётся коммит, гит собирает эту информацию для поля Author. 

Чтобы настроить имя пользователя и адрес электронной почты для всех проектов, необходимо прописать:

 

git config --global user.name "Ivan Ivanov"
git config --global user.email ivan.ivanov@gmail.com

СОЗДАНИЕ НОВОГО РЕПОЗИТОРИЯ

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

.git — это папка, в которой содержится вся информация о репозитории. Это системная папка, которую трогать больше не надо. У каждого файла есть состояние. Состояния в гите надо понять и запомнить:

  • файл, который только что создан и не добавлен в репозиторий — untracked;
  • измененный файл в репозитории — modified;
  • из изменённых файлов выбираем только те, которые нужны нам, и они попадают в состояние staged;
  • из staged создаётся коммит и переходит в гит репозиторий. После всего этого staged состояние пустое, а modified может что-то содержать.

Чтобы узнать состояние файла используем команду git status.

Пояснение из официальной документации

ПОДГОТОВКА ФАЙЛОВ

Перед добавлением файлов в локальное хранилище их нужно подготовить. Для этого есть команда git add или git add -A. Можно добавить всё или лишь некоторые файлы. 

Чтобы добавить отслеживание новых файлов, необходимо использовать команду git add. для добавления нескольких файлов по имени.

Чтобы удалить файлы, необходимо использовать команду git rm <filename> <filename> для удаления нескольких файлов по имени.

После того как все изменения внесены, можно их зафиксировать. Для этого необходимо ввести команду git commit -m “Комментарий к коммиту”.

Если вы внесли изменения, но хотите их быстро отменить, то используйте команду git reset.

Чтобы отправить локальную копию репозитория, на которой производились все действия, на сервер, есть команда git push.

РАБОТА С ВЕТКАМИ

Команда git checkout -b branch-name создаст ветку с указанным именем и автоматически переключится на неё.

После создания ветки, её можно отправить на сервер с помощью команды git push origin branch-name.

Переключиться на любую локальную ветку можно с помощью команды git checkout branch-name.

МУСОР

В репозитории после работы могут остаться различные ненужные, неотслеживаемые файлы и прочий мусор. Чтобы избавиться от этого, есть команда git clean -f -d.

ПАМЯТКА ПО КОМАНДАМ

 

Есть множество команд для работы с Git. Здесь будут перечислены некоторые команды, которые позволяют выполнять базовые действия с Git. На практике работа с репозиториями ведётся не через консоль, а с использованием визуальных редакторов, либо средств, которые встроены в средства для разработки ПО.

git init — создание пустого репозитория.

git clone <url> <path> — клонирование удаленного репозитория.

git status — просмотр текущих изменений.

git add — добавить файл в локальный репозиторий.

git commit — зафиксировать коммит в локальном репозитории.

git commit -m "Description" — описание коммита в локальном репозитории. Это очень важный момент, так как информация должна лаконично описывать внесённые изменения.

git push — отправка изменений в удаленный репозиторий.

git pull — получение изменений из удалённого репозитория.

git log — просмотр истории изменений.

НАБОР КОМАНД ДЛЯ РАБОТЫ С ВЕТКАМИ

 

git branch — просмотр списка веток. Текущая ветка будет отмечена (*).

git branch <name> — создать новую ветку с именем name.

git checkout <name> — переключиться на ветку name.

git checkout -b <name> — создать новую ветку с именем name и переключиться на нее.

git push <remote> <name> — отправить ветку в удаленный репозиторий.

git branch -d <name> — удалить ветку с именем name в локальном репозитории.

git push <remote> --delete <name> — удалить ветку с именем name в удаленном репозитории.

git merge <name> — слияние текущей ветки с веткой name.

ПОЛЕЗНЫЕ МАТЕРИАЛЫ

Бесплатный тренажёр по Git
Памятка по работе с проблемами
Официальный гайд по Git
Лекция Академии MediaSoft про Git