Files
notes/git.md

182 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# git
- [git](#git)
- [Отображение статуса репозитория в приглашении](#отображение-статуса-репозитория-в-приглашении)
- [Аутентификация на GitHub с помощью SSH-ключа](#аутентификация-на-github-с-помощью-ssh-ключа)
- [Добавление SSH-ключа на GitHub](#добавление-ssh-ключа-на-github)
- [Работа с удаленным репозиторием](#работа-с-удаленным-репозиторием)
- [Указание конкретного ключа для репозитория](#указание-конкретного-ключа-для-репозитория)
- [Синхронизация своей ветки с изменениями master](#синхронизация-своей-ветки-с-изменениями-master)
- [Полная последовательность для Rebase:](#полная-последовательность-для-rebase)
## Отображение статуса репозитория в приглашении
Это дополнительный функционал, который не требуется для работы с Git, но очень помогает в этом. При работе с Git очень удобно, когда можно сразу определить, находитесь вы в обычном каталоге или в репозитории Git. Кроме того, было бы хорошо понимать статус текущего репозитория. Для этого нужно установить специальную утилиту, которая будет показывать статус репозитория. Для установки утилиты надо скопировать её репозиторий в домашний каталог пользователя, под которым вы работаете:
```bash
cd ~
git clone https://github.com/magicmonty/bash-git-prompt.git .bash-git-prompt --depth=1
```
А затем добавить в конец файла .bashrc такие строки:
```bash
GIT_PROMPT_ONLY_IN_REPO=1
source ~/.bash-git-prompt/gitprompt.sh
```
Для того, чтобы изменения применились, перезапустить bash:
```bash
exec bash
```
Теперь, если вы находитесь в обычном каталоге, приглашение выглядит стандартно, а если в каталоге, в котором инициализирован репозиторий git, это будет указано.
[вверх](#git)
***
## Аутентификация на GitHub с помощью SSH-ключа
Генерация нового SSH-ключа (используйте e-mail, который привязан к GitHub):
```bash
ssh-keygen -t rsa -b 4096 -C "github_email@gmail.com"
```
На всех вопросах достаточно нажать Enter (более безопасно использовать ключ с passphrase, но можно и без, если нажать Enter при вопросе, тогда passphrase не будет запрашиваться у вас постоянно при операциях с репозиторием).
Запуск SSH-агента (пропускаем на Windows):
```bash
eval "$(ssh-agent -s)"
```
Добавить ключ в SSH-агент (пропускаем на Windows):
```bash
ssh-add ~/.ssh/id_rsa
```
[вверх](#git)
***
## Добавление SSH-ключа на GitHub
Для добавления ключа надо его скопировать.
Например, таким образом можно отобразить ключ для копирования:
```bash
cat ~/.ssh/id_rsa.pub
```
После копирования надо перейти на GitHub. Находясь на любой странице GitHub, в правом верхнем углу нажмите на картинку вашего профиля и в выпадающем списке выберите «Settings». В списке слева надо выбрать поле «SSH and GPG keys». После этого надо нажать «New SSH key» и в поле «Title» написать название ключа (например «Home»), а в поле «Key» вставить содержимое, которое было скопировано из файла ~/.ssh/id_rsa.pub
Чтобы проверить, всё ли прошло успешно, попробуйте выполнить команду:
```bash
ssh -T git@github.com
```
Вывод должен быть таким:
```bash
$ ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not provide bash access.
```
[вверх](#git)
***
## Работа с удаленным репозиторием
Клонируем удаленный репозиторий в локальную папку
```bash
git clone ssh://git@github.com/pyneng/online-2-natasha-samoylenko.git
```
После внесения измений в локальные файлы проверяем состояние локального репозитория
```bash
git status
```
Необходимо добавить файлы в отслеживаемые
```bash
git add <имя файла>
```
Создадим коммит
```bash
git commit -m "описание изменений"
```
Синхронизируем локальный и удаленный репозитории
```bash
git push
```
[вверх](#git)
***
## Указание конкретного ключа для репозитория
1. Клонировать репозиторий с указанием необходимого ключа
```bash
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. Указать в настройках локального репозитория необходимый ключ
```bash
git config --local core.sshCommand "/usr/bin/ssh -i /home/da2001/.ssh/sape_a.dolgiy"
```
[вверх](#git)
***
## Синхронизация своей ветки с изменениями master
### Полная последовательность для Rebase:
```bash
# 1. Переключиться на основную ветку
git switch master
# 2. Обновить локальную основную ветку с удаленного репозитория
git pull origin master
# 3. Вернуться на свою рабочую ветку
git switch your_branch
# 4. Перебазировать ваши коммиты на актуальный master
git rebase master
```
При возникновении конфликтов
```bash
# Во время rebase Git сообщит о конфликтах
# 1. Редактируете файлы, устраняете конфликты
# 2. Добавляете исправленные файлы:
git add <исправленные-файлы>
# 3. Продолжаете rebase:
git rebase --continue
# Или отменяете rebase если что-то пошло не так:
git rebase --abort
```
[вверх](#git)
***