¿Cómo se quita archivos diciendo “viejo modo de 100755 100644 nuevo modo” de los cambios en unstaged Git?

StackOverflow https://stackoverflow.com/questions/1257592

  •  12-09-2019
  •  | 
  •  

Pregunta

Por alguna razón, cuando al principio me hice un tirón desde el repositorio git para un proyecto de la mina, Tengo un montón de archivos en mi copia de trabajo que no tienen cambios discernibles que se les hagan, pero siguen apareciendo en mi área unstaged changes.

Estoy usando Git Gui en Windows XP, y cuando ir a buscar en el archivo para ver qué ha cambiado. Todo lo que veo es:

old mode 100755  
new mode 100644  

¿Alguien sabe lo que esto significa?

¿Cómo puedo obtener estos archivos fuera de mi lista de cambios unstaged? (Muy molesto tener que pasar por 100 de los archivos, sólo para escoger los archivos que he editado recientemente y quiere comprometerse).

¿Fue útil?

Solución

Eso se parece a los permisos de archivo UNIX modos a mí (755 = rwxr-xr-x, 644 = rw-r--r--) -. El modo antiguo incluido la bandera x (ejecutable) +, el nuevo modo no

respuestas de esta edición msysgit propone la creación core.filemode en false en el fin de deshacerse del problema:

git config core.filemode false

Otros consejos

Configuración core.filemode en false funciona, pero asegúrese de que los ajustes en ~/.gitconfig no están siendo anulados por los de .git/config.

Me he encontrado con este problema al copiar un repositorio git con archivos de trabajo de un viejo disco duro un par de veces. El problema se deriva del hecho de que el propietario y permisos cambiados de la unidad antigua / máquina para el nuevo. El largo y corto de él es, ejecute los siguientes comandos para enderezar las cosas ( gracias a esta respuesta superusuario ):

sudo chmod -R -x . # remove the executable bit from all files

El ex comando realmente resolver las diferencias que informaron git diff, pero revocará su capacidad de enumerar los directorios, por lo ls ./ falla con ls: .: Permission denied. Para corregir esto:

sudo chmod -R +X . # add the executable bit only for directories

La mala noticia es que si usted tiene los archivos que desea mantener ejecutable, tales como scripts .sh, tendrá que volver a ellos. Puede hacerlo con el siguiente comando para cada archivo:

chmod +x ./build.sh # where build.sh is the file you want to make executable again

Parece que han cambiado algunos permisos del directorio. Hice los siguientes pasos para restaurarlo.

$  git diff > backup-diff.txt                ### in case you have some other code changes 

$  git checkout .

Usted podría intentar git reset CABEZA --hard para restablecer el repositorio al estado predeterminado esperado.

Esto sucede cuando se tire y todos los archivos eran ejecutable en el repositorio remoto. Haciéndolos ejecutable volverán a poner todo de vuelta a la normalidad de nuevo.

chmod +x <yourfile> //For one file
chmod +x folder/* // For files in a folder

Es posible que tenga que ver:

chmod -x <file> // Removes execute bit

En cambio, para los archivos que no se ha establecido como ejecutable y que fue cambiado debido a la operación anterior. Hay una mejor manera de hacer esto, pero esto es sólo una solución muy rápida y sucia.

Me he enfrentado a la misma cuestión. Y esto a salvar mi vida: https://gist.github.com/jtdp/5443498

git diff -p -R --no-color \ | grep -E "^(diff|(old|new) mode)" --color=never \ | git apply

Por lo general ocurre cuando se clona el repositorio entre Windows y Linux / Unix.

Sólo decirle a Git que ignore el cambio fileMode, aquí hay varias maneras:

  1. Config SOLO para repo actual:

    git config core.filemode false
    
  2. Configuración global:

    git config --global core.filemode false
    
  3. Añadir en ~ / .gitconfig:

    [core]
         filemode = false
    

Sólo tienes que seleccionar uno de ellos.

Yo tenía sólo el archivo problemático con los permisos modificados. Para rodar de nuevo de forma individual, que acaba de eliminar de forma manual con rm <file> y luego hice una obtención para tirar de una nueva copia.

Por suerte no había montado todavía.

Si tuviera que podría haber corrido git reset -- <file> antes de ejecutar git checkout -- <file>

Me acabo de encontrar con este problema cuando se diferencia mi rama con maestría. Git devolvió un error 'modo' cuando esperaba mi sucursal sea idéntica a dominar. Me fijo eliminando el archivo y luego la fusión de maestro de nuevo.

En primer lugar me corrió el diff:

git checkout my-branch
git diff master

Esto volvió:

diff --git a/bin/script.sh b/bin/script.sh
old mode 100755
new mode 100644

Entonces encontré lo siguiente para corregir:

rm bin/script.sh
git merge -X theirs master

Después de esto, no hay ningún git diff diferencias entre mi-sucursal y maestro.

Puede utilizar el siguiente comando para cambiar el modo de archivo de nuevo. git add --chmod=+x -- filename A continuación, se comprometan a la rama.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top