Приветствуем в GITFLIC
Итак, вы решили начать использовать git ,но не знаете с чего начать? Данную документацию можно использовать в качестве настолько пособия и обращаться по возникающим вопросам. Для начала вам следует создать свой проект
. Когда вы создали свой новый репозиторий, необходимо подготовить локальное рабочее пространство. Используйте консоль на вашем ПК для работы.
Для большего удобства, пользователям Windows, рекомендуем установить отдельную консоль для работы с git. В поисковике запросом “Git для Windows” выбрать предпочитаемый и установить его.
Когда откроете консоль, выполните следующие команды для создания локальной директории для вашего будущего репозитория:
Создание локальной директории
cd ~/
mkdir repos
cd ~/repos
После выполнения предыдущих команд следует указать свои данные, выполнив следующие команды:
Глобальные настройки Git
git config --global user.name "gitflic-user"
git config --global user.email "mail@gitflic.ru"
Далее необходимо выбрать один из вариантов, который подходит вашей ситуации и выполнить команды по порядку
Создание нового репозитория
git clone http://gitflic.ru/project/user/proekt.git //Здесь ссылка на ваш проект
cd proekt
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
Использовать существующую директорию
cd existing_folder
git init
git remote add origin http://gitflic.ru/project/user/proekt.git //Здесь ссылка на ваш проект
git add .
git commit -m "Initial commit"
git push -u origin master
Запушить существующий репозиторий
cd existing_folder
git remote rename origin old-origin
git remote add origin http://gitflic.ru/project/user/proekt.git //Здесь ссылка на ваш проект
git push -u origin --all
git push -u origin --tags
После выполения команд мы видим как локальная/удаленная дериктория наполнились файлами. Теперь, как мы разобрались с настройкой репозитория, самое время разобраться как пользоваться ветками в системе git
Для создания ветки и мгновенного переключения на новую ветку используется следующая команда, где omega, параметр -b указывает на ветку:
Как создать ветку в git
git checkout -b omega
Также можно выполнить то же самое действие в 2 команды, отдельно создать ветку, отдельно в нее переключиться:
git branch omega
git checkout omega
Распространенные опции для git branch
Вывод списка всех веток в репозитории.
git branch
или
git branch --list
Удаление ветки с названием omega. Это «безопасная» операция, так как git не позволит удалить ветку, в которой есть неслитые изменения. Данная команда удаляет только локальную ветку.
git branch -d omega
Принудительное удаление указанной ветки, даже несмотря на то, что в ней есть неслитые изменения. Эту команда следует использовать, если вы хотите полностью удалить все коммиты, которые относятся к определенному направлению разработки.
git branch -D <branch>
git push origin :refs/heads/<branch>
Вывод списка всех веток удаленного проекта.
git branch -a
Для визуализации файлов под управлением git существует расширение TortoiseGit. Оно имеет логичный интерфейс и отображает иконки к файлам, находящимся под управлением gitдля отображения их статуса в git.
Генерация публичного SSH ключа
Для работы с git многие серверы используют аутентификацию по ssh-ключу. Далее расскажем как создать свой ssh-ключ для работы с git. Процесс создания ssh-ключа аналогичен на всех ОС. Первым делом убедимся, что у вас отсутствует ssh-ключ на локальном компьютере, для этого выполните следующие команды:
cd ~/.ssh
ls
Ищите файл с именем id_dsa или id_rsa и одноименный файл с расширением .pub. Файл с расширением .pub — это ваш публичный ключ, а второй файл — ваш приватный ключ. Если указанные файлы у вас отсутствуют (или отсутствует директория .ssh), вы можете создать их используя команду:
cd ~/
ssh-keygen -o
Generating public/private rsa key pair.
Enter file in which to save the key (/home/gitflic_user/.ssh/id_rsa):
Created directory '/home/gitflic_user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/gitflic_user/.ssh/id_rsa.
Your public key has been saved in /home/gitflic_user/.ssh/id_rsa.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:xx:yy:zz:96:93:49:da:9b:e3 gitflic_user@gitflic.ru
После создания вашего публичного ssh-ключа его необходимо прописать в настройках к git. Первым делом необходимо получить ssh-ключ из файла. Вы можете открыть ваш публичный ssh-ключ в текстовом редакторе и полностью скопировать содержимое, либо выполнить следующую команду в консоли:
cat ~/.ssh/id_rsa.pub
Когда скопируете ssh-ключ, пропишите его в настройках, укажите название для ключа, например my-ssh, оставьте поле со сроком годности пустым, тогда ваш ssh-ключ будет всегда активен. Нажмите сохранить и убедитесь что сохранение прошло успешно.
Чтобы убедиться, что ключ сохранен верно, вы можете при помощи следующей команды получить хэш ключа и сравнить его с тем, что отображается в настройках профиля.
ssh-keygen -t ed25519 -C "your_email@example.com"
Возможные проблемы с работой по ssh.
В некоторых ситуациях возникать ошибка no mutual signature algoryth при использвании id_rsa.pub. Чтобы решить эту проблему, необходимо сгенерировать новый ssh-ключ по алгритму ED25519.
Распространенные команды при работе с git
git clone
Как правило при помощи команды git clone создается копия репозитория от указанного. Это делается в новой директории или в другом месте. Исходный репозиторий может находиться в локальной файловой системе или на удаленном устройстве, к которому можно получить доступ с помощью поддерживаемых протоколов.
Пример клонирования проекта в дерикторию folder по ssh-ключу:
git clone git@f.dev.gitflic.ru:user/how-to.git ./folder/
Аргумент -branch позволяет выбрать ветку для клонирования. В противном случае клонируется ветка, на которую указывает HEAD в удаленном репозитории (обычно главная ветка). Кроме того, для этих целей в команде можно задать тег вместо ветки:
git clone -branch new_feature git://remoterepository.git
git clone –bare Как и git init –bare, аргумент -bare при назначении команде git clone приводит к созданию копии удаленного репозитория без рабочего каталога. Это означает, что репозиторий будет содержать историю проекта, к которой можно выполнять запросы push и pull, но которую нельзя редактировать напрямую. Кроме того, в репозитории, клонированном с опцией -bare, не будут настроены удаленные ветки. Как и git init –bare, эта команда создает удаленный репозиторий, который разработчики не смогут редактировать напрямую.
git clone –mirror Вместе с аргументом –mirror команде неявно назначается и аргумент –bare. Поэтому можно сказать, что опция –mirror наследует поведение –bare, создавая чистый репозиторий без изменяемых рабочих файлов. Кроме того, –mirror клонирует ссылки удаленного репозитория и сохраняет конфигурацию отслеживания удаленных веток. Затем вы можете выполнить команду git remote update на созданном зеркале, в результате чего будут перезаписаны все ссылки из исходного репозитория. Так вы получите идентичные функциональные возможности для работы.
git add
Команда git add добавляет изменения рабочей директории в промежуточную область. Он сообщает git, что вы хотите включить обновления определенного файла в следующий коммит. Однако git add на самом деле не влияет на репозиторий каким—либо существенным образом - изменения фактически не записываются до тех пор, пока вы не выполните git commit.
Добавление всех изменений в следующий коммит выполняется следующей командой:
git add .
Чтобы добавить в следующий коммит только один измененный файл, то это делается командой, где - полное имя файла:
git add <file-name>
В сочетании с этими командами вам также понадобится git status для просмотра состояния рабочего каталога и промежуточной области:
git status
git commit
Коммит проиндексированного состояния кода производится по следующей команде:
git commit
Стоит отметить, что эта команда откроет текстовый редактор, введите комментарий к коммиту. После ввода сохраните файл и закройте текстовый редактор, чтобы выполнить коммит. Выполнение коммита со всеми изменениями в рабочей директории. Эта команда включает только изменения отслеживаемых файлов (которые были добавлены командой git add):
git commit -a
Данная команда создаст коммит с указанным комментарием. По умолчанию команда git commit открывает локальный текстовый редактор для ввода комментария к коммиту. При передаче параметра -m используется добавленный комментарий, минуя текстовый редактор:
git commit -m "commit message"
Также есть параметр, который позволяет команде commit изменять последний коммит. Вместо создания нового, все изменения добавляются в последний. Кроме того, после выполнения команды откроется текстовый редактор и предложит изменить ранее указанный комментарий к комиту:
git commit --amend
git pull
Команда git pull запускает команду git fetch для загрузки содержимого из указанного удаленного репозитория. Затем выполняется команда git merge, осуществляющая слияние ссылок и указателей удаленного содержимого в новый локальный коммит:
git pull <remote>
Выше указанная команда берет указанную удаленную копию текущей ветви и объединяет ее с локальной копией. Это то же самое, что и git fetch <remote>, за которым следует git merge origin/<current-branch>.
Существует команда, подобная команде по умолчанию, только она не создает новый коммит со слитым содержимым:
git pull --no-commit <remote>
git push
Публикация указанной ветки в удаленном репозитории вместе со всеми необходимыми коммитами и внутренними объектами. Эта команда создает локальную ветку в репозитории назначения. Чтобы предотвратить перезапись коммитов, git не позволит опубликовать данные, если в репозитории назначения нельзя выполнить ускоренное слияние:
git push <remote> <branch>
Если для параметра указать значение origin и оставить пустым параметр branch, то изменения будут отправленны в ветку, которая выбрана в данный момент.
Параметр -u аналогично –set-upstream указывает удаленную ветку “по умолчанию”, все последующие команды git pull/push будут автоматически общаться между текущей локальной и выбранной удаленной ветками. Данная команда указывается единожды, до тех пор, пока не понадобится указать другую удаленную ветку “по умолчанию”.
git push -u origin master
Существует процедура для очистки локальной и удаленной веток, которую целесообразно выполнять для поддержания порядка и не допущения накопления изменений, которые не будут загружены в основную ветку проекта:
git branch -D alpha
git push origin :alpha
Первая команда очистит локальную ветку alpha. Если в команде git push перед именем ветки поставить двоеточие, будет стерта удаленная ветка.
git merge
Для слияние веток используется команда git merge. Обычно, в веб интерфейсе есть механизм для создания и управления мерж-реквестами, однако, это можно сделать и через консоль.
git revert
Эта команда отменяет внесенные в коммит изменения и добавляет новый коммит с обращенным содержимым. В результате история в git не теряется, что важно для обеспечения целостной истории версий и надежной совместной работы. К примеру вы хотите вернуть ваш рабочий процесс к коммиту 1f08a70, команда возврата будет выглядеть следующим образом:
git revert 1f08a70
git reset
Универсальная команда для отмены изменений. Другими словами, если вопрос какой командой создается новый коммит, применяющий изменения, обратные для указанного аргументом коммита? Следует внимательно ознакомиться с этой командой. У команды git reset имеется несколько опций, разберем следующие:
Параметр –soft сбрасывает указатель HEAD до указанного коммита:
git reset --soft 1f08a70
Параметр –mixed сброс указателя HEAD до выбранного коммита в истории и отмена изменений в индексе:
git reset --mixed 1f08a70
Параметр –hard сбрасывает указатель HEAD до выбранного коммита в истории, отмяет изменения в индексе и отменяет изменения в рабочем каталоге. Не используйте данный параметр, если не уверены в своих действиях:
git reset --hard 1f08a70
git log
Эта команда позволяет просмотреть и фильтровать историю проекта, а даже искать конкретные изменения. Для сравнения с git status можно просматривать рабочую директорию и раздел проиндексированных в ней файлов, в то время как git log показывает только историю коммитов проекта. Этот же журнал коммитов можно найти на странице проекта в gitflic.ru. Каждая запись будет состоять из 4-х частей: хеш коммита, автор коммита, дата и комментарий к коммиту. Пример ответа:
commit 9936edb7ba9af7bf2443xxx11129e66834b9c2fa (HEAD -> master, origin/master)
Author: gitflic_user <user@gitflic.ru>
Date: Thu Jun 3 11:01:00 2020 +0300
git init
Данная команда часто выполняется в автоматическом режиме, при клонировании проекта, однако, ей необходимо воспользоваться, когда вы заливаете ваш локальный репозиторий в сервис хранения кода. В момент выполнения команды создается папка .git со служебными файлами и назначается ветка master для вашего проекта.
git init
Пример ответа:
Initialized empty Git repository in /Users/user/path/project/.git/