Wie 'git diff' ich in einem bestimmten Verzeichnis?

132

git diffführt tatsächlich einen Unterschied im gesamten Quellcode aus. Wie mache ich das in einem bestimmten Verzeichnis, damit ich Änderungen an Dateien darunter anzeigen kann?

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

Antworten:

125

Geben Sie einen Pfad ein (in diesem Fall mein Ordner) und führen Sie einfach Folgendes aus:

git diff myfolder/
Geo
quelle
28
Ich würde gerne verwenden, git diff -- myfolderum die Mehrdeutigkeit von Git zu minimieren. Die allgemeine Notation für git diff (und viele git-Befehle) lautet, git diff [commit-ish] -- [path]dass commit-ish standardmäßig HEAD (wo Sie sich gerade befinden) und [path]standardmäßig das git-Stammverzeichnis verwendet, aber alles relativ zu Ihrem aktuellen Verzeichnis sein kann. Ohne das --wird git raten, was du meinst, [commit-ish]oder [path]. In einigen Fällen führt dies dazu, dass git sagt, die Notation sei "mehrdeutig". Wenn ich mich richtig erinnere.
L0LN1NJ4
2
Dies gibt nichts aus, wenn ich die Methode in der Antwort und die Methode im Kommentar versuche.
Ray
@ray, was bedeutet, dass Sie keine Unterschiede zwischen dem Arbeitsbaum und dem letzten Commit haben
valerij vasilcenko
3
Für @ray und zukünftige Personen, die dies sehen, können Sie die Zweige git diff master..develop myfolder/einschließen, zwischen denen Sie unterscheiden möchten, wie @CrandellWS im Kommentar zur ursprünglichen Frage sagte. Der Git-Status zeigt Ihnen Änderungen an, wenn Sie danach suchen.
BVBAccelerate
2
@ray stellen Sie sicher, dass Sie sich im Stammverzeichnis befinden. Der Pfad ist relativ zu Ihrem aktuellen Verzeichnis.
Nickofthyme
59

Wenn Sie verschiedene Zweige vergleichen, müssen Sie --eine Git-Revision von einem Dateisystempfad trennen. Zum Beispiel mit zwei lokalen Niederlassungen masterund bryan-working:

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

Oder von einer lokalen Niederlassung zu einer Fernbedienung:

$ git diff master -- AFolderOfCode/ origin/master -- AFolderOfCode/
Vieh
quelle
29
Nur eine - Klausel ist erforderlich , nachdem die beiden Zweige Auflistung, wie in: git diff branch1 branch2 - path / to / dir
Schmirgel
4

Sie sollten es sich zur Gewohnheit machen, in der Dokumentation nach solchen Dingen zu suchen. Es ist sehr nützlich und wird Ihre Fähigkeiten sehr schnell verbessern. Hier ist das relevante Bit, wenn Sie dies tungit help diff

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

Die beiden <path>s müssen Sie in die betreffenden Verzeichnisse ändern.

Noufal Ibrahim
quelle
3

Fügen Sie Beyond Compare als Ihr Difftool in Git hinzu und fügen Sie einen Alias ​​für diffdir hinzu als:

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

Holen Sie sich den Gitdiff als:

git diffdir 4bc7ba80edf6  7f566710c7

Referenz: Vergleichen Sie ganze Verzeichnisse mit git difftool + Beyond Compare

Barani
quelle
1
Das Gleichheitszeichen scheint für Git 2.17.1 falsch zu sein. Verwenden Sie git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"stattdessen
Mark Schäfer
Beachten Sie, dass Sie Beyond Compare für dir diff entweder so konfigurieren müssen, dass es Symlinks folgt (In einer Ordnervergleichsansicht -> Regeln (Schiedsrichtersymbol) -> Behandlung -> Symlinks folgen) ODER die --no-symlinksOption hinzufügen, damit der Befehl lautetgit difftool --dir-diff --no-symlinks
Ashutosh Jindal
1

Sie können nicht nur einen Pfad hinzufügen, sondern auch hinzufügen git diff --relative, um das Ergebnis relativ zu diesem Ordner zu erhalten.

git -C a/folder diff --relative

Und mit Git 2.28 (Q3 2020) haben die Befehle in der diffFamilie " " gelernt, die diff.relativeKonfigurationsvariable " " zu berücksichtigen.

Siehe Commit c28ded8 (22. Mai 2020) von Laurent Arnoud ( spk) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit e34df9a , 02. Juni 2020)

diff: Konfigurationsoption hinzufügen relative

Unterzeichnet von: Laurent Arnoud
Bestätigt von: Đoàn Trần Công Danh

Die auf diff.relativeboolesche Option festgelegte Option truezeigt nur Änderungen im aktuellen Verzeichnis / Wert an, die durch das pathArgument der relativeOption angegeben werden, und zeigt Pfadnamen relativ zum oben genannten Verzeichnis an.

Lehren Sie --no-relative, früher zu überschreiben--relative

Fügen Sie für git-format-patch (1) Optionsdokumentation --relativeund--no-relative

Die Dokumentation enthält jetzt :

diff.relative::

Bei Einstellung auf ' true' zeigt ' git diff' keine Änderungen außerhalb des Verzeichnisses und Pfadnamen relativ zum aktuellen Verzeichnis an.

VonC
quelle
0

Wenn Sie die Unterverzeichnisse ausschließen möchten, können Sie verwenden

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

Um Beyond Compare als Difftool für Directory Diff zu verwenden, denken Sie daran, aktivieren Sie folgen Sie symbolischen Links wie folgt:

In einer OrdnervergleichsansichtRegeln (Schiedsrichtersymbol):

Geben Sie hier die Bildbeschreibung ein

Aktivieren Sie anschließend die folgenden symbolischen Links und aktualisieren Sie die Sitzungsstandards:

Geben Sie hier die Bildbeschreibung ein


ODER,

Richten Sie den Alias ​​folgendermaßen ein:

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

Beachten Sie, dass in beiden Fällen alle Änderungen an der Seite (links oder rechts), die sich auf den aktuellen Arbeitsbaum beziehen, beibehalten werden.

Ashutosh Jindal
quelle