Estou me perguntando se existe uma maneira de visualizar uma data de push associada a cada commit no log do git. Se isso não for possível, existe uma maneira de ver todos os commits em um determinado push.
Estou escrevendo um programa que precisa manter o controle dos commits conforme eles são enviados. Como o log do git é ordenado pela data do commit, não pela data do push, não consigo ver os commits mais recentes que foram enviados. Por exemplo, se um usuário se compromete em seu repositório local 2 dias antes de enviar para o master, esse commit será colocado após 2 dias de outros commits no log do repositório master.
git reflog --date=local origin/master
(notaorigin/
) para ver a lista de pushes. Caso contrário, apenas commits, checkouts e pulls estavam na lista (o que é útil também). Na verdade, fui apontado para ele pela resposta de @JonathanDay .Git é um sistema de controle de versão distribuído, então você deve definir cuidadosamente o que entende por "data de envio". Por exemplo, suponha que o usuário A envie alguns commits para o repositório do usuário B. Algum ponto depois, o usuário B envia esses mesmos commits para um terceiro repositório. Em qual data você está interessado?
Estou especulando que você tem um repositório compartilhado e deseja que os usuários desse repositório compartilhado possam determinar quando algo foi publicado no repositório. Se isso for verdade, você terá que coletar essas informações no repositório compartilhado.
As más notícias
Infelizmente, não há como acrescentar a data às mensagens de confirmação. Isso mudaria o ID de confirmação (que é um hash SHA1 do conteúdo), causando todos os tipos de problemas.
As boas notícias
Felizmente, o Git tem um recurso (relativamente novo) chamado notas . Este recurso permite que você anexe texto arbitrário aos commits, que
git log
podem ser exibidos. As notas podem ser editadas e compartilhadas com outras pessoas.Você pode usar o recurso de notas para anexar uma mensagem "este commit foi recebido em [data]" a cada commit conforme é recebido pelo repositório compartilhado.
Veja
git help notes
para detalhes.Como registrar a data
Esta é a abordagem que recomendo:
post-receive
gancho em seu repositório compartilhado para percorrer cada commit acessível para cada referência atualizada.Para cada commit, acrescente algo como "[usuário] de [repository_url] adicionou este commit a [ref] em [data]" na nota do commit.
Você pode querer usar um ref de notas dedicado a este propósito (como
refs/notes/received-on
) em vez do padrãorefs/notes/commits
. Isso evitará conflitos com notas criadas para outros fins.receive
gancho para negar atualizações em sua referência de notas (para evitar que os usuários acidentalmente ou propositadamente mexam com as notas).Diga a todos os usuários para executar os seguintes comandos de dentro de sua árvore de trabalho:
Esta etapa é necessária porque o Git ignora referências não ramificadas e não tags nos repositórios upstream por padrão.
O acima pressupõe que as referências são apenas avançadas, nunca excluídas ou atualizadas à força. Você provavelmente vai querer que o
post-receive
gancho também acrescente notas "removidas em [data]" para lidar com esses casos.fonte
Isso parece funcionar muito bem para mim. A data do committer (% cd) é enganosa porque não é necessariamente igual à data de envio. A opção --date = iso, entretanto , produzirá a data de envio / busca .
Observe, se você buscou da origem / master, ele imprimirá a data em que você buscou; NÃO a data em que outra pessoa enviou o commit.
Bônus: você pode, é claro, fazer uma formatação mais bonita. Até agora, gosto deste código de cores. É um pouco demais para digitar. Isso produzirá o SHA em vermelho, o seletor de reflog em ciano e o reflog em verde.
fonte
Dê uma olhada em
git reflog show master
. Provavelmente não é o formato exato que você deseja, mas deve indicar a direção certa.Outra ideia é executar um script dentro de um push hook.
fonte
git reflog show master
? Eu quero ser capaz de ver a data de envio dos commits individuais de cada usuário..git/logs/refs/heads/master
mostra um carimbo de data / hora.git reflog
para esse assunto.Esta resposta sobre a inspeção do reflog no remoto pode ajudar ( https://stackoverflow.com/a/8791295/336905 ), fornecendo informações sobre qual branch foi enviado por push, mesmo que não mostre quais commits foram enviados, mas você poderia fazer uma correlação cruzada encontrando o próximo push após a data de confirmação local. Não é infalível, mas útil se você ainda não implementou a excelente sugestão de notas de @RichardHansen postada anteriormente
fonte
origin/branch
mostrará apenas as mudanças feitas na máquina atual , isto é extremamente útil! Para o uso do dia-a-dia, não quero implementar nenhum gancho, então para uma pergunta simples "Hmmm, quando enviei aquele commit na semana passada?" - funciona muito bem.Você também pode ver a hora de modificação do arquivo do objeto commit no diretório "objects" no repositório git no próprio servidor.
fonte
Por que git AuthorDate é diferente de CommitDate?
AuthorDate
é quando o commit foi criado pela primeira vez.CommitDate
é quando o commit foi modificado pela última vez (por exemplo, rebase).Você pode obtê-los com as
--pretty
opções de formatação:Portanto, se você e outros desenvolvedores estão fazendo isso
git rebase
antesgit push
, você terminará com uma data de confirmação posterior à data do autor .Este comando mostra a data de confirmação:
git log --pretty=fuller
fonte
Acho que você pode usar a próxima notação para obter a data de push: git log -g --date = local
fonte