Базовая настройка 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 Верификация коммитов

3 Учёт переносов строк

  • В разных операционных системах приняты разные символы для перевода строк:
    • Windows: \r\n (CR и LF);
    • Unix: \n (LF);
    • Mac: \r (CR).
  • Посмотреть значения переносов строк в репозитории можно командой:
    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.autocrlf
    core.autocrlffalseinputtrue
    git commitLF -> LFLF -> LFLF -> CRLF
    CR -> CRCR -> CRCR -> CR
    CRLF -> CRLFCRLF -> LFCRLF -> CRLF
    git checkoutLF -> LFLF -> LFLF -> CRLF
    CR -> CRCR -> CRCR -> CR
    CRLF -> CRLFCRLF -> CRLFCRLF -> CRLF
  • Установка параметра:

    • Для Windows
      git config --global core.autocrlf true
      
    • Для Linux
      git config --global core.autocrlf input
      

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

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
    
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.