Antworten:
Ja, wenn Sie sicherstellen, dass git einen Glob anstelle Ihrer Shell erweitert, stimmt er auf jeder Ebene überein, sodass so etwas (Anführungszeichen sind wichtig) gut funktionieren sollte.
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
Ebenfalls nützlich ist diegit diff master HEAD --name-only
''
) sind ebenfalls wichtig! git diff -- src/*.js
sollte seingit diff -- 'src/*.js'
Um Dateien rekursiv (einschließlich des aktuellen Verzeichnisses) einzuschließen, funktionierte dies für mich:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
Verwenden Sie entweder den Globstar Ihrer Shell (der eine rekursive Suche durchführt) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
oder benutze find:
find -name '*.py' -print0 | xargs -0 git diff --
Beide sind spezielle Namen und Leerzeichen. Obwohl Sie möglicherweise nach Verzeichnissen mit der Erweiterung .py filtern möchten :)
1 mache ich git diff -- {.,**}/*.py
normalerweise gerne
2 Wenn globstar aktiviert ist, git diff -- **/*.py
enthält es bereits ./*.py
. In Bashs Manpage: 'Wenn ein / folgt, stimmen zwei benachbarte * nur mit Verzeichnissen und Unterverzeichnissen überein.'
Befehlszeilenargument für die Erweiterung.
git diff *.py
In der Alternative können Sie Rohr find
in git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
und ohne die schreienden Überschriften ausreichen können
Wie in Git Version 2.18.0 getestet, sollte die Dateierweiterung in doppelte Anführungszeichen gesetzt werden. Wenn Sie nach dem Abrufen die letzten Unterschiede zwischen Ihrem lokalen und dem Remote-Repository ermitteln möchten, können Sie Folgendes verwenden:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Beispielsweise:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
Keine der obigen Antworten scheint unter git bash
Windows für mich zu funktionieren . Ich bin nicht sicher, ob es sich um eine Versionssache (ich verwende 1.8.4) oder eine Windows / Bash-Sache handelt. In meinem Fall wollte ich auch zwei Zweige unterscheiden, in denen in jedem Zweig zusätzliche Dateien vorhanden waren, die im anderen Zweig nicht vorhanden waren (daher sind die auf "Suchen" basierenden Dateien nicht vorhanden).
Wie auch immer, das hat bei mir funktioniert (in meinem Beispiel nach einem Unterschied zwischen Python-Dateien):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
zeigt nur Unterschiede in nicht bereitgestellten Dateien.
Ich habe diese Frage gefunden, weil ich .info
Dateien von ausschließen wollte git diff
. Ich habe dies erreicht, indem ich es mit inszeniert habe git add *.info
, wodurch die verbleibenden Dateien reduziert werden.
Ich endete damit:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
Dies zeigt Unterschiede für das angegebene Commit nur an, wenn der Dateiname das Wort 'test' enthält (ohne Berücksichtigung der Groß- und Kleinschreibung) und nicht mit endet .sql
. Ändern Sie die Pipeline nach Bedarf für Ihren Fall.