notes/git.md

143 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# git
- [git](#git)
- [Отображение статуса репозитория в приглашении](#отображение-статуса-репозитория-в-приглашении)
- [Аутентификация на GitHub с помощью SSH-ключа](#аутентификация-на-github-с-помощью-ssh-ключа)
- [Добавление SSH-ключа на GitHub](#добавление-ssh-ключа-на-github)
- [Работа с удаленным репозиторием](#работа-с-удаленным-репозиторием)
- [Указание конкретного ключа для репозитория](#указание-конкретного-ключа-для-репозитория)
## Отображение статуса репозитория в приглашении
Это дополнительный функционал, который не требуется для работы с Git, но очень помогает в этом. При работе с Git очень удобно, когда можно сразу определить, находитесь вы в обычном каталоге или в репозитории Git. Кроме того, было бы хорошо понимать статус текущего репозитория. Для этого нужно установить специальную утилиту, которая будет показывать статус репозитория. Для установки утилиты надо скопировать её репозиторий в домашний каталог пользователя, под которым вы работаете:
```shell
cd ~
git clone https://github.com/magicmonty/bash-git-prompt.git .bash-git-prompt --depth=1
```
А затем добавить в конец файла .bashrc такие строки:
```shell
GIT_PROMPT_ONLY_IN_REPO=1
source ~/.bash-git-prompt/gitprompt.sh
```
Для того, чтобы изменения применились, перезапустить bash:
```shell
exec bash
```
Теперь, если вы находитесь в обычном каталоге, приглашение выглядит стандартно, а если в каталоге, в котором инициализирован репозиторий git, это будет указано.
[вверх](#git)
***
## Аутентификация на GitHub с помощью SSH-ключа
Генерация нового SSH-ключа (используйте e-mail, который привязан к GitHub):
```shell
ssh-keygen -t rsa -b 4096 -C "github_email@gmail.com"
```
На всех вопросах достаточно нажать Enter (более безопасно использовать ключ с passphrase, но можно и без, если нажать Enter при вопросе, тогда passphrase не будет запрашиваться у вас постоянно при операциях с репозиторием).
Запуск SSH-агента (пропускаем на Windows):
```shell
eval "$(ssh-agent -s)"
```
Добавить ключ в SSH-агент (пропускаем на Windows):
```shell
ssh-add ~/.ssh/id_rsa
```
[вверх](#git)
***
## Добавление SSH-ключа на GitHub
Для добавления ключа надо его скопировать.
Например, таким образом можно отобразить ключ для копирования:
```shell
cat ~/.ssh/id_rsa.pub
```
После копирования надо перейти на GitHub. Находясь на любой странице GitHub, в правом верхнем углу нажмите на картинку вашего профиля и в выпадающем списке выберите «Settings». В списке слева надо выбрать поле «SSH and GPG keys». После этого надо нажать «New SSH key» и в поле «Title» написать название ключа (например «Home»), а в поле «Key» вставить содержимое, которое было скопировано из файла ~/.ssh/id_rsa.pub
Чтобы проверить, всё ли прошло успешно, попробуйте выполнить команду:
```shell
ssh -T git@github.com
```
Вывод должен быть таким:
```shell
$ ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
```
[вверх](#git)
***
## Работа с удаленным репозиторием
Клонируем удаленный репозиторий в локальную папку
```shell
git clone ssh://git@github.com/pyneng/online-2-natasha-samoylenko.git
```
После внесения измений в локальные файлы проверяем состояние локального репозитория
```shell
git status
```
Необходимо добавить файлы в отслеживаемые
```shell
git add <имя файла>
```
Создадим коммит
```shell
git commit -m "описание изменений"
```
Синхронизируем локальный и удаленный репозитории
```shell
git push
```
[вверх](#git)
***
## Указание конкретного ключа для репозитория
1. Клонировать репозиторий с указанием необходимого ключа
```shell
git clone -c core.sshCommand="/usr/bin/ssh -i /home/da2001/.ssh/sape_a.dolgiy" ssh://git@gitlab.sapient.ru:7999/devops/salt.git
```
2. Указать в настройках локального репозитория необходимый ключ
```shell
git config --local core.sshCommand="/usr/bin/ssh -i /home/da2001/.ssh/sape_a.dolgiy"
```
[вверх](#git)
***