Estoy tratando de excluir un archivo ( db/irrelevant.php
) de un Git diff. He intentado poner un archivo en el db
subdirectorio llamado .gitattributes
con la líneairrelevant.php -diff
y también he intentado crear un archivo llamado que .git/info/attributes
contiene db/irrelevant.php
.
En todos los casos, el db/irrelevant.php
archivo se incluye en el diff como un parche binario Git. Lo que quiero es que los cambios en ese archivo sean ignorados por el comando diff. ¿Qué estoy haciendo mal?
.gitignore
sintaxis del archivo. Por ejemplo, en:!*shrinkwrap.yaml
lugar de:!shrinkwrap.yaml
.git diff -- . ':(exclude)*.min.js' ':(exclude)*.min.css'
git diff -- . ":(exclude)db/irrelevant.php"
(comillas dobles en lugar de comillas simples)git diff -- . :(exclude)db/irrelevant.php
Puede configurar un controlador diff personalizado con un comando no op y asignarlo a aquellos archivos que deben ignorarse.
Cree un controlador diff específico de repositorio con este comando
o para todos tus repositorios con
--global
.(Si
/bin/true
no existe en MacOS, las alternativas estarían usando/usr/bin/true
oecho
).Luego, asigne el nuevo controlador diff a los archivos que desea ignorar en su
.git/info/attributes
archivo.Si se supone que este estado se comparte con otros desarrolladores, puede usarlo en
.gitattributes
lugar de.git/info/attributes
compartir elgit config
comando con sus pares (a través de un archivo de documentación o algo así).fuente
[diff "nodiff"]
`command = / bin / true` y luego creé un archivo llamado .git / info / atributos a los que agregué:irrelevant.php diff=nodiff
git diff --stat
. En ese caso, se podría usargit diff ... | diffstat
como solución alternativa.--no-ext-diff
También puede usar el programa filterdiff de la colección de programas patchutils para excluir algunas partes de un diff. Por ejemplo:
fuente
-p
, desde la página de manual (1), es "-pn, --strip-match = n Al hacer coincidir, ignore los primeros n componentes del nombre de ruta". Me tomó un tiempo detectar que-p 1
estaba quitando ladb
parte del camino del OP. Si solo desea especificar un nombre de archivo e ignorar todas las posibilidades de ruta / directorio, puede usar-p 99
.Este método es más corto que las respuestas aceptadas.
Para obtener más información sobre las diferentes posibilidades de inclusión / exclusión, lea esta otra publicación
fuente
Esta solución de una línea no requiere otras utilidades / descargas:
¿Dónde
file/to/exclude.txt
está el nombre del archivo que desea excluir, por supuesto?Editar: crédito ksenzee para corregir archivos eliminados que rompen la diferencia.
fuente
git diff --stat master
sin mucho éxito, ¿podría ayudarme?Muy buena respuesta de KurzedMetal para lo que necesitaba hacer, que era la capacidad de ver que el archivo había cambiado, pero no generar la diferencia, que podría haber sido enorme, en mi caso.
Pero un colega mío sugirió un enfoque que era aún más simple y funcionó para mí:
agregar el
.gitattributes
archivo en el directorio donde reside el archivo que se ignorarágit diff
con el siguiente contenido:file-not-to-diff.bin -diff
Eso todavía permite
git status
"ver" si el archivo cambió.git diff
también "verá" que el archivo ha cambiado, pero no generará eldiff
.Esa
.bin
extensión para el archivo en el ejemplo fue deliberada. Me doy cuenta de que este es el comportamiento predeterminado de git para archivos binarios, y no requiere un manejo especial con.gitattributes
. Pero en mi caso, estos archivos fueron reconocidos como archivos de texto por git y la utilidad "archivo" y esto hizo el truco.fuente
Respuesta más simple
git diff ':!db/irrelevant.php'
Es justo
':!<path to file>'
después de su comando diff. El comando diff puede ser tan complicado como desee, y puede usar comodines como*.min.js
o agregar múltiples exclusiones (separe los bloques entre comillas) si lo desea.fuente
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
O suelte un pequeño script para sus archivos de puntos
Tales como
.bash_profile
o.zshrc
fuente
git diff --staged
Espero que esto te ayude.Es muy simple, puede excluir lo que quiera con los comandos estándar de Unix, esos comandos están disponibles en git bash incluso en el entorno de Windows. El siguiente ejemplo muestra cómo excluir diff para archivos pom.xml, primero verifique diff to master solo para los nombres de archivo, luego use 'grep -v' excluir archivos que no desea y luego vuelva a ejecutar diff to master con la lista preparada:
fuente
similar a la solución de Ben Roux , pero compartiendo de todos modos:
o, si los cambios ya se han comprometido localmente:
Ejemplos:
fuente
Hago lo siguiente:
Sé que no es una solución elegante y, a veces, no se puede usar (por ejemplo, si ya tiene cosas preparadas), pero funciona sin tener que escribir un comando complicado
fuente
Si desea hacer esto solo para inspeccionar visualmente la diferencia, una herramienta de diferencia visual (como Meld ) le permitirá hacerlo con un comando breve que es fácil de recordar.
Primero, configure una herramienta de diferencias si aún no lo ha hecho.
Luego, puede ejecutar un directorio diff.
Podrá navegar por diferencias (por archivo) en Meld (o su herramienta de elección). Simplemente no abra el archivo que desea ignorar.
fuente