Jak mogę „git diff” w określonym katalogu?

132

git difffaktycznie uruchamia różnicę dla całego kodu źródłowego. Jak to zrobić w określonym katalogu, aby móc przeglądać modyfikacje plików znajdujących się pod nim?

priya
źródło
2
stackoverflow.com/a/12123669/1815624 git diff master..yourbranch path/to/folder
CrandellWS

Odpowiedzi:

126

Podaj ścieżkę (w tym przypadku myfolder) i uruchom:

git diff myfolder/
Geo
źródło
28
Chciałbym użyć, git diff -- myfolderaby zminimalizować niejednoznaczność w git. Ogólna notacja dla git diff (i wielu poleceń git) jest taka, git diff [commit-ish] -- [path]że commit-ish domyślnie przyjmuje wartość HEAD (gdzie jesteś teraz) i [path]domyślnie jest to katalog główny git, ale może być dowolną wartością w stosunku do twojego bieżącego katalogu. Bez --git będzie odgadnąć, co masz na myśli, [commit-ish]albo [path]. W niektórych przypadkach powoduje to, że git mówi, że zapis jest „niejednoznaczny”. Jeżeli dobrze pamiętam.
L0LN1NJ4
2
To nic nie drukuje, gdy próbuję metody w odpowiedzi i metody w komentarzu.
ray
@ray, co oznacza, że ​​nie ma różnic między drzewem roboczym a najnowszym zatwierdzeniem
valerij vasilcenko
3
Dla @ray i przyszłych osób, które to zobaczą, możesz dołączyć gałęzie, między którymi próbujesz się git diff master..develop myfolder/rozróżnić, jak powiedział @CrandellWS w komentarzu do pierwotnego pytania. Status Git pokaże zmiany, jeśli tego właśnie szukasz.
BVBAccelerate
2
@ray upewnij się, że jesteś w katalogu głównym. Ścieżka będzie zależna od twojego bieżącego katalogu.
Nickofthyme
59

Jeśli porównujesz różne gałęzie, musisz użyć, --aby oddzielić wersję Git od ścieżki systemu plików. Na przykład z dwoma lokalnymi oddziałami masteri bryan-working:

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

Lub z lokalnego oddziału do zdalnego:

$ git diff master -- AFolderOfCode/ origin/master -- AFolderOfCode/
bydło
źródło
29
Tylko jedna klauzula jest potrzebna po wypisaniu obu gałęzi, jak w: git diff branch1 branch2 - path / to / dir
emery
4

Powinieneś mieć nawyk przeglądania dokumentacji takich rzeczy. Jest to bardzo przydatne i bardzo szybko poprawi twoje umiejętności. Oto odpowiedni fragment, kiedy to zrobiszgit help diff

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

Te dwa elementy <path>są potrzebne, aby zmienić te katalogi.

Noufal Ibrahim
źródło
3

Dodaj Beyond Compare jako narzędzie difftool w Git i dodaj alias dla diffdir jako:

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

Pobierz gitdiff jako:

git diffdir 4bc7ba80edf6  7f566710c7

Źródła: Porównaj całe katalogi w git difftool + Beyond Compare

Barani
źródło
1
Znak równości wydaje się być zły dla git 2.17.1. Użyj git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"zamiast tego
Mark Schäfer
Zauważ, że używając Beyond Compare dla dir diff, musisz albo skonfigurować go tak, aby podążał za dowiązaniami symbolicznymi (w widoku porównania folderów -> Reguły (ikona odniesienia) -> Obsługa -> podążaj za dowiązaniami symbolicznymi) LUB dodaj --no-symlinksopcję, aby polecenie brzmiałogit difftool --dir-diff --no-symlinks
Ashutosh Jindal
1

Nie tylko możesz dodać ścieżkę, ale możesz dodać, git diff --relativeaby uzyskać wynik względem tego folderu.

git -C a/folder diff --relative

A dzięki Git 2.28 (Q3 2020) polecenia z rodziny „ diff” nauczyły się honorować diff.relativezmienną konfiguracyjną „ ”.

Zobacz commit c28ded8 (22 maja 2020) autorstwa Laurent Arnoud ( spk) .
(Scalenie przez Junio ​​C Hamano - gitster- w zatwierdzeniu e34df9a , 02 czerwca 2020)

diff: dodaj opcję konfiguracji relative

Podpisane przez: Laurent Arnoud
Potwierdzone przez: Đoàn Trần Công Danh

Opcja diff.relativelogiczna ustawiona na truepokazuje tylko zmiany w bieżącym katalogu / wartości określonej przez pathargument relativeopcji i pokazuje nazwy ścieżek względem wyżej wymienionego katalogu.

Naucz --no-relativewcześniej nadpisywać--relative

Dodaj dokumentację opcji git-format-patch (1) --relativei--no-relative

Dokumentacja obejmuje obecnie :

diff.relative:

Jeśli ustawione na „ true”, „ git diff” nie pokazuje zmian poza katalogiem i pokazuje nazwy ścieżek względem bieżącego katalogu.

VonC
źródło
0

Jeśli chcesz wykluczyć podkatalogi, możesz użyć

git diff <ref1>..<ref2> -- $(git diff <ref1>..<ref2> --name-only | grep -v /)
Salvian Reynaldi
źródło
0

Aby użyć Beyond Compare jako narzędzia diff do porównywania katalogów, pamiętaj, aby włączyć następujące dowiązania symboliczne:

W folderze Widok porównaniaReguły (ikona sędziego):

Tutaj wprowadź opis obrazu

Następnie włącz podążanie za dowiązaniami symbolicznymi i aktualizuj ustawienia domyślne sesji:

Tutaj wprowadź opis obrazu


LUB,

skonfiguruj alias w ten sposób:

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

Należy zwrócić uwagę, że w każdym przypadku wszelkie zmiany wprowadzone z boku (z lewej lub prawej strony) odnoszące się do bieżącego drzewa roboczego są zachowywane.

Ashutosh Jindal
źródło