Что такое Git и для чего он нужен?
Git - это система управления версиями. Она включает в себя набор консольных утилит, с помощью которых вы можете фиксировать и отслеживать изменения в ваших исходниках. Под "контролем версий" понимается, что вы сможете откатить проект на более старую версию, анализировать изменения и так далее.
Система Git является распределенной и работает локально, сохраняя файлы на вашем жестком диске. Однако, можно и хранить их в интернете, для это потребуется любой хостинг или веб-сервис, например GitHub или BitBucket, которые будут рассмотрены в этом ресурсе.
Установка Git
Linux
Установка производится при помощи пакетного менеджера дистрибутива. Например, для ОС, основанных на Debian (e.g. Ubuntu, Mint), достаточно ввести в терминале следующее:
sudo apt install git
sudo apt-get install git
Windows
Для начала скачиваем установочный файл по ссылке и запускаем. Установка предельно простая, все этапы установки представлены на скриншотах ниже, просто сверяем пункты.
Здесь можете выбрать текстовый редактор, который будет использоваться по умолчанию Git'ом. В принципе, можете оставить vim по умолчанию, это вам не понадобится.
Проверка установки
Теперь можете открыть командную строку (win + R -> cmd) и проверить, установился ли Git.
Введем
git --version
.Если вывелось что-то похожее, то установка выполнена верно. Если же консоль говорит, что git не является внутренней или внешней командой, исполняемой программой или пакетным файлом, то значит что-то вы установили неправильно. Попробуйте переустановить внимательнее, сверяя все пункты со скриншотами.
Важно! Если до установки командная строка была открыта, ее необходимо перезапустить. Пользователей Linux это не касается.
Первоначальная настройка
Сперва необходимо произвести минимальные настройки. Введем в консоли следующие команды, подставляя свои данные:
git config --global user.name "Your Name"
git config --global user.email [email protected]
Этими двумя командами мы задали параметры имени и электронной почты. По сути, это необходимо для того, чтобы в будущем знать, кто какие действия совершил. Удобно при работе в команде.
Тестовый репозиторий
Git создает скрытую папку .git в директории проекта, то есть там, где он был инициализирован. Для начала мы попробуем создать новую папку с вымышленным проектом в любом удобном вам месте.
mkdir git-tutorial
cd git-tutorial
git init
Думаю, не нужно объяснять первые две команды.
git init
производит инициализацию вашего репозитория и создает папку .git, о которой упоминалось выше.В случае успеха вы получите такое сообщение:
Основы работы с Git
Давайте создадим парочку текстовых файлов с каким-нибудь содержимым, представим что это и есть наш проект. Можете создать их через файловый менеджер, а можете через консоль.echo This is the first file >> 1.txt
echo And this is the second file >> 2.txt
Отслеживаемые файлы
Введите команду
git status
- она выводит список файлов, которые отслеживаются в этом репозитории. В ответ вы получите:
Git говорит нам, что отслеживаемых файлов нет. Попробуем их добавить.
Команда git add
"Введите
git add <file>
" - дает нам подсказку git. Добавим файл 1.txt для отслеживания:git add 1.txt
(команда ничего не выводит - так и должно быть).Окей, файл добавлен. Теперь снова выполним
git status
и увидим следующее:Появился новый файл 1.txt, теперь git следит за его изменениями и готов для фиксации, о которой немного позже.
Прекратим отслеживание командной
git rm --cached 1.txt
Теперь представим, что вам нужно добавить все файлы, которые находятся в текущем репозитории. Те, кто уже имеют небольшой опыт работы с командной строкой и терминалом, догадались, как это можно реализовать.
git add .
- все файлы добавлены, проверяем командой git status
Однако, удалить все файлы таким образом не получится. Необходимо использовать ключ -r, который указывает на рекурсивное удаление:
git rm --cached -r .
Первый коммит
Коммит - это фиксация текущего состояния отслеживаемых файлов. То есть, сделав коммит, вы позже сможете вернуться к такому состоянию файлов, в котором они находятся сейчас. Очень полезная штука.
Итак, добавляем в список отслеживаемых все файлы, затем вводим
git commit -m "first commit" -a
-m "first commit"
- это описание для нашего коммита. Рекомендуется делать коммиты часто, описывая все изменения.-a
- указывает, что необходимо закоммитить все файлы. В большинстве случаев используется только при первом коммите; в последующих необходимо передавать вместо -a
список файлов или директорий. Например:git commit -m "Changed some files" 1.txt
Удаленные репозитории
Сейчас ваш коммит хранится на вашем жестком диске, а именно в папке .git. Для того, чтобы контролировать версии, этого вполне достаточно. Но зачастую требуется сохранить его где-нибудь удаленно, чтобы поделиться с другими разработчиками или сохранить для себя на всякий случай. Существует два условно бесплатных и самых популярных хостинга git-репозиториев: GitHub и BitBucket.
На GitHub'е ваш репозиторий смогут просматривать все. Можно, конечно, заплатить за приватный репозиторий, но, если вам необходимо, чтобы доступ к нему был только у вас, то лучше воспользоваться BitBucket бесплатно.
GitHub
Для начала, разумеется, необходимо зарегистрироваться, процесс не сложный. Далее на главной странице видим ссылку create a repository, переходим по ней.
ReadMe - файл с инструкцией/дополнительной информацией/чем-то еще. Его содержимое отображается на главной странице репозитория.
.gitignore - список файлы, которые будут игнорироваться git'ом.
Ознакомиться с лицензиями можно здесь.
BitBucket
В отличие от GitHub этот хостинг предоставляет возможность создания приватного репозитория, доступ к которому будет только у вас и у людей, которым вы его дадите.
После регистрации на главной странице будет кнопка Create repository, перейдя по ней видим похожий интерфейс, как и на GitHub'е.
Описание репозитория можно указать, открыв расширенные настройки (advanced settings).
Синхронизация Git с удаленным репозиторием
Для начала нужно получить ссылку на ваш репозиторий.
Для GitHub:
Ссылка находится находится на странице вашего репозитория.
Для BitBucket:
На странице вашего репозитория есть кнопка Clone.
Вам необходима только ссылка, то есть без
git clone
Добавление удаленного репозитория и первый push
Вернемся в командную строку и выполним
git remote add origin <link>
, где <link> - ссылка на ваш репозиторий. origin - название репозитория, принято делать его именно таким.В удаленном репозитории, возможно, был автоматически создан файл README.md, в таком случае, если мы попытаемся отправить push, будет ошибка, потому что в нашем локальном репозитории его нет.
Команда
git pull
служит для того, чтобы получить все изменения из удаленного репозитория. К примеру, если проект разрабатывает несколько человек и один из них сделал изменения и отправил их в удаленный репозиторий, то остальные должны получить эти изменения к себе на компьютер, выполнив команду git pull
.Так мы и сделаем, пишем в консоли
git pull origin master --allow-unrelated-histrories
. master - это ветка вашего репозитория, по умолчанию имеет именно такое название, на первых порах вам этого хватит. --allow-unrelated-histrories используется при первом git pull, в дальнейшем это, как правило, писать необязательно.Теперь в нашей локальной папке появился файл README.md (если он был создан автоматически в репозитории), попробуем отправить наши 2 текстовых файла на сервер. Это делается с помощью команды
git push origin master
.git push
отправляет в удаленный репозиторий последнее зафиксированное состояние файлов, то есть перед тем, как отправить новое изменение, вам нужно его установить командой git commit
.Заключение
В принципе, это те минимальные основы, которые понадобятся вам при работе с Git. Под спойлером я собрал самые полезные команды, можете использовать это как шпаргалку, если вдруг что-то забыли.
git init
- инициализация локального репозиторияgit commit
- фиксация состояния отслеживаемых файлов и управление ими.git remote
- управление удаленными репозиториями.git clone
- сохранить копию любого репозитория из интернета в текущую папку.git pull
- получить изменения из удаленного репозитория.git branch
- управление ветками.git checkout
- переключение на другую ветку/возвращение файла к состоянию нужного коммита.git merge
- слияние веток.git log
- список всех коммитов с их идентификаторами.git show
- посмотреть, что изменилось в определенном коммите.git diff
- показывает разницу между промежутками двух коммитов.