Substitua o usuário configurado para um único git commit

97

Estou tentando me comprometer com um projeto em github.com do meu laptop de trabalho, que já está configurado para o servidor git da empresa. Existe uma maneira de confirmar especificando credenciais de autor diferentes, possível usando um arquivo de configuração diferente ou outras opções de linha de comando?

Eu tentei usar

--author="My Name <[email protected]>" 

e recebi a mensagem:

 Committer: unknown <[email protected]>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

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

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

mas ainda não atualizei meu nome de usuário para me comprometer com o projeto github.com. Posso tentar mais alguma coisa e isso é possível?

FilBot3
fonte
2
Git distingue entre o autor e o committer . Para definir o committer temporariamente para um comando, use -c user.name=Me [email protected]. Para usar uma configuração global personalizada, consulte esta questão ou use um alias de shell contendo -copções. Mas nenhum desses é provavelmente a coisa certa a fazer nesta situação - você quer uma configuração por repo.
Robin Green
Com o Git 2.22 (segundo trimestre de 2019), você terá configurações dedicadas {author,committer}.{name,email}. Veja minha resposta abaixo
VonC

Respostas:

177

Primeiro, o autor não é necessariamente o mesmo que o cometedor. Git rastreia ambos.

Para definir qual nome usar apenas para este repositório, você pode fazer:

git config user.name "Your Name"
git config user.email "Your email"

Observe a ausência da --globalopção. Isso definirá a configuração apenas neste repositório.

Como alternativa, você pode fazer isso para apenas um único comando, usando a -copção:

git -c "user.name=Your Name" -c "user.email=Your email" commit ...

Mas acho melhor apenas usar as opções de configuração acima.

John Szakmeister
fonte
5
isso é exatamente o que eu precisava, já que preciso fazer um commit de uma conta compartilhada (root no servidor devel) para o repo git sob mim e não quero que meu nome / e-mail seja oferecido a outros.
andrej
57

Tente acrescentar isso ao seu comando git:

git -c [email protected] -c user.name='Your Name'

Isso é bom para uma tentativa única, mas você pode preferir salvá-lo no arquivo .git / config do repositório local que você clonou do git. Isso pode ser feito executando git config (no --global ou --system para torná-lo "local para o repo") ou editando o .git/config(é a mesma sintaxe que~/.gitconfig

Asenar
fonte
1
Obrigado! Estou compartilhando um servidor com várias pessoas e não quero definir um usuário padrão. Isto é perfeito!
horrivelmente
1
@horriblyUnpythonic de nada :) Você também pode criar um apelido em seu .bash_aliases, e / ou você também pode definir um gancho de pré-confirmação para rejeitar o envio quando o usuário não estiver definido.
Asenar
28

Você também pode definir variáveis de ambiente GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, e GIT_AUTHOR_EMAILem uma base per-shell ou mesmo per-comando.

Jesse Glick
fonte
Ótimo, como isso seria usado principalmente em um cenário de computador compartilhado, por sessão com limpeza automática é perfeito.
kmac
1
Não funcionou para mim. O autor permaneceu o mesmo depois git commit --amend. Apenas o commiter mudou.
Ondra Žižka
O mesmo aqui que eu fizgit commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD
1
Isso ocorre porque o git commit --amenddesign não altera o autor, como diz a página de manual. Solução: git commit --amend --reset-author
kubanczyk
7

Eu acredito que você poderia correr:

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

para diferentes partes do git. Tente abrir a pasta onde o trabalho está sendo feito para o repo no servidor github.

Certifique-se de ver uma pasta .git nessa pasta de trabalho. Agora abra essa pasta no Terminal / Console / CommandPrompt e tente alterar o nome de usuário e o e-mail para essa pasta apenas executando os comandos que especifiquei acima.

Alterando isso, agora você pode acessar o servidor GitHub.

Dê uma olhada aqui: https://help.github.com/articles/setting-your-username-in-git

Além disso, acredito que haja uma maneira de enviar para um repo remoto usando seu nome de usuário e senha do github no próprio comando, mas não estou citando porque não funcionou para mim.

Joe
fonte
5

Seguindo a resposta de Jesse Glick aqui com uma implementação expandida porque a sugestão da IMO é a melhor maneira de fazer isso.

Adicione o seguinte ao seu .bash_profile. Ele irá solicitar um usuário ao executar pela primeira vez qualquer comando git no shell ativo. Ele então lembrará do usuário em todas as execuções subsequentes.

(obviamente, cruze a referência de um valor de entrada do usuário para nomes exatos e endereços de e-mail para os vários valores git auther / name no bloco de caso e atualize as atribuições conforme necessário)

git() {
  echo "Running BETTER git..."
  if [ -z "$GIT_COMMITTER_NAME" ]; then
    while true; do
      read -p "Git User: " UNAME
      case $UNAME in
          user1 ) break;;
          user2 ) break;;
          * ) echo "Invalid User";;
      esac
    done
    GIT_COMMITTER_NAME=$UNAME
    export GIT_COMMITTER_NAME
    [email protected]
    export GIT_COMMITTER_EMAIL
    GIT_AUTHOR_NAME=$GIT_COMMITTER_NAME
    export GIT_AUTHOR_NAME
    GIT_AUTHOR_EMAIL=$GIT_COMMITTER_EMAIL
    export GIT_AUTHOR_EMAIL
  fi
  echo "  using git user: $GIT_AUTHOR_NAME / $GIT_AUTHOR_EMAIL"
  /usr/bin/git "$@"
}
favela
fonte
2

Você também pode definir variáveis de ambiente GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, e GIT_AUTHOR_EMAILem uma base per-shell ou mesmo per-comando.

Na verdade, desde Git 2.22 (Q2 2019), você tem uma nova opção: Quatro novas variáveis ​​de configuração {author,committer}.{name,email}foram introduzidas para substituir user.{name,email}em casos mais específicos.

Veja o commit 39ab4d0 (04 de fevereiro de 2019) de William Hubbs (``) .
(Incorporado por Junio ​​C Hamano - gitster- no commit 4e021dc , 07 de março de 2019)

config: permite fornecer idents de autor e committer separados

Os author.email, author.name, committer.emaile committer.nameas configurações são análogas às GIT_AUTHOR_*e GIT_COMMITTER_*variáveis de ambiente, mas para o git configsistema.
Isso permite que eles sejam configurados separadamente para cada repositório.

Git oferece suporte à configuração de diferentes informações de autoria e committer com variáveis ​​de ambiente. No entanto, as variáveis ​​de ambiente são definidas no shell, portanto, se diferentes informações de autoria e committer forem necessárias para diferentes repositórios, uma ferramenta externa será necessária.

Isso adiciona suporte para git config para author.email, author.name, committer.emaile committer.name configurações para que essas informações podem ser definidas por repositório.

VonC
fonte