Настройка клиента 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 и др.