No meu ~/.gitconfig
, listo meu endereço de e-mail pessoal em [user]
, pois é isso que quero usar para os repositórios do Github.
Mas recentemente comecei a usar o git também para o trabalho. O repositório git da minha empresa me permite confirmar, mas quando ele envia anúncios de novos conjuntos de alterações, ele diz que são do Anonymous porque não reconhece o endereço de email no meu .gitconfig
- pelo menos, essa é a minha teoria.
É possível especificar várias [user]
definições .gitconfig
? Ou existe alguma outra maneira de substituir o padrão .gitconfig
para um determinado diretório? No meu caso, verifico todo o código de trabalho em ~/worksrc/
- existe uma maneira de especificar um .gitconfig
somente para esse diretório (e seus subdiretórios)?
git
git-config
Brock Boland
fonte
fonte
Respostas:
Você pode configurar um repositório individual para usar um endereço de usuário / email específico que substitua a configuração global. Na raiz do repositório, execute
enquanto o usuário / email padrão está configurado no seu ~ / .gitconfig
fonte
.git/config
arquivogit config --edit
egit config --global --edit
. E caso você tenha perdido o comentário de Abizern , o arquivo de configuração de um repositório está em<repo-root>/.git/config
.Git 2.13
lançada hoje.Desde o git 2.13 , é possível resolver isso usando as inclusões Condicionais recém-introduzidas .
Um exemplo:
Configuração global ~ / .gitconfig
Configuração específica do trabalho ~ / work / .gitconfig
fonte
git config --list
em diretórios diferentes. Nos subdiretórios~/work/
que contêm um repositório git, oincludeIf
efeito entra em vigor. Observe que nos subdiretórios~/work/
que não contêm um repositório git, oincludeIf
não é executado.Ou você pode adicionar as seguintes informações no seu
.git/config
arquivo localfonte
Um comando github accounts switch
Essa solução assume a forma de um único alias do git. Uma vez executado, o usuário do projeto atual será anexado a outra conta
Gerar chaves ssh
Vincule-os às suas contas GitHub / Bitbucket
pbcopy < ~/.ssh/id_rsa.pub
add SSH key
página do githubpbcopy < ~/.ssh/id_rsa_pro.pub
Etapa 1. Troca automática de chave ssh.
Podemos configurar
ssh
para enviar um uso de uma chave de criptografia específica, dependendo dohost
. O bom é que você pode ter vários aliases para o mesmohostname
.Veja este
~/.ssh/config
arquivo de exemplo :configuração remota git
Agora você pode usar esses aliases nos controles remotos git alterando
[email protected]
porgit@github_pro
.Você pode alterar os controles remotos de seus projetos existentes (usando algo como
git remote set-url origin git@github_pro:foo/bar.git
) ou adaptá-los diretamente ao cloná-los.usando o alias, ele se torna:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Etapa 2. Alterando o git user.email
As configurações do Git podem ser globais ou por projeto. No nosso caso, queremos uma configuração por projeto. É muito fácil mudar isso:
Embora isso seja fácil, leva muito tempo para os desenvolvedores que somos. Podemos escrever um alias git muito simples para isso.
Nós vamos adicioná-lo ao
~/.gitconfig
arquivo.Então, tudo o que precisamos fazer é
git setpromail
alterar nosso email apenas para este projeto.Etapa 3. Uma chave de comando, por favor ?!
Não seria bom mudar da conta padrão para a conta especificada com um único comando sem parâmetros? Isso é definitivamente possível. Este comando terá duas etapas:
Já temos uma solução de comando único para o segundo passo, mas o primeiro é muito mais difícil. Alteração de host remoto de um comando
Aí vem a solução na forma de outro comando git alias para adicionar ao seu
~/.gitconfig
:Isso permite alterar todos os controles remotos de um host para outro (o alias). Veja o exemplo:
Combine todos eles
Agora só precisamos combinar os dois comandos em um, isso é bastante fácil. Veja como eu também integro a comutação de host de bitbucket.
Link de origem - Tutorial
fonte
setpromail
alias faça issoconfig --global
(e eu tenho outros aliases definidos para definir endereços de email diferentes). Funciona!useConfigOnly = true
a outra resposta.Depois de me inspirar no post de Orr Sella, escrevi um gancho de pré-confirmação (reside em
~/.git/templates/hooks
) que definiria nomes de usuário e endereços de email específicos com base nas informações dentro de um repositório local./.git/config
:Você deve colocar o caminho para o diretório do modelo em seu
~/.gitconfig
:Em seguida, cada
git init
ougit clone
vai pegar esse gancho e aplicará os dados do usuário durante a próximagit commit
. Se você deseja aplicar o gancho aos repositórios já existentes, basta executar umgit init
dentro do repositório para reinicializá-lo.Aqui está o gancho que eu criei (ele ainda precisa de polimento - sugestões são bem-vindas). Salve-o como
ou
e verifique se é executável:
chmod +x ./post-checkout || chmod +x ./pre_commit
EDITAR:
Então, eu reescrevi o gancho como um gancho e comando em Python. Além disso, é possível chamar o script como um comando Git (
git passport
) também. Também é possível definir um número arbitrário de IDs dentro de um configfile (~/.gitpassport
) que podem ser selecionados em um prompt. Você pode encontrar o projeto em github.com: git-passport - Um comando do Git e um gancho escritos em Python para gerenciar várias contas / identidades de usuário do Git .fonte
chmod +x post-checkout
, 2. osgit_remotes
valores são parte inicial de todo o nome do host, por exemplo[email protected]
, 3. oslocal_id
valores devem ser editados pelo usuário para os respectivos nomes e endereços de email.git init
novos projetos de uma IDE, comoeclipse
(que não podem lidar com interativo pré-commit gatilhos)Se você não deseja ter um endereço de email padrão ( links de endereço de email para um usuário do github ), você pode configurar o que deseja que seja solicitado. Como você pode fazer isso depende da versão do git usada, veja abaixo.
A desvantagem (pretendida) é que você deve configurar seu endereço de email (e seu nome) uma vez para cada repositório. Então, você não pode esquecer de fazê-lo.
Versão <2.7.0
na sua configuração global,
~/.gitconfig
conforme declarado em um comentário de Dan Aloni na postagem do blog de Orr Sella . Ao tentar fazer o primeiro commit em um repositório, o git falha com a boa mensagem:O nome é obtido da configuração global quando o endereço de email é definido localmente (a mensagem não é perfeitamente precisa).
2.7.0 ≤ Versão <2.8.0
O comportamento nas versões <2.7.0 não foi planejado e corrigido com 2.7.0. Você ainda pode usar um gancho de pré-confirmação, conforme descrito na postagem do blog de Orr Sella . Esta solução também funciona para outras versões, mas as outras soluções não para esta versão.
Versão ≥ 2.8.0
Dan Aloni adicionou uma opção para atingir esse comportamento (consulte as notas da versão ). Use-o com:
Para fazê-lo funcionar, você não deve fornecer um nome ou endereço de email na configuração global. Em seguida, na primeira confirmação, você recebe uma mensagem de erro
Portanto, a mensagem não é muito instrutiva, mas como você define explicitamente a opção, você deve saber o que fazer. Ao contrário da solução das versões <2.7.0, você sempre precisa definir o nome e o email manualmente.
fonte
git bisect
achava que o commit 19ce497c ... introduzia esse comportamento. No entanto, independente da versão (2.5 - 2.7) eu posso usaremail =
(sem argumento) na configuração e mostra o mesmo comportamentoemail = "(none)"
das versões antigas. Você pode confirmar isso? Nesse caso, editarei minha resposta. Sou apenas cético, pois parece tão óbvio e não o usei antes.email =
na 2.7.0, o Git ainda adivinha o endereço de email com base no nome de usuário e no host. Agora usopre-commit
abordagem no blog de Sella. Também informei o Dan Aloni que teve a"(none)"
ideia no post de Sella e ele registrou um patch para implementá-lo formalmente como um recurso: permalink.gmane.org/gmane.comp.version-control.git/285301Com inclusões condicionais no Git 2.13, agora é possível coexistir vários usuários / email em uma máquina com pouco trabalho.
user.gitconfig
tem meu nome e email pessoais.work-user.gitconfig
tem meu nome e e-mail de trabalho. Ambos os arquivos estão no~
caminho.Portanto, meu nome / email pessoal se aplica por padrão. Para
c:/work/
dir, meu nome / email de trabalho é aplicado. Parac:/work/github/
dir, meu nome / email pessoal é aplicado. Isso funciona quando a última configuração é aplicada.gitdir
diferencia maiúsculas de minúsculas egitdir/i
não diferencia maiúsculas de minúsculas."gitdir/i:github/"
aplicaria a inclusão condicional para qualquer diretório comgithub
em seu caminho.fonte
gitdir/i
me ajudou (que sua resposta não menciona).Outra opção para
git
trabalhar com vários nomes / e-mails égit
usando o alias e usando o-c
sinalizador para substituir a configuração global e específica do repositório.Por exemplo, definindo um alias:
Para ver se funciona, basta digitar
git config user.email
:Em vez de um alias, você também pode colocar um
git
executável personalizado dentro do seu$PATH
.Uma vantagem desse método em relação a um repositório específico
.git/config
é que ele se aplica a todos osgit
repositórios quando ogit
programa customizado está ativo. Dessa maneira, você pode alternar facilmente entre usuários / nomes sem modificar nenhuma configuração (compartilhada).fonte
aliases do git (e seções em git configs) para o resgate!
adicione um alias (da linha de comando):
então, defina, por exemplo
e em um repo novo ou clonado, você pode executar este comando:
Esta solução não é automática, mas o usuário desactivação e-mail no seu global,
~/.gitconfig
e definindouser.useConfigOnly
atrue
forçaria git para lembrá-lo para configurá-los manualmente em cada repo novo ou clonado.fonte
Aqui estão as etapas completas depois de ler muitas respostas aqui
Como definir várias configurações de chaves SSH para diferentes contas do github
Você pode começar a verificar as chaves salvas no momento
Se você decidir excluir todas as chaves em cache antes ( opcional, tenha cuidado com isso )
Em seguida, você pode criar uma chave ssh pub / priv vinculada a cada email / conta que você deseja / precisa usar
Após executar esses comandos, você terá os seguintes arquivos criados
Verifique se o agente de autenticação está em execução
Adicione as chaves geradas da seguinte forma (da pasta ~ / .ssh)
Agora você pode verificar suas chaves salvas novamente
Agora você precisa adicionar as chaves públicas geradas ao seu servidor github / bickbuket
Clone cada um dos repositórios para pastas diferentes
Vá para a pasta onde o trabalho do usuário trabalhará e execute este
Apenas para ver o que isso faz, verifique o conteúdo do ".git / config"
Vá para a pasta onde o usuário pers trabalhará e executará este
Apenas para ver o que isso faz, verifique o conteúdo do ".git / config"
Depois de tudo isso, você poderá confirmar seu código pessoal e de trabalho apenas alternando entre essas duas pastas
Caso você esteja usando o Git Bash e precise gerar chaves ssh no Windows, siga estas etapas:
https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows
fonte
Existe uma solução simples que parece funcionar bem para evitar erros.
Simplesmente remova a
[user]
seção do seu~/.gitconfig
, o que impedirá que você faça quaisquer confirmações sem definiruser.name
para cada repositório.No seu
~/.bashrc
, adicione alguns aliases simples para o usuário e email:fonte
Essa resposta foi parcialmente inspirada no post do @Saucier, mas eu estava procurando uma maneira automatizada de definir
user.name
euser.email
por repo, com base no controle remoto, um pouco mais leve que o pacote git-passport que ele desenvolveu . Também h / t para @John para a configuração useConfigOnly. Aqui está a minha solução:.gitconfig
alterar:gancho pós-checkout, que deve ser salvo no seguinte caminho
~/.git-templates/hooks/post-checkout
::Uso credenciais diferentes para o github e o gitlab, mas essas referências no código acima podem ser substituídas ou aumentadas por qualquer serviço que você usar. Para que o gancho pós-checkout defina automaticamente o nome de usuário e o email localmente para um repo após um check-out, verifique se o nome do serviço aparece no URL remoto, adicione-o à matriz de serviços no
post-checkout
script e crie uma seção em seu.gitconfig
que contém seu nome de usuário e email para esse serviço.Se nenhum dos nomes de serviço aparecer no URL remoto ou o repositório não tiver um remoto, o nome do usuário e o email não serão definidos localmente. Nesses casos, a
user.useConfigOnly
configuração estará em jogo, o que não permitirá que você faça confirmações até que o nome do usuário e o email sejam definidos no nível do repo e solicitará que o usuário configure essas informações.fonte
chmod 755
do script do gancho. Caso contrário, ele será copiado, mas nunca executado.GIT_AUTHOR_EMAIL
+ local.bashrc
.bashrc_local
: não rastreie este arquivo, coloque-o apenas no seu computador de trabalho:.bashrc
: rastreie esse arquivo, faça o mesmo nos computadores doméstico e comercial:Estou usando https://github.com/technicalpickles/homesick para sincronizar meus arquivos de ponto.
Se apenas o gitconfig aceitasse variáveis de ambiente: Expansão da variável do shell no git config
fonte
Ambiente Windows
Adicional, isso pode ser modificado
Git Extensions --> Settings --> Global Settings
, se você o tiver instalado em seus sistemas.gitextensions-latest-release
Clique com o botão direito do mouse em uma pasta / diretório no Ambiente do Windows para acessar essas configurações.
Atualização : Como alternar / manter várias configurações na versão 2.49
fonte
Talvez seja um hack simples, mas é útil. Basta gerar 2 chaves ssh como abaixo.
Da mesma forma, crie mais um para uso pessoal. Então, você tem 2 chaves ssh, trabalho e empresa. Copie work.pub, work, personal.pub, personal para ~ / .ssh / Directory.
Em seguida, crie um script de shell com as seguintes linhas e nomeie-o como crev.sh (Company Reverse) com o seguinte conteúdo.
Da mesma forma, crie mais um chamado prev.sh (Reverse Pessoal) com o seguinte conteúdo.
em ~ / .bashrc adicione aliases para os scripts como abaixo
Sempre que quiser usar a empresa, faça crev, e se quiser usar o pessoal, prev :-p.
Adicione essas chaves ssh às suas contas do GitHub. Verifique se você não possui o id_rsa gerado anteriormente, porque esses scripts substituirão o id_rsa. Se você já gerou id_rsa, use-o para uma das contas. Copie-os como pessoais e pule a geração de chaves pessoais.
fonte
Eu criei uma função bash que lida com isso. Aqui está o repositório do Github .
Para gravar:
fonte
Basta adicionar isso ao seu ~ / .bash_profile para alternar entre as chaves padrão do github.com
fonte
Você também pode usar
git commit --author "Your Name <[email protected]>"
no momento da confirmação em um repositório em que deseja confirmar como um usuário diferente.fonte
Algo parecido com a resposta de Rob W , mas permitindo uma chave ssh diferente e funciona com versões mais antigas do git (que não possuem, por exemplo, uma configuração core.sshCommand).
Eu criei o arquivo
~/bin/git_poweruser
, com permissão de executável, e no PATH:Sempre que eu quero confirmar ou enviar algo como "Usuário Avançado", eu uso em
git_poweruser
vez degit
. Ele deve funcionar em qualquer diretório e não requer alterações.gitconfig
ou.ssh/config
, pelo menos, não no meu.fonte
Embora a maioria das perguntas tenha respondido ao OP, eu só precisei passar por isso e, mesmo sem pesquisar no Google, consegui encontrar a solução mais rápida e simples. Aqui estão as etapas simples:
.gitconfg
de seu outro repositório.gitconfig
arquivo, como nome, email e nome de usuário[user] name = John email = [email protected] username = john133
.gitignore
lista, para garantir que você não confirme o.gitconfig
arquivo no seu repositório de trabalhofonte