2010-07-20 26 views
52

Cambio de forma involuntaria los permisos de todo mi árbol y confirmo ese cambio solo con otros cambios de contenido.¿Puedo hacer que git diff ignore los cambios de permisos?

que usar algo como:

tar -czf deploy.tar git diff --name-only v1 v2

para generar un alquitrán con los archivos modificados entre dos etiquetas, el problema es que ahora, debido a los permisos de cambio casi toda mi árbol aparece como modificado.

¿Hay alguna manera de decir git diff para ignorar aquellos archivos que solo tienen los permisos modificados?

+3

posible duplicado de [¿Cómo hago que git ignore los cambios de modo (chmod)?] (Http://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod) – Leonel

Respuesta

115

Esto le dirá git ignorar permisos:

git config core.filemode false 
+2

Tal vez esto podría evitar agregar archivos con permisos modificados a una confirmación, pero en mi caso los archivos se confirman, presionan y etiquetan, y el comando que propones no me sirve. Supongo que tendré que hacer algún tipo de script bash para analizar la salida de git diff para eliminar las líneas sobre los cambios de modo y enviar el resultado a tar. Cualquier idea es más que bienvenida – Cesar

+0

@Cesar: el comando le dice a git que ignore las diferencias de permisos entre el índice y la copia de trabajo. ¿No es eso lo que quieres? –

+0

soy nuevo en git, pero el problema es que las diferencias son entre commits. Cuando hago git diff tag1 tag2, muestra todos los archivos a los que cambié los permisos además de los archivos con contenido modificado, solo quiero encontrar una manera de ignorar todos esos 'modos de cambio 664 => 775', espero haber hecho yo mismo claro – Cesar

9

he tenido este problema después de retirar intencionadamente el permiso de ejecución de archivos de código fuente de archivos (~ 26K). Entonces, ¡git diff dice que todos los archivos han cambiado! La respuesta con core.filemode no me ayuda, ya que eso solo afecta a los diffs frente a su directorio de trabajo, no diffs contra 2 commits en el repositorio.

La respuesta fue utilizar el comando (grande miedo) filter-branch. En particular, todo lo que necesita escribir es:

git filter-branch -f --tree-filter 'find * -type f | xargs chmod 644 ' -- --all 

desde la raíz de su directorio de trabajo. Por supuesto, asegúrese de hacer una copia de su repositorio primero (cp -pr ~/repo.git ~/repo-orig.git o similar), en caso de que necesite volver a intentarlo.

¡Disfrútalo!

+1

Interesante (+1). Lo he incluido en mi respuesta en http://stackoverflow.com/a/12979453/6309 (ya que su propia respuesta fue eliminada) – VonC

Cuestiones relacionadas