get hash sin comprometer

Necesito hacer un seguimiento de los datos que está creando una aplicación, de modo que los datos tengan un identificador escrito a su lado, que indique la versión del código del software que la escribió.

Para que esto funcione también en un entorno de desarrollo, está claro que no se realizaría una confirmación de git en cada cambio experimental del software, sino más bien después de que el software modificado ya haya creado los datos .

Entonces, ¿hay alguna manera de get un hash del código sin compromiso?

El aplastamiento y el rebasado, como se menciona aquí, parecen ser un gran potencial para el error manual, y por lo tanto parecen inadecuados.

Puedo tomar mi propio hash como una tarea durante la compilation, pero el beneficio de usar git es que .gitignore ya describe todo lo que se debe excluir de factorizar en un hash de cualquier tipo; describe los límites del proyecto con bastante security. Además de eso, si el proyecto se comete después de que se han creado los datos, el hash git de antes de la confirmación seguirá funcionando en los casos en que no se haya realizado un cambio de código adicional.

¿Existe una manera orderada de get un hash git de un proyecto, o algo similarmente útil, sin un compromiso?

Entonces, ¿hay alguna manera de get un hash del código sin compromiso?

No, porque el time de la confirmación es parte del hash.

Usamos git describe --always --dirty para este propósito. Si el tree de trabajo contiene cambios no confirmados, agregará "-dirty". Si la confirmación actual tiene una label anotada que se usará en lugar del hash.

En general, nuestros scripts de compilation (Makefiles) generan una version.h que contiene esta información. La version.h está en .gitignore y nunca se ha confirmado.

Como señaló Jonathan, necesitas información como la hora de get el hash de confirmación.

Sin embargo, siempre puedes hacer esto para get un hash de confirmación de muestra:

Agrega todos tus files: git add .

Hacer un commit: git commit

Haz lo que sea que mantengas en la contabilidad y quieras hacer con el hash de confirmación:

 git rev-parse HEAD 

Deshágase de la confirmación como si nunca hubiera existido:

 git reset --soft HEAD^ 

Así que estás de vuelta en el lugar original antes de git add el git add . Esta sería probablemente la mejor y más limpia forma de hacerlo. Y ahora también tienes un hash commit aproximado.

Por supuesto. Por lo que tienes organizado es

 git write-tree 

que escupe el hash del contenido y la estructura indexados actualmente, sin marcas de time ni dependencies de posts.

Para un tree ya comprometido es

 git rev-parse $commit^{tree} 

editar: para recuperar directamente el estado a partir de una identificación de tree, haga

 git read-tree -um HEAD $treeid 

y puedes search confirmaciones de ese contenido usando

 git log --all --pretty=format:"%T Commit %H %d %S" \ | grep "^$treeid"