Основы Git
О Git
Система контроля версий (Version Control System, VCS):
- отслеживает изменения в файлах
- хранит несколько версий одного файла
- позволяет откатить изменения
- знает кто и когда сделал изменения
Git:
- распределенная система контроля версий
- широко используется
- выпущен под лицензией GNU GPL v2
Git хранит изменения как snapshot всего репозитория. Этот snapshot выполняется после каждого commit.
Файл в Git может быть в таких состояниях:
- committed - файл сохранен в локальной базе
- modified - файл был изменен, но еще не сохранен в локальной базе
- staged - файл отмечен на добавление в следующий commit
Соответственно, есть три основные части проекта Git:
- каталог Git (.git) - тут хранятся метаданные и база данных объектов проект
- рабочий каталог - копия определённой версии проекта
- область подготовленных файлов (staging area) - информация о том, что должно попасть в следующий commit
Первичная настройка Git
Для начала работы с Git необходимо указать имя и email пользователя, которые будут использоваться в commit:
$ git config --global user.name "pyneng"
$ git config --global user.email "pyneng.course@gmail.com"
Посмотреть настройки можно таким образом:
$ git config --list
Инициализация репозитория
Создадим с нуля репозиторий Git.
Для начала, надо создать каталог, в котором будет находиться репозиторий:
[~/tools]
$ mkdir first_repo
И перейти в него:
[~/tools]
$ cd first_repo
Теперь, в новом каталоге необходимо дать команду git init:
[~/tools/first_repo]
$ git init
Initialized empty Git repository in /home/vagrant/tools/first_repo/.git/
После этой команды, в каталоге создается каталог .git, в котором содержится вся информация, которая необходима для работы Git.
Работа с Git
Прежде чем мы начнем добавлять файлы в репозиторий, посмотрим информацию о текущем состоянии репозитория.
git status
Для этого в Git есть команда git status:
Git сообщает, что мы находимся в ветке main (эта ветка создается сама и используется по умолчанию) и что ему нечего добавлять в commit. Кроме этого, git предлагает создать или скопировать файлы и после этого воспользоваться командой git add, чтобы git начал за ними следить.
Создадим первый файл README и добавим в него пару произвольных строк текста:
После этого приглашение выглядит таким образом:
Почему-то в приглашении показано, что есть два файла, за которыми git еще не следит. Посмотрим в git status откуда взялся второй файл:
Git сообщает, что есть файлы за которыми он не следит, подсказывает какой командой это сделать.
Два файла получились из-за того, что у меня настроены undo файлы для vim. Это специальные файлы, благодаря которым, можно отменять изменения не только в текущем открытии файла, но и прошлые.
.gitignore
.README.un~ - это служебный файл, который не нужно добавлять в репозиторий.
В git есть возможность сказать, что какие-то файлы или каталоги нужно игнорировать. Для этого, надо указать соответствующие шаблоны в файле .gitignore в текущем каталоге:
Для того чтобы git игнорировал undo файлы vim, можно добавить, например, такую строку в файл .gitignore:
*.un~
Это значит, что Git должен игнорировать все файлы, которые заканчиваются на .un~
.
После этого, git status показывает:
Обратите внимание, что теперь в выводе нет файла .README.un~. Как только в репозитории добавлен файл .gitignore, файлы, которые указаны в нем, игнорируются.
git add
Для того чтобы Git начал следить за файлами, используется команда git add.
Можно указать, что надо следить за конкретным файлом:
Или за всеми файлами:
Проверим как теперь выглядит вывод git status:
Теперь файлы находятся в секции “Changes to be committed”.
git commit
После того как все нужные файлы были добавлены в staging, можно закоммитить изменения.
У команды git commit есть только один обязательный параметр - флаг -m
.
Он позволяет указать сообщение для этого коммита:
После этого, git status отображает:
Фраза “working directory clean” обозначает, что нет изменений, которые нужно добавить в Git или закоммитить.
Дополнительные возможности git
git diff
Команда git diff позволяет просмотреть разницу между различными состояниями.
Например, внесем изменения в файл README и .gitignore, но не будем добавлять их в репозиторий. Команда git status показывает, что оба файла изменены:
Если дать команду git diff, она покажет внесенные изменения:
То есть, команда git diff показывает какие изменения были внесены с последнего коммита.
Если теперь добавить изменения в файлах, и ещё раз выполнить команду git diff, она ничего не покажет:
Чтобы показать отличия между staging и последним коммитом, надо добавить параметр –staged:
Закоммитим изменения:
git log
Иногда нужно посмотреть когда были выполнены последние изменения. В этом поможет команда git log:
По умолчанию команда показывает все коммиты, начиная с самого свежего.
С помощью дополнительных параметров, можно не только посмотреть информацию о коммитах, но и какие изменения были внесены. Флаг -p позволяет отобразить отличия, которые были внесены каждым коммитом:
Более короткий вариант вывода можно вывести с флагом --stat
:
Дополнительная информация
Мы рассмотрели далеко не все возможности Git. Это лишь базовый минимум, который позволит начать с ним работать.
Дополнительные ресурсы, которые позволят глубже познакомиться с Git:
- GitHowTo - интерактивный howto на русском
- git/github guide. a minimal tutorial - минимально необходимые знания для работы с Git и GitHub
- Pro Git book. Эта же книга на русском
Leave a Comment