Git es un sistema de control de versiones distribuido, por lo que debe definir cuidadosamente lo que quiere decir con "fecha de envío". Por ejemplo, supongamos que el usuario A envía algunas confirmaciones al repositorio del usuario B. Algún momento después, el usuario B envía esas mismas confirmaciones a un tercer repositorio. ¿Qué fecha te interesa?
Estoy especulando que tienes un repositorio compartido y quieres que los usuarios de ese repositorio compartido puedan determinar cuándo se publicó algo en el repositorio. Si eso es cierto, deberá recopilar esa información en el repositorio compartido.
Las malas noticias
Desafortunadamente, no hay forma de agregar la fecha a los mensajes de confirmación. Eso cambiaría el ID de confirmación (que es un hash SHA1 del contenido), causando todo tipo de problemas.
Las buenas noticias
Afortunadamente, Git tiene una característica (relativamente nueva) llamada notas . Esta función le permite adjuntar texto arbitrario a las confirmaciones, que se git log
pueden mostrar. Las notas se pueden editar y compartir con otros.
Puede utilizar la función de notas para adjuntar un mensaje de "esta confirmación se recibió el [fecha]" a cada confirmación tal como la recibe el repositorio compartido.
Consulte git help notes
para obtener más detalles.
Cómo registrar la fecha
Este es el enfoque que recomiendo:
- Modifique el
post-receive
enlace en su repositorio compartido para recorrer cada nueva confirmación accesible para cada referencia actualizada.
Para cada confirmación, agregue algo como "[usuario] de [repository_url] agregó esta confirmación a [ref] el [fecha]" a la nota de la confirmación.
Es posible que desee utilizar una referencia de notas dedicada a este propósito (como refs/notes/received-on
) en lugar de la predeterminada refs/notes/commits
. Esto evitará conflictos con notas creadas para otros fines.
- Modifique su
receive
gancho para denegar actualizaciones a la referencia de sus notas (para evitar que los usuarios jueguen accidentalmente o intencionalmente con las notas).
Diga a todos los usuarios que ejecuten los siguientes comandos desde dentro de su árbol de trabajo:
# 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/*'
Este paso es necesario porque Git ignora las referencias que no son ramas ni etiquetas en los repositorios ascendentes de forma predeterminada.
Lo anterior asume que las referencias solo son avanzadas, nunca se eliminan o se actualizan a la fuerza. Probablemente desee que el post-receive
gancho también agregue notas de "eliminado el [fecha]" para manejar estos casos.
git reflog --date=local origin/master
(notaorigin/
) para ver la lista de empujes. De lo contrario, solo las confirmaciones, las cajas y las extracciones estaban en la lista (lo que también es útil). En realidad, me lo señaló la respuesta de @ JonathanDay .