Настройка клиента git
Установка git
Установка клиента git на Debian/Ubuntu
apt install -y git
brew install git
Для настройки клиента git используется конфигурационный файл в домашней директории пользователя ~/.gitconfig
Создание нескольких профилей подключения к репозиториям
При использовании нескольких профилей подключения к различным репозиториям можно использовать условные директивы в файле .gitconfig
, подключая разные файлы с реквизитами подключения в зависимости от расположения локальной копии.
Например, создадим файл ~/.gitconfig
, если он еще не существует, также необходимо создать два файла для условного подключения:
touch ~/.gitconfig touch ~/.gitconfig-default touch ~/.gitconfig-home touch ~/.gitconfig-work
Добавим два условия в основной файл, где указано, что при нахождении внутри директории использовать дополнительный файл, значения параметров в котором перепишут исходные:
# vi ~/.gitconfig [include] path = ~/.gitconfig-default [includeIf "gitdir:~/git/home/"] path = ~/.gitconfig-home [includeIf "gitdir:~/git/work/"] path = ~/.gitconfig-work
И в подключаемых файлах зададим необходимые параметры
# vi ~/.gitconfig-default [user] name = Alexander email = alexander@antroot.ru [init] defaultBranch = master [color] ui = auto [color "branch"] current = yellow reverse local = yellow remote = green [color "diff"] meta = yellow bold frag = magenta bold old = red bold new = green bold [color "status"] added = yellow changed = green untracked = cyan
# vi ~/.gitconfig-home [user] name = cs email = cs@antroot.ru [url "git@gitlab.antroot.ru:"] insteadOf = https://gitlab.antroot.ru/
# vi ~/.gitconfig-work [user] name = Alexander email = alex.cs@mywork.com [init] defaultBranch = main [url "git@gitlab.com:"] insteadOf = https://gitlab.com/
Проверка: перейти в директорию, создать директорию проекта, инициализировать и запросить имя пользователя:
cd ~/git/home/ mkdir test && cd test git init git config user.name git config user.email # cs cs@antroot.ru cd ~/git/work/ mkdir test && cd test git init git config user.name git config user.email # alex alex@mywork.com
Настройка ключей SSH для разных репозиториев
Так как для авторизации в git репозитории используем SSH подключение, то будет удобно настроить подключения к каждому из репозиториев со своими реквизитами (username, public key).
1 шаг: сгенерировать публичные ключи
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_antroot -C cs@antroot.ru ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_gitlab -C alexander@mywork.com ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_github -C alex.cs@myfree.com
2 шаг: запустить ssh-agent
eval $(ssh-agent -s) ssh-add
3 шаг: указать в файл идентификации для SSH
# ~/.ssh/config Host antroot.ru Hostname gitlab.antroot.ru User git IdentityFile ~/.ssh/id_rsa_antroot Host gitlab.com Hostname gitlab.com User git IdentityFile ~/.ssh/id_rsa_gitlab Host github.com Hostname github.com User git IdentityFile ~/.ssh/id_rsa_github
И немного настроек в ~/.ssh/config
Создать директорию для хранения подключений:
mkdir -p ~/.ssh/.sessions
# ~/.ssh/config Host * Protocol 2 # использовать общий канал к одному и тому же хосту # вместо отрытия нового для ускорения подключения ControlMaster auto ControlPath ~/.ssh/.sessions/%r@%h:%p ControlPersist 600 Compression yes TCPKeepAlive yes ServerAliveInterval 30 ServerAliveCountMax 10
Вывод профиля в приглашение командной строки
git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' } git_user() { in_repo="$(git rev-parse --is-inside-work-tree 2>/dev/null)" if [ "$in_repo" ]; then echo " $(git config user.name)" fi } export PS1="\[\033[1;32m\]\u@\h \[\033[34m\]\w \[\033[33m\]\$(git_branch)\$(git_user)\[\033[00m\]$
setopt prompt_subst PROMPT="%F{green}%n%f@%F{cyan}%m%f %F{yellow}%1~%f %# " RPROMPT="%D %F{cyan}%T%f %a" git_repo() { basename $(git rev-parse --show-toplevel) } git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' } git_user() { git config user.name } git_url() { #git config --get remote.origin.url | sed -nr 's/^(https|git)(:\/\/|@)([^\/:]+)[\/:]([^\/:]+)\/(.+)([.git]*)$/\3\/\4/p' # show URL and Group git config --get remote.origin.url | sed -nr 's/^(https|git)(:\/\/|@)([^\/:]+)[\/:]([^\/:]+)\/(.+)([.git]*)$/\3/p' # show URL only } prompt_hint() { [ -d .git ] && git_rep="true" || git_rep=$(git rev-parse --show-toplevel 2>/dev/null) if [ "$git_rep" ] then RPROMPT="%F{green}$(git_user)%f $(git_url) %F{yellow}$(git_repo)%f%F{cyan} $(git_branch)%f" else export RPROMPT="%D %F{cyan}%T%f %a" fi } precmd_functions+=(prompt_hint)
✅ Команды Git - Информация по основным и продвинутым командам, git tag, git hook, git stash и др.