¿Cómo 'git diff' en cierto directorio?

132

git diffen realidad ejecuta un diff en todo el código fuente. ¿Cómo hago esto en un directorio determinado, para que pueda ver las modificaciones en los archivos debajo de él?

priya
fuente
2
stackoverflow.com/a/12123669/1815624 git diff master..yourbranch path/to/folder
CrandellWS

Respuestas:

125

Proporcione una ruta (myfolder en este caso) y simplemente ejecute:

git diff myfolder/
Geo
fuente
28
Me gustaría usar git diff -- myfolderpara minimizar la ambigüedad de git. La notación general para git diff (y muchos comandos de git) es git diff [commit-ish] -- [path]donde commit-ish se establece de forma predeterminada en HEAD (donde se encuentra ahora) y [path]en el directorio raíz de git, pero puede ser cualquier cosa relativa a su directorio actual. Sin el --, git adivinará a qué te refieres, [commit-ish]o [path]. En algunos casos, esto hace que git diga que la notación es "ambigua". Si recuerdo correctamente.
L0LN1NJ4
2
Esto no imprime nada cuando intento el método en la respuesta y el método en el comentario.
Ray
@ray, lo que significa que no tiene diferencias entre el árbol de trabajo y la última confirmación
valerij vasilcenko
3
Para @ray y las personas futuras que vean esto, puede incluir las ramas en las que intenta diferenciar, git diff master..develop myfolder/como dijo @CrandellWS en el comentario sobre la pregunta original. El estado de Git le mostrará cambios si eso es lo que está buscando.
BVBA acelere el
2
@ray asegúrese de estar en el directorio raíz. La ruta será relativa a su directorio actual.
Nickofthyme
59

Si está comparando diferentes ramas, debe usar --para separar una revisión de Git de una ruta del sistema de archivos. Por ejemplo, con dos sucursales locales mastery bryan-working:

$ git diff master -- AFolderOfCode/ bryan-working -- AFolderOfCode/

O desde una sucursal local a una remota:

$ git diff master -- AFolderOfCode/ origin/master -- AFolderOfCode/
bcattle
fuente
29
Solo se necesita una cláusula después de enumerar ambas ramas, como en: git diff branch1 branch2 - ruta / a / dir
emery
4

Debes acostumbrarte a mirar la documentación para cosas como esta. Es muy útil y mejorará tus habilidades muy rápidamente. Aquí está la parte relevante cuando lo hacesgit help diff

   git diff [options] [--no-index] [--] <path> <path>

Los dos <path>s son lo que necesita cambiar a los directorios en cuestión.

Noufal Ibrahim
fuente
3

Agrega Beyond Compare como tu difftool en Git y agrega un alias para diffdir como:

git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"

Obtenga el gitdiff como:

git diffdir 4bc7ba80edf6  7f566710c7

Referencia: Comparar directorios completos con git difftool + Beyond Compare

Barani
fuente
1
El signo igual parece estar equivocado para git 2.17.1. Usar en su git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"lugar
Mark Schäfer
Tenga en cuenta que cuando use Beyond Compare para dir diff, debe configurarlo para seguir enlaces simbólicos (en una vista de comparación de carpetas -> Reglas (icono de árbitro) -> Manejo -> seguir enlaces simbólicos) O, agregue la --no-symlinksopción para que el comando leagit difftool --dir-diff --no-symlinks
Ashutosh Jindal
1

No solo puede agregar una ruta, sino que puede agregar git diff --relativepara obtener resultados relativos a esa carpeta.

git -C a/folder diff --relative

Y con Git 2.28 (Q3 2020), los comandos en la " diff" familia aprendieron a honrar la " diff.relative" variable de configuración.

Ver commit c28ded8 (22 de mayo de 2020) por Laurent Arnoud ( spk) .
(Fusión por Junio ​​C Hamano - gitster- en commit e34df9a , 02 jun 2020)

diff: agregar la opción de configuración relative

Firmado por: Laurent Arnoud
Acked by: Đoàn Trần Công Danh

La diff.relativeopción booleana establecida en truemuestra solo cambios en el directorio / valor actual especificado por el pathargumento de la relativeopción y muestra los nombres de ruta relativos al directorio mencionado anteriormente.

Enseñar --no-relativea anular antes--relative

Agregue para la documentación de opciones git-format-patch (1) --relativey--no-relative

La documentación ahora incluye :

diff.relative:

Si se establece en ' true', ' git diff' no muestra los cambios fuera del directorio y no muestra los nombres de ruta relativos al directorio actual.

VonC
fuente
0

Si desea excluir los subdirectorios, puede usar

git diff <ref1>..<ref2> -- $(git diff <ref1>..<ref2> --name-only | grep -v /)
Salvian Reynaldi
fuente
0

Para utilizar Beyond Compare como difftool para el directorio diff, recuerde habilitar los enlaces simbólicos siguientes de la siguiente manera:

En una Vista de comparación de carpetasReglas (icono de árbitro):

Ingrese la descripción de la imagen aquí

Y luego, habilite los siguientes enlaces simbólicos y actualice los valores predeterminados de la sesión:

Ingrese la descripción de la imagen aquí


O,

configura el alias así:

git config --global alias.diffdir "difftool --dir-diff --tool=bc3 --no-prompt --no-symlinks"

Tenga en cuenta que, en cualquier caso, se conservan todas las ediciones realizadas al lado (izquierda o derecha) que se refieren al árbol de trabajo actual.

Ashutosh Jindal
fuente