Me pregunto si hay una forma de ver una fecha de inserción asociada con cada confirmación en el registro de git. Si eso no es posible, ¿hay alguna manera de ver todas las confirmaciones bajo un cierto impulso?
Estoy escribiendo un programa que necesita realizar un seguimiento de las confirmaciones a medida que se envían. Debido a que el registro de git está ordenado por la fecha de confirmación, no por la fecha de envío, no puedo ver las confirmaciones más recientes que se envían. Por ejemplo, si un usuario se compromete con su repositorio local 2 días antes de enviar al maestro, esa confirmación se colocará 2 días después de otras confirmaciones en el registro del repositorio maestro.
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 .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:
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 predeterminadarefs/notes/commits
. Esto evitará conflictos con notas creadas para otros fines.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:
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.fuente
Esto parece funcionar bastante bien para mí. La fecha de confirmación (% cd) es engañosa porque no es necesariamente la misma que la fecha de envío. La opción --date = iso, sin embargo, generará la fecha de inserción / recuperación .
Tenga en cuenta que si lo obtuvo de origen / maestro, se imprimirá la fecha en que lo obtuvo; NO la fecha en que alguien más presionó el compromiso.
Bono: por supuesto, puede hacer un formateo más bonito. Hasta ahora, me gusta este código de colores. Sin embargo, es un poco demasiado para escribir. Esto hará que el SHA se vuelva rojo, el selector de reenganche a cian y el reenganche sujeto a verde.
fuente
Échale un vistazo
git reflog show master
. Probablemente no sea el formato exacto que desea, pero debería apuntarle en la dirección correcta.Otra idea es ejecutar un script dentro de un push hook.
fuente
git reflog show master
? Quiero poder ver la fecha de envío de las confirmaciones individuales de cada usuario..git/logs/refs/heads/master
muestra una marca de tiempo.git reflog
con el asunto.Esta respuesta con respecto a la inspección del reflog en el control remoto podría ayudar ( https://stackoverflow.com/a/8791295/336905 ) al brindarle información sobre qué rama se empujó incluso a través de ella, no muestra qué confirmaciones se enviaron, pero usted podría correlacionarse encontrando el siguiente impulso después de la fecha de confirmación local. No infalible, pero útil si aún no ha implementado la excelente sugerencia de notas de @RichardHansen publicada anteriormente
fuente
origin/branch
solo mostrará los cambios realizados en la máquina actual , ¡esto es extremadamente útil! Para el uso diario, no quiero implementar ningún gancho, así que para una simple pregunta "Hmmm, ¿cuándo presioné ese compromiso la semana pasada?" - funciona muy bien.También puede consultar la hora de modificación del archivo del objeto de confirmación en el directorio "objetos" del repositorio git del servidor.
fuente
¿Por qué git AuthorDate es diferente de CommitDate?
AuthorDate
es cuando se creó la confirmación por primera vez.CommitDate
es cuando la confirmación se modificó por última vez (por ejemplo, rebase).Puede obtenerlos con las
--pretty
opciones de formato:Entonces, si usted y otros desarrolladores lo están haciendo
git rebase
antesgit push
, terminarán con una fecha de confirmación posterior a la fecha del autor .Este comando muestra la fecha de confirmación:
git log --pretty=fuller
fuente
Supongo que puede usar la siguiente notación para obtener la fecha de inserción: git log -g --date = local
fuente