Базовая настройка git
2024-03-16
·
5 мин. для прочтения
Базовая настройка git.
Содержание
1 Первичная настройка параметров git
- Зададим имя и email владельца репозитория:
git config --global user.name "Name Surname" git config --global user.email "work@mail"
- Настроим utf-8 в выводе сообщений git:
git config --global core.quotepath false
- Зададим имя начальной ветки (будем называть её
master
):git config --global init.defaultBranch master
2 Верификация коммитов
- Настройте верификацию и подписание коммитов git (см. Подпись коммитов git).
3 Учёт переносов строк
- В разных операционных системах приняты разные символы для перевода строк:
- Windows:
\r\n
(CR
иLF
); - Unix:
\n
(LF
); - Mac:
\r
(CR
).
- Windows:
- Посмотреть значения переносов строк в репозитории можно командой:
git ls-files --eol
3.1 Параметр autocrlf
Настройка
core.autocrlf
предназначена для того, чтобы в главном репозитории все переводы строк текстовых файлах были одинаковы.Настройка
core.autocrlf
с параметрамиtrue
иinput
делает все переводы строк текстовых файлов в главном репозитории одинаковыми.core.autocrlf true
: конвертацияCRLF->LF
при коммите и обратноLF->CRLF
при выгрузке кода из репозитория на файловую систему (обычно используется в Windows).core.autocrlf input
: конвертацияCRLF->LF
только при коммитах (используются в MacOS/Linux).
Варианты конвертации
Таблица 1: Варианты конвертации для разных значений параметра core.autocrlfcore.autocrlf false input true git commit LF -> LF LF -> LF LF -> CRLF CR -> CR CR -> CR CR -> CR CRLF -> CRLF CRLF -> LF CRLF -> CRLF git checkout LF -> LF LF -> LF LF -> CRLF CR -> CR CR -> CR CR -> CR CRLF -> CRLF CRLF -> CRLF CRLF -> CRLF Установка параметра:
- Для Windows
git config --global core.autocrlf true
- Для Linux
git config --global core.autocrlf input
- Для Windows
3.2 Параметр safecrlf
- Настройка
core.safecrlf
предназначена для проверки, является ли окончаний строк обратимым для текущей настройкиcore.autocrlf
.core.safecrlf true
: запрещается необратимое преобразованиеlf<->crlf
. Полезно, когда существуют бинарные файлы, похожие на текстовые файлы.core.safecrlf warn
: печать предупреждения, но коммиты с необратимым переходом принимаются.
- Установка параметра:
git config --global core.safecrlf warn
4 Перечисление веток
Настроим, чтобы перечисление веток git по умолчанию не упорядочивалось по алфавиту.
branch.sort
: сортирует список не по алфавиту, а по свежести дат коммитов;column.ui
: выстраивает имена веток в формате столбцов так, чтобы на экране было видно больше такой информации.
git config --global column.ui auto git config --global branch.sort -committerdate
5 Перечисление тегов
- При перечислении тегов командой
git tag
сортировка провидится в алфавитном порядке. - Но метки обычно имеют вид набора цифр (номер версии).
- Настроим сортировку по номеру версии:
git config --global tag.sort version:refname
6 Отображение git diff
- Для команды
git diff
. - По умолчанию git использует для вычисления разности коммитов алгоритм Майерса.
- В базовой комплектации git встроено 4 алгоритма вычисления разности: myers, minimal, patience, histogram (инкрементная усовершенствованная версия patience).
- Установим по умолчанию алгоритм histogram:
git config --global diff.algorithm histogram
- При включённой опции
colorMoved
перемещение кода будет отображаться разными цветами, в зависимости от того, были какие-то строки добавлены или удалены.git config --global diff.colorMoved plain
- Опция
diff.renames
позволяет выявить, был ли файл переименованgit config --global diff.renames true
- Опция
diff.mnemonicPrefix
заменяет префиксы (обычноa/
иb/
) на информацию о том, откуда пришло различие:i/
(индекс),w/
(рабочий каталог), илиc/
(коммит).git config --global diff.mnemonicPrefix true
7 Настройка git push
- Опция
push.default simple
установлена по умолчанию, начиная с git 2.0. - Умолчание
simple
осуществляет отправку в текущую ветку и в одноимённую ветку на удалённой машине.git config --global push.default simple
- Если удалённая ветка не существует, а отслеживание веток не настроено, то вы получите ошибку.
- Опция
push.autoSetupRemote
служит для автоматического задания удалённой ветки:git config --global push.autoSetupRemote true
- Настройка
push.followTags
запушит все теги, имеющиеся у вас на локальной машине, но отсутствующие на сервере. - Если вы создаёте теги на локальной машине, то активируйте эту настройку:
git config --global push.followTags true
8 Улучшенная выборка
- Не стоит держать на локальной машине историю копий веток и тегов, которые когда-то были на сервере, а теперь там отсутствуют:
git config --global fetch.prune true git config --global fetch.pruneTags true git config --global fetch.all true
9 Предложения автозамены
- После ввода команды, которой не существует, следует запрос, что пользователь имел в виду.
- Это поведение можно изменять с помощью параметра
help.autocorrect
:0
(по умолчанию): показать предложенную команду.- положительное число: выполнить предложенную команду через указанное количество децисекунд (0,1 секунды);
immediate
: выполнить предложенную команду немедленно;prompt
: показать предложение и запросить подтверждение на выполнение команды;never
: не выполнять и не показывать предложенную команду.
- Вариант
prompt
представляется вполне разумным:git config --global help.autocorrect prompt
10 Коммиты с указанием разности
- По умолчанию
git commit
выдаёт только список изменившихся файлов. - Если установить
commit.verbose
в значениеtrue
, то будет представлен весь выводdiff
:
git config --global commit.verbose true
11 Повторное использование ранее записанных разрешений конфликтов
- Настройка работает только при применении
rebase
. - Пригодится, когда регулярно возникают конфликты.
- Опция
enabled
гарантирует, что система будет записывать состояния «до» и «после» конфликтов при перебазировании. - После этого
autoupdate
будет автоматически раз за разом применять проверенные способы разрешения конфликтов.git config --global rerere.enabled true git config --global rerere.autoupdate true
12 Глобальный файл ignore
- Вы можете создать локальный файл
.gitignore
. - Настройка
core.excludesfile
позволяет задать собственный глобальный файл для игнорирования:
touch ~/.config/git/ignore
git config --global core.excludesfile ~/.config/git/ignore
- Примеры файлов игнорирования можно взять в https://github.com/github/gitignore.
13 Аккуратное перебазирование
- Опция организует в виде ветки стопку ссылок и гарантирует, что при перебазировании ветки эти ссылки также будут правильно перемещены:
git config --global rebase.autoSquash true git config --global rebase.autoStash true git config --global rebase.updateRefs true
14 Улучшенная обработка конфликтов при слиянии
- Для обработки конфликтов будем использовать алгоритм
zdiff3
:git config --global merge.conflictstyle zdiff3
15 Настройки git pull
- Можно установить
rebase
по умолчаниию:git config --global pull.rebase true
16 ИСпользование fsmonitor
- Можно запускаться процесс для мониторинга файловой системы (по одному на каждый репозиторий), который будет отслеживать изменения в файлах и обновлять кэш.
- На больших репозиториях можно ускорить операции (например,
git status
):git config --global core.fsmonitor true git config --global core.untrackedCache true