A configuração do git pode ser configurada em vários repositórios?

17

O Git parece suportar os valores de configuração em três níveis:

  • Configurações globais por sistema (armazenadas em /etc/git-core )
  • Configurações globais por usuário (armazenadas em ~/.gitconfig )
  • Configurações locais por repositório (armazenadas em $REPO/.git/config )

Essas opções cobrem a maior parte da base, mas eu estou procurando uma maneira de lidar com um quarto nível. Eu tenho uma coleção (muito) grande de repositórios para os quais eu preciso usar um valor diferente para user.email do que o meu habitual. Esses repositórios geralmente são criados e manipulados por meio de scripts automatizados, e a configuração de configurações locais por repositório é incômoda.

Todos os repositórios em questão estão localizados em um determinado prefixo de caminho em meu sistema local. Existe uma maneira de definir um valor de configuração em algum lugar que será herdado por todos os repositórios sob esse caminho? (Algo como .htaccess configurações herdam todo o caminho até o sistema de arquivos.) Talvez houvesse uma maneira de definir valores condicionais no arquivo de configuração global? Quais outros arranjos poderiam ser feitos em um ambiente UNIX para lidar com um conjunto de repositórios como o meu?

    
por Caleb 11.07.2012 / 10:03

4 respostas

11

Não encontrei maneira de configurar o git neste quarto nível. A única maneira de substituir o valor de configuração por comando é usar git -c key=value .

Minha solução hacky atual é definir uma função de shell que serve como um wrapper para git. Quando chamado, ele passa os argumentos para o comando system git, mas não antes de verificar no diretório de trabalho atual e adicionar um argumento extra ao comando, se aplicável.

function git () {
    case "$PWD" in
        /path/to/repos/*)
            command git -c [email protected] "$@"
            ;;
        *)
            command git "$@"
            ;;
    esac
}
    
por 11.07.2012 / 10:03
6

Você pode configurar o endereço de e-mail do git com a variável de ambiente GIT_AUTHOR_EMAIL . Se você combinar isso com Execute scripts bash ao entrar em um diretório ou configuração de shell específica do diretório com zsh você pode facilmente alterar as configurações por diretório ou diretório pai, por exemplo Se você entrar em um diretório em ~/work , poderá ajustar automaticamente as variáveis de ambiente para alterar seu endereço de e-mail.

    
por 11.07.2012 / 11:12
1

Com base na resposta do Caleb, podemos definir um comando git modificado que configura permanentemente todos os repositórios nesse diretório corretamente, para que todos os usos futuros do vanilla git usem a nova configuração. Eu uso hub , que é outro wrapper git, então eu substituí meu alias git=hub por isso e chamei hub em minha função - se você não usa hub , substitua todas as invocações hub por command git :

function git() {
    case "$PWD" in
        /home/robin/git/3RD_PARTY)
            hub "$@"
            # We don't know which repository was cloned / operated on, so let's just reconfigure them all
            for f in *; do
                [[ -d "$f" ]] && hub -C "$f" config user.email $my_private_email
            done
            ;;
        /home/robin/git/3RD_PARTY/*)
            hub "$@"
            hub config user.email $my_private_email
            ;;
        *)
            hub "$@"
            ;;
    esac
}

Ao contrário da resposta do Caleb, que funciona apenas em um shell (e a menos que explicitamente, apenas em um shell interativo), isso também afeta outros front ends git que leem corretamente a configuração git, como emacs magit.

    
por 23.01.2016 / 16:48
0

Veja a solução com base na configuração do git:

link

Adicione ao arquivo “~ / .gitconfig”:

    [includeIf "gitdir:~/work/project1/.git"]  
      path = .gitconfig-project1  

Crie o arquivo “~ / .gitconfig-project1 ″ com o conteúdo:

    [core]  
      sshCommand = "ssh -i ~/.ssh/project1 -F /dev/null"  

    [user]  
      name = user1  
      email = [email protected]  
    
por 07.05.2018 / 05:46

Tags