Resumen:
- Una confirmación está desprotegido: Prueba
git rev-parse HEAD &> /dev/null
- Un ref apuntando a un compromiso existe: Prueba existen
git rev-list -n 1 --all &> /dev/null
- objetos en el repositorio: salida de prueba de
git fsck
, git count-objects
, o examinar los contenidos de .git/objects
¡Y ahora para la discusión!
Si desea saber si una confirmación está desprotegida, puede usar git rev-parse HEAD
. Habrá salida, por lo que probablemente desee redireccionar al /dev/null
y simplemente use el código de salida. Para todos los propósitos prácticos, esto será lo suficientemente bueno: haciendo cosas normales, es prácticamente imposible terminar sin HEAD
apuntando a nada. Pero es posible, por ejemplo, eliminando archivos en el directorio .git. Dependiendo de su secuencia de comandos, esto podría ser importante: si está a punto de arruinar el directorio .git, realmente quiere ser paranoico.
Si desea ver si hay refs en absoluto con commits en ellos, puede usar git rev-list -n 1 --all
. De nuevo, habrá una salida (SHA1 de la primera confirmación encontrada), así que redirija a /dev/null
y verifique el código de salida.
Por último, si desea comprobar si hay confirmaciones, incluso si no están en ningún árbitro (debe intentar Realmente es difícil entrar en este estado) Probablemente solo verifique la presencia de objetos con git fsck
o git count-objects
- o en su defecto, liste .git/objects
y busque cualquier cosa además de info
y pack
(los comandos tienden a fallar si no hay ningún archivo .git/HEAD
). Y sí, podrías tener un repositorio con manchas y árboles, pero sin compromisos, pero tendrías que esforzarte aún más para llegar allí. Estos son los métodos más seguros, si su script es aterrador.
¿Sería necesario algún tipo de registro? –