Pregunta Excluyendo archivos de git-diff


Estoy siguiendo un proyecto con git. Hay algunos archivos de proyecto de Xcode en la copia de trabajo que quiero seguir, pero no quiero verlos en diffs, porque siempre hay docenas de líneas cambiadas que nunca me interesan. ¿Hay alguna manera simple de tener git-diff ¿omita estos archivos? Intenté configurar una herramienta personalizada diff "silenciosa":

$ cat .gitattributes
Project.xcodeproj / * diff = nodiff

$ cat ~ / .gitconfig
[diff "nodiff"]
    command = / bin / true

Pero:

$ git diff
la diferencia externa murió, deteniéndose en Project.xcodeproj / zoul.mode1v3.

¿Qué estoy haciendo mal?


57
2018-06-19 07:47


origen


Respuestas:


El problema es ese /bin/true regresará inmediatamente sin leer su entrada. git diff por lo tanto, piensa, bastante razonablemente, que ha muerto prematuramente.

Lo que realmente quieres hacer es desarmar el atributo diff, no establecerlo en un comando falso. Prueba esto en tu .gitattributes:

Project.xcodeproj/* -diff

80
2018-06-19 12:23



Puedes usar un alias en tu .git / config

[alias]
        mydiff = !git diff | filterdiff -x "*/Project.xcodeproj/*"

Necesitas filterdiff (de patchutils) para este truco.

sudo apt-get install patchutils

Aún así, la diferencia no es perfecta, deja algo de basura:

yannick@yannick-desktop:~/git-filter-test$ git mydiff
diff --git a/Project.xcodeproj/dummy.txt b/Project.xcodeproj/dummy.txt
index 3e1f9e6..89dfed9 100644
diff --git a/dummy2.txt b/dummy2.txt
index 91966ce..d9588a9 100644
--- a/titi.txt
+++ b/titi.txt
@@ -1,3 +1,3 @@
 aaaaaaaaaa
-bbbbbbbbb
 cccccc
+ddd

7
2018-06-19 08:57



Otra solución que produce resultados limpios sin herramientas externas (agregar a .git/config)

[alias]
    mydiff = !git diff -- $(git diff --name-only | grep -Ev "Project.xcodeproj/")

Luego ejecútalo con:

git mydiff

Tenga en cuenta que git diff --name-only es mejor que git ls-files porque pasará una lista más corta de archivos para git diff, ya que solo se incluirán los archivos modificados. Me he encontrado con problemas al exceder la cantidad máxima de argumentos en proyectos grandes cuando uso git ls-files.


7
2017-07-26 20:58



Solo en caso de que alguien más tenga el mismo dolor que tuvimos. Queríamos excluir un archivo que ya se había comprometido.

Esta publicación fue mucho más útil: trabajando con .git / info / exclude demasiado tarde

Específicamente lo que necesita para ignorar un archivo es usar el comando git remove Ver git rm (http://www.kernel.org/pub/software/scm/git/docs/git-rm.html)

lo prueba yendo

git rm --dry-run *.log
(si dice que quería excluir todos los archivos de registro)

esto dará salida a lo sería excluido si lo ejecutó.

entonces

lo ejecuta yendo

git rm *.log
(o la ruta / expresión de nombre de archivo que desee)


0