Page N.

Git

Что мы знаем о данном инструменте?

План

  • Кратко о git. что это такое...
  • Настройка гита

Кратко о git. что это такое...

Это децентрализованная система контроля версий

1. Контроль версий представляется так что в каждом ТЕКСТОВОМ файле мы можем посмотреть кто и что менял и когда.

2. Все именения выглядят как patch, то есть в каком файле в после каких строк надо добавить новые строки

3. Некоторое количество изменений то есть коммит (некая минимальная структурная единица информации определенная одним автором как логически завершенные изменения)

4. Мы можем пользоваться гитом локально а также менять/добавлять цдаленные хранилища

5. изменения в гите это коммиты которые представляют собой граф (позже поглядим на них)

Также есть отличная книга по гиту https://git-scm.com/book/ru/v2

Настройка гита. Установка.

Вначале надо установить на систему git.

Под linux на базе дебиан (ubuntu): apt install git

Под windows: скачать с оффициального сайта

Под mac: раньше через brew можно было поставить на текущий момент я без понятия

Настройка гита. Авторизация.

Есть два типа авторизации в гите (мне известно только о них):

  • Через basic auth то есть типа
    git clone http://user:pass@site.com/repos/repo1 repo1_via_basicauth.git
  • или через ssh-ключ
    git clone git@site.com:repos/repo1 repo1_via_ssh.git
    (но ключ надо предварительно настроить см далее)

repo1_via_basicauth.git - директория в куда сколонировать репозиторий

repo1_via_ssh.git - диреткория в куда сколонировать репозиторий

Настройка гита. Генерация персонального ключа.

Сгенерируем ключ (при геннерации указываем путь до ключв ~/.ssh/test и пассфразу оставляем пустую):

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/test
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/seakg/.ssh/test
Your public key has been saved in /home/seakg/.ssh/test.pub
The key fingerprint is:
SHA256:tMSgiRfuDgtU3AOMxZ2zlDmVlTAyHzJy9wCmLUgtCeI your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
....
+----[SHA256]-----+

Статья от github: connecting-to-github-with-ssh

Публичный ключ test.pub - содержимое его как раз и закидываем в github / gitlab / bitbucket / gitverse и так далее

Настройка гита. Настройка ключа

в ~/.ssh/config можем прописать какой ключ и для какого сервера надо использовать (удобно для разделения рабочих ключей и личного а также для работы с разными серверами).

Host github.com
  User git
  IdentityFile ~/.ssh/test

Host 192.168.1.1
  User git
  Port 8022
  IdentityFile ~/.ssh/test

Host bitbucket.org
  User git
  IdentityFile ~/.ssh/test2
              

~/.ssh/test - будет использоваться для работы с github.com

~/.ssh/test2 - будет использоваться для работы с bitbucket.org

Кроме IdentityFile можно всякого там настроить напрмиер User а остальное лучше погуглить

Также в этом файле можно настраивать ключи для доступа к сервера по ssh (чтобы также можно было использовать разные ключи к разным серверам)

Переодически возникает проблема с правами до конфига и до ключей, потому выставляем такие вот права:

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/*
              

Общий принцип работы гита

Картинку

Просмотр изменений и текущих изменений

$ git status
- показывает изменные файлы и файлы добавленные для коммита

$ git branch -a -v
- показывает все ветки

$ git log
- показывает историю изменений на текущей ветки

$ git log --oneline
- тоже что и git log но только в однострочном формате

$ git log --oneline --graph
- тоже что и git log но только в однострочном формате и в виде графа

$ git log --oneline --graph --all
- показывает историю изменений в однострочном формате, в виде графа для всех веток

$ git diff-tree --no-commit-id --name-only -r 61ea1ed552f06612c2cbeec48c85c23fbf9495c4
- показывает измененые файлы из коммита

Получение изменений pull / fetch

$ git pull
- Забирает изменение из внешнего репозитория и пытается применить их на текущей выбранной ветке

$ git pull -p
- делвет тоже что и pull + удаляет те ветки которые были удалены во внешнем репозитории

$ git fetch
- получает все изменения из внешнего репозитория но не применяет их

Крутотеньки. Rebase

удобно для персональных веток (!!!) или еще не закомиченных изменений или приведение в порядок ветки

$ git rebase origin/master
- пересоздает текущую ветку от origin/master (создает новую ветку и копирует все коммиты с текущей в новую)

$ git rebase -i HEAD~5
- можем поменять порядок коммитов или засквошить (то есть обьеденить коммиты)

Крутотеньки. Fixup коммиты

удобно для персональных веток (!!!) или еще не закомиченных изменений

$ git add some_file
$ git commit --fixup=7da9c4f09995bb0f02bd77e125fd5d50c5039a1b
$ git rebase -i --autosquash 7da9c4f09995bb0f02bd77e125fd5d50c5039a1b~1
# git push -f