Estou tentando fazer um commit como
git commit --author="John Doe <[email protected]>" -m "<the usual commit message>"
onde John Doe é algum usuário em cujo nome eu quero fazer o commit.
Aparece bem git log
. No entanto, quando eu faço a gitk
, o nome do autor está correto, mas o nome do committer é escolhido nas minhas configurações globais de configuração do git (e, portanto, é definido como meu nome / email).
Questões
Qual é a diferença entre os dois (committer x autor)?
Devo estar definindo o committer também para o outro usuário?
Se sim, como?
git
git-config
gitk
mu 無
fonte
fonte
Respostas:
O pôster original pergunta:
O autor é a pessoa que originalmente escreveu o código. O autor, por outro lado, é considerado a pessoa que cometeu o código em nome do autor original. Isso é importante no Git porque o Git permite reescrever o histórico ou aplicar patches em nome de outra pessoa. O livro Pro Git online GRATUITO explica assim:
O pôster original pergunta:
Não, se você quiser ser honesto, não deve definir o autor como autor, a menos que o autor e o autor sejam realmente a mesma pessoa.
fonte
git config user
e entãogit add
egit commit
, então o git sabe quem adicionou e quem cometeu, mas ainda não sabe quem o escreveu.A lista de discussão +
git format-patch
+git apply
pode gerar author! = CommitterEm projetos como o kernel Linux, onde os patches são:
git format-patch
git send-email
git apply
ougit am
: Como usar o git am para aplicar patches de mensagens de email?gerando um único novo commit com autor e commit diferentes:
Veja, por exemplo, este patch selecionado aleatoriamente e o commit correspondente:
Interfaces da web Git como GitHub e GitLab podem ou não gerar author! = Committer
Como o Git (Hub | Lab) mantém os repositórios upstream e fork na mesma máquina, eles podem fazer automaticamente tudo o que você também pode fazer localmente, incluindo:
Crie uma consolidação de mesclagem.
Não gera autor! = Committer.
Mantém o SHA ou o novo commit intacto e cria um novo commit:
Historicamente, esse foi o primeiro método disponível no GitHub.
Localmente, isso é feito com
git merge --no-ff
.Isso produz duas confirmações por solicitação de recebimento e mantém uma bifurcação no histórico do git.
rebase em cima de
master
O GitHub também corta os commits para definir o commit == quem pressionou o botão de mesclagem. Isso não é obrigatório e nem mesmo é feito por padrão localmente
git rebase
, mas dá responsabilidade ao mantenedor do projeto.A árvore git agora se parece com:
exatamente igual ao dos
git apply
patches de email.No GitHub atualmente:
https://help.github.com/articles/about-merge-methods-on-github/
Como definir o commit de um novo commit?
O melhor que pude encontrar foi usar as variáveis de ambiente para substituir o commit:
Como obter a data do commit e commit de um determinado commit?
Somente os dados do autor são exibidos por padrão em
git log
.Para ver a data do committer, você pode:
formate o log especificamente para isso:
onde
cn
ecd
representamCommitter Name
eCommitter Date
use o
fuller
formato predefinido:Consulte também: Como configurar o 'git log' para mostrar a 'data de confirmação'
vá para baixo nível e mostre todos os dados de confirmação:
Como definir a data do commit de um novo commit?
git commit --date
define apenas a data do autor: para a data do commit, o melhor que pude encontrar foi com a variável de ambiente:Veja também: Qual é a diferença entre autor e committer no Git?
Como o Git armazena o autor x o committer internamente?
Consulte: Qual é o formato do arquivo de um objeto de confirmação git?
Basicamente, o commit é um arquivo de texto e contém dois campos separados por linha:
Isso deixa claro que ambas são duas entradas de dados completamente independentes no objeto de confirmação.
fonte
GIT_COMMITTER_*
substituições, o git ainda se recusará a executar uma confirmação se você não tiver definido um commit padrão usandogit config
.GIT_{COMMITTER,AUTHOR}_EMAIL
@Ciro Santilli propôs usar
Para evitar repetir o nome e o email, você pode reutilizá-los
que primeiro define as variáveis em comandos separados e depois as utiliza para a
git commit
chamada (observe os parênteses duplos).fonte