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:
- Modifique o
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ão refs/notes/commits
. Isso evitará conflitos com notas criadas para outros fins.
- Modifique seu
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:
# Fetch all notes from the shared repository.
# Assumes the shared repository remote is named 'origin'.
git config --add remote.origin.fetch '+refs/notes/*:refs/remote-notes/origin/*'
# Show all notes from the shared repository when running 'git log'
git config --add notes.displayRef 'refs/remote-notes/origin/*'
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.
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 .