Diferente .gitconfig baseado no caminho atual

4

No meu arquivo .zshrc , tenho uma % funçãochpwd que define a variável de ambiente GIT_CONFIG com base no caminho atual.

Algo parecido com isto:

update_gitconfig() {
  if [[ "$(pwd | grep -Poe '^/home/user/repositories/user-A(/|$)')" != "" ]]
  then
    export GIT_CONFIG="$HOME/.gitconfig-A"
    return
  fi

  if [[ "$(pwd | grep -Poe '^/home/user/repositories/user-B(/|$)')" != "" ]]
  then
    export GIT_CONFIG="$HOME/.gitconfig-B"
    return
  fi

  export GIT_CONFIG="$HOME/.gitconfig-default"
}

update_gitconfig
chpwd_functions+=(update_gitconfig)

Se eu executar git config --list , ele exibirá a configuração esperada em todos os diretórios:

  • Abaixo de $HOME/repositories/user-A , exibe as configurações de $HOME/.gitconfig-A .
  • Abaixo de $HOME/repositories/user-B , exibe as configurações de $HOME/.gitconfig-B .
  • Em todo o lado, apresenta as definições de $HOME/.gitconfig-default .

O problema começa quando eu corro git commit ; não parece obter as configurações:

*** Please tell me who you are.

Run

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'user@host.(none)')

Então, a questão é:

Existe alguma maneira de forçar o git commit a obter as informações do arquivo $GIT_CONFIG ?

NOTA: Eu sei que posso executar os comandos git config no gancho chpwd para aplicar configurações locais a todos os repositórios automaticamente, mas estou procurando uma maneira mais "elegante".

    
por noisypixy 11.09.2016 / 18:42

1 resposta

2

Git nota de versão v1.6.0 contém uma pista :

GIT_CONFIG, which was only documented as affecting "git config", but
actually affected all git commands, now only affects "git config".

E o git v1.8.2 corrige esse novo comportamento para o comando git clone que ainda foi afetado.

As soluções que posso ver de interesse são:

  • Use o git com quantos usuários forem necessários ( su ferramenta de linha de comando pode ajudar) .
  • Escrevendo aliases como alias gitcommit='git commit --author=$(git config user.email)' (feio) .
  • Copie seu arquivo de configuração para as configurações locais do repositório (qualquer modificação de configuração deve ser propagada manualmente) .
  • Pesquisa ~/.gitconfig falsa por meio da substituição da variável de ambiente HOME . Ex: HOME=~/.gitconfig/user-a/ git commit deve ler ~/.gitconfig/user-a/.gitconfig (pode ter alguns outros efeitos colaterais) .

Além disso, se você for com chpwd zsh hook, tenha cuidado para suportar vários zsh em execução em vários repositórios.

    
por 18.09.2016 / 18:12

Tags