2012-06-13 10 views
8

¿Cómo puedo saber qué versión estaba presente en un repositorio de git en un momento dado?git inspeccionar el tiempo en el que se pulsó commit

Digamos que tengo un repositorio compartido en el que varios usuarios pueden enviar cambios, y quiero congelar una instantánea a las 12:00 en un día determinado en el pasado.

Si alguien realiza una confirmación local a las 11:30, pero solo la envía al repositorio central a las 12:30, ¿puedo detectarla más tarde?

¿Puedo detectar si alguien que actúa después de las 12:00 ha adulterado una confirmación local para tener una fecha de confirmación grabada de 11:30, y luego empujó esa corriente ascendente?

Respuesta

10

Git no rastrea esta información, pero pude ver la marca de tiempo de creación del archivo en el archivo de objeto de confirmación en el directorio "objetos" en el repositorio de git en el servidor mismo.

1

Puede usar un gancho, probablemente el post-receive hook para almacenar la información requerida en algún lugar usted mismo, o simplemente habilitar el reflog (está deshabilitado por defecto en un repositorio simple). El reflog automáticamente hace un seguimiento del historial local de una sucursal, y por ejemplo. git reflog -1 --format=%H [email protected]{12:00} le dirá a qué compromiso se refirió el maestro ref a las 12:00.

Tenga en cuenta que el reflog caduca, puede configurar el tiempo de caducidad con gc.reflogexpire.

2

git no se registra cuando las cosas se envían a un repositorio (o se buscan), solo las dos marcas de tiempo se comprometen, así que no creo que haya una manera confiable de hacerlo sin escribir anzuelos que almacene metadatos adicionales en alguna parte para usted, o confiando en el registro hecho por git-daemon, ssh o su servidor http, dependiendo de qué método se use para enviar/recuperar.