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-only
al final.-- path/of/new/file
y 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_release
yprevious_release
me 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
.gitattributes
archivo en una rama especial hecha solo para este tipo de 'release' diff;) Rebase esa rama especial encimacurrent_release
y haga su diff desde allí._site/* -diff
Git 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 diff
todo lo relacionado con su ruta actual, en lugar de exigirgit diff -- .
git diff -- ":(exclude)lib/*"
Relativo al directorio raíz de git
git diff
acepta 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_profile
o.zshrc
fuente
fuente