2012-07-22 17 views
5

Mi configuración git tiene un repositorio central al que presiono. Hoy decidí mirar el repositorio central usando Git Extensions, y decía que el repositorio no tiene confirmaciones (casi como si el repositorio nunca se hubiera creado). La investigación de este problema, he intentado clonar el repositorio, y me dio algunos errores extraños que nunca he visto:Error de Git "índice no monotónico"

error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index .git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
fatal: unable to read tree cc90183a1571664f80712c0376f59afeb681303f 

he buscado de Google sobre este tema, y ​​también hay otra pregunta sobre StackOverlow con respecto a este tema, pero permanece sin respuesta (this question). ¿Alguien capaz de arrojar luz sobre este tema? Gracias

Respuesta

5

(no es una respuesta completa, pero al menos algunas pistas, y una solución)

Ese mensaje de error proviene de la sha1_file.c, method check_packed_git_idx(),

nr = 0; 
index = idx_map; 
if (version > 1) 
    index += 2; /* skip index header */ 
for (i = 0; i < 256; i++) { 
    uint32_t n = ntohl(index[i]); 
    if (n < nr) { 
    munmap(idx_map, idx_size); 
    return error("non-monotonic index %s", path); 
    } 
    nr = n; 
} 

con ntohl function being:

El La función ntohl convierte un u_long del orden de red TCP/IP al orden de bytes del host (que es little-endian en los procesadores Intel).

La función ntohl devuelve el valor proporcionado en el parámetro netlong con el orden de bytes invertido. Si netlong ya está en orden de bytes de host, esta función lo invertirá. Depende de la aplicación determinar si el orden de bytes debe invertirse.

La función ntohl tiene un número de 32 bits orden de bytes de red TCP/IP (la familia AF_INET o AF_INET6 dirección) y devuelve un número de 32 bits en el orden de bytes.

es llamado por:

ver la estructura de un archivo de paquete en la pregunta SO "Is the git binary diff algorithm (delta storage) standardized?":

pack file structure

El primero también se llama por builtin/fsck.c, por lo que puede probar un git fsck --full --progress, para comprobar si tiene un local corrupción de los archivos del paquete, o si en realidad es un control remoto problema de repositorio
Asegúrate de que puedes replicar el problema en diferentes sistemas operativos y/o versiones diferentes de Git.

La solución habitual, por un acuerdo de recompra (aquí "Netduino"), que parece estar en forma de horquilla alrededor en GitHub, es:

  • clon de otro tenedor,
  • restaurar la propia modificación local de la corrupta repo, añadirlos y comprometerlos
  • push --force vuelta a su propio tenedor, con el fin de borrar/restablecer la historia remota por uno con puede ser embalado correctamente
+0

Cuando dices clonar otro tenedor, ¿es eso lo mismo que clonar el repositorio? Obtengo estos errores anteriores cuando trato de clonar el repositorio. Y en el paso 2, restaurar mis modificaciones locales sería simplemente "Restaurar cambios de archivos" en las extensiones de Git? Gracias – Anshul

+0

@Anshul Su repositorio ha sido copiado (ahorquillado) varias veces en Github. Intente clonar uno de esos otros repositorios y vea si el problema persiste. – VonC

+0

No estoy usando GitHub, todo esto está en mi computadora personal. Entonces, si te entiendo correctamente, debería tomar una copia de uno de mis otros repositorios y solo usar eso. Básicamente, elimine mi viejo repositorio roto y reemplácelo por uno nuevo clonado. Gracias – Anshul

4

yo estaba de búsqueda para obtener información en este tipo de error no monolítico y encontró este enlace: http://git.661346.n2.nabble.com/Error-non-monotonic-index-after-failed-recursive-quot-sed-quot-command-td7575014.html

TL; DR: elimina el índice no monolítico y luego lo reindexa. En Linux sería:

> rm .git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx 
> git index-pack .git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.pack 

Después de esto tuve que correr un poco git gc --prune=now y git remote prune origin, pero yo había hecho algunas otras operaciones antes, así que puede haber echado a perder mi repo.

Cuestiones relacionadas