A lista de discussão + git format-patch
+ git apply
pode gerar author! = Committer
Em projetos como o kernel Linux, onde os patches são:
gerando um único novo commit com autor e commit diferentes:
- o autor é quem escreveu o patch
- o responsável é quem é o mantenedor do projeto e quem mesclou o patch
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:
* Merge commit (committer == author == project maintainer)
|\
| * Feature commit (committer == author == contributor)
|/
* Old master (random committer and author)
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:
* Feature commit (committer == maintainer, author == contributor)
|
* Old master (random committer and author)
exatamente igual ao dos git apply
patches de email.
No GitHub atualmente:
- você escolhe o método ao mesclar através da lista suspensa no botão mesclar
- métodos podem ser ativados ou desativados nas configurações de recompra pelo proprietário
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:
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
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:
git log --pretty='%cn %cd' -n1 HEAD
onde cn
e cd
representam Committer Name
eCommitter Date
use o fuller
formato predefinido:
git log --format=fuller
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:
git cat-file -p HEAD
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:
GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'
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:
author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}
Isso deixa claro que ambas são duas entradas de dados completamente independentes no objeto de confirmação.