Kann ich eine Liste der Dateien erhalten, die als --assume-unverändert markiert sind?

324

Als was habe ich markiert --assume-unchanged? Gibt es eine Möglichkeit herauszufinden, was ich mit dieser Option versteckt habe?

Ich habe das .git/Verzeichnis durchsucht und sehe nichts, was so aussieht, wie ich es erwartet hätte, aber es muss irgendwo sein. Ich habe vergessen, was ich vor einigen Wochen auf diese Weise markiert habe, und jetzt muss ich diese Details für zukünftige Entwickler dokumentieren.

Rob Wilkerson
quelle

Antworten:

449

Sie können verwenden git ls-files -v. Wenn das gedruckte Zeichen in Kleinbuchstaben geschrieben ist, wird die Datei als unverändert markiert.

Um nur die Dateien zu drucken, die unverändert sind, verwenden Sie:

git ls-files -v | grep '^[[:lower:]]'

Um Ihren faulen Programmierer zu umarmen, verwandeln Sie dies in einen Git-Alias . Bearbeiten Sie Ihre .gitconfigDatei, um dieses Snippet hinzuzufügen:

[alias]
    ignored = !git ls-files -v | grep "^[[:lower:]]"

Wenn git ignoredSie jetzt tippen , erhalten Sie folgende Ausgabe:

h path/to/ignored.file
h another/ignored.file
Andrew Aylett
quelle
42
git ls-files -v | grep ^ [az]
Matt R
17
Mein Betriebssystem hat anscheinend ein seltsames Sortierungssetup, daher hat Matts Befehl bei mir nicht funktioniert. Hier ist, was ich unter dem [alias]Abschnitt meiner hinzugefügt habe .gitconfig:ignored = !git ls-files -v | grep "^[[:lower:]]"
Abe Voelker
15
Der Grund, warum [az] nicht funktioniert, ist, dass die Shell es als Platzhalter erweitert. Wenn das aktuelle Verzeichnis eine Datei enthält, die diesem Muster entspricht (dh einen einzelnen Kleinbuchstaben), ist die Erweiterung davon der Name der Datei. Versuchen Sie, Anführungszeichen hinzuzufügen, z. B. "[az]"
DomQ
7
git ls-files -v | grep -e "^ [az]"
Amir Ali Akbari
12
Die vorgeschlagenen Aliase dienen zum Auffinden unveränderter Dateien im aktuellen Verzeichnis und darunter. Wenn Sie eine Liste aller "unverändert angenommenen" Dateien im Repository wünschen, benötigen Siegit ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
Trebor Rude
65

Einzeiler

git ls-files -v | grep "^[a-z]"

Verwenden Sie Aliase

IMHO, git hiddenist besser für Dateien markiert als --assume-unchanged:

git config --global alias.hidden '!git ls-files -v | grep "^[a-z]"'

Hier ist eine Liste verwandter Aliase, die ich habe in ~/.gitconfig:

[alias]
  hide = update-index --assume-unchanged
  unhide = update-index --no-assume-unchanged
  unhide-all = update-index --really-refresh
  hidden = !git ls-files -v | grep \"^[a-z]\"
  ignored = !git status -s --ignored | grep \"^!!\"

So funktioniert es in Unterverzeichnissen und unterstützt Argumente :

  hidden = "!f(){ git -C \"$GIT_PREFIX\" ls-files -v \"$@\" | grep \"^[a-z]\";}; f"
  ignored = "!f(){ git -C \"$GIT_PREFIX\" status -s --ignored \"$@\" | grep \"^!!\";}; f"

Zum Beispiel:

 # cd target
 # git ignored classes

Informationen zum Dateistatus

Für mich sind die meisten versteckten Dateien mit Flag gekennzeichnet h, obwohl es tatsächlich mehrere andere Flags gibt, gemäß dem Handbuch von git-ls-files-v:

-v
    Similar to -t, but use lowercase letters for files that are 
marked as assume unchanged (see git-update-index(1)).

Über git ls-files-t:

This option (-t) identifies the file status with the following tags 
(followed by a space) at the start of each line:

H   cached
S   skip-worktree
M   unmerged
R   removed/deleted
C   modified/changed
K   to be killed
?   other
Ryenus
quelle
1
Schöne, leicht zu merkende Aliase :) Danke
PlagueHammer
1
Hier sind einige flexiblere Varianten: hidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f"und ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f". Auf diese Weise können Sie beispielsweise git ignored -- PATH1 PATH2nur ignorierte Dateien in bestimmten Pfaden auflisten (nützlich, wenn Sie viele ignorierte Dateien haben).
Sls
Vielen Dank für Alias
MOHRE
22

Dieser Befehl funktioniert für mich konsistenter. Es werden nur die Dateien gedruckt, die als "unverändert" aufgeführt sind.

git ls-files -v|grep "^h"

Ich habe dies oft in verschiedenen Umgebungen verwendet und es funktioniert perfekt.

Earl3s
quelle
5
Verwenden Sie in der Windows-Eingabeaufforderung grep "^h"anstelle von einfachen Anführungszeichen
beautifulcoder
7

PowerShell-Lösung mit Select-String \ sls

git ls-files -v | sls -pattern ^h -casesensitive
Thowk
quelle
3

Windows-Befehlszeilenlösung mit findstr :

git ls-files -v | findstr /B h
Vova
quelle