Cómo funciona git ls-files script

Hows look script que hacer git ls-files ? Es posible reparar el file de índice o extraer la list de files del file de índice corptado? Tal vez sea posible con expresiones regulares? preferiblemente en python 2.7.6

Dependiendo del nivel de corrupción, esto puede o no ser factible. La estructura de datos y las herramientas relacionadas de Git están más en sintonía con la detección de la corrupción que con la reparación.

En particular, el índice en sí mismo no es parte del repository, se deriva de los contenidos actuales, por lo que en la mayoría de los casos probablemente será mejor que lo git reset y lo git reset para volver a crearlo. Quien lea su pregunta probablemente se pregunte cómo su repository entró en ese estado.

Con eso en mente, aquí hay un par de pensamientos:

Los últimos 20 bytes del índice son un sha1 del contenido del file hasta ese punto. Si están corruptos, puedes sobreescribirlos usando un editor hexadecimal.

 ~$ python3 >>> data = open('.git/index', 'rb').read() >>> data[-20:].hex() 'e211d8f60209ca8571c2acc73f9a24ef523b5fa3' >>> hashlib.sha1(data[:-20]).hexdigest() 'e211d8f60209ca8571c2acc73f9a24ef523b5fa3' 

Esto puede corregir la corrupción simple causada por una herramienta dañada por el cerebro.

Si realmente quieres recuperar todo lo que puedas de un file de índice totalmente corrupto, probablemente quieras:

  1. Lea index-format.txt en la implementación de reference.
  2. Mira la rutina parse_index en libgit2 .
  3. Mire el error específico que causa su file de índice.
  4. Con cuidado parchee esa rutina para continuar con los datos incorrectos sin fallar.

Otro enfoque podría ser utilizar la utilidad de cadenas , si solo desea ver una list de nombres de files. Perderá la información binaria relevante (y parte de la información binaria contendrá basura ASCII imprimible).