Me pregunto cómo puedo excluir un directorio completo de mi Git diff. (En este caso / especificación). Estoy creando un diff para toda nuestra versión de software usando el comando git diff. Sin embargo, los cambios en las especificaciones son irrelevantes para este procedimiento y solo crean dolores de cabeza. ahora sé que puedo hacer
git diff previous_release..current_release app/
Esto crearía una diferencia para todos los cambios en el directorio de la aplicación, pero no, por ejemplo, en el directorio lib /. ¿Alguien sabe cómo realizar esta tarea? ¡Gracias!
Editar: solo quiero ser claro, sé que puedo encadenar los parámetros de todos mis directorios al final, menos / espec. Esperaba que hubiera una manera de excluir verdaderamente un solo directorio en el comando.

Respuestas:
Suponiendo que usa bash, y ha habilitado globbing extendido (
shopt -s extglob), podría manejar eso desde el lado de la carcasa:Le ahorra tener que enumerar todas las demás cosas.
O agnóstico de concha:
Podría resumirlo en un script de shell de una línea para evitar tener que volver a escribir los argumentos.
fuente
.!(.|)comience con un.además.y...--que acabo de agregar debería arreglar eso.--name-onlyal final.-- path/of/new/filey lo resolverá :)Según esta respuesta , también puede usar:
Esta es una nueva característica de git que permite excluir ciertos caminos. Debería ser más confiable que varios forros de revestimiento.
Estoy publicando esto aquí porque esta pregunta sigue siendo el éxito número 1 para "git diff exclude path".
fuente
git diff previous_release current_release --name-status -- . ':!spec'current_releaseyprevious_releaseme hizo sonreír cuando lo descubrí.git diff --stat dev -- . ':!/Mopy/Docs/*'. Lo que no funcionó para mígit diff dev --stat -- . ':!('Mopy/Docs/Wrye Bash General Readme.html'|'Mopy/Docs/Wrye Bash Advanced Readme.html')'y las variacionesgit diff --check -- . ':!config/database.yml'git diff previous_release current_release -- . ':!file_a' ':!file_b'Si desea especificar más de una ruta para excluir en un git diff, simplemente agregue parámetros de exclusión adicionales al final, por ejemplo, para excluir todo de los directorios de proveedores y bin de las estadísticas: -
fuente
Puede probar y deshabilitar el atributo diff para cualquier archivo dentro del directorio lib.
.gitattributes:racl101 agrega en los comentarios :
fuente
.gitattributesarchivo en una rama especial hecha solo para este tipo de 'release' diff;) Rebase esa rama especial encimacurrent_releasey haga su diff desde allí._site/* -diffGit diff ahora acepta un formato de exclusión personalizado:
git diff -- ':(exclude)lib/*'Tenga cuidado si tiene muchos nombres de carpetas repetitivos ('/ app', '/ lib', etc.), ya que esto excluirá los archivos relativos al directorio de trabajo actual Y al directorio raíz de git.
fuente
git diff -- . ':(exclude)lib/*'?git difftodo lo relacionado con su ruta actual, en lugar de exigirgit diff -- .git diff -- ":(exclude)lib/*"Relativo al directorio raíz de git
git diffacepta una exclusión opcionalEs posible que desee agregar algunos comodines
Dirigirse a tipos de archivos específicos
Algún azúcar sintáctico aplicado
O suelte un pequeño script para sus archivos de puntos
Tales como
.bash_profileo.zshrcfuente
fuente