2016-09-02 4 views
1

Ich habe begonnen, ein großes, unhandliches Repo mit viel veraltetem Code zu unterhalten, das veraltet oder entfernt werden könnte. Ich möchte also Dateien finden, die seit einem bestimmten Commit nicht geändert wurden, damit ich durchgehen und prüfen kann, ob sie noch notwendig sind.Git find stale files

kann ich Dateien in meinem Repo finden, die have changed since a specific commit über:

git diff --name-only SHA 

Aber wie finde ich Dateien dass nicht verändert?

Antwort

2

Das Shell-Dienstprogramm comm wird ernsthaft unterschätzt.

$ git diff --name-only $SHA | LC_ALL=C.UTF-8 sort > /tmp/A 
$ git ls-tree -r --full-tree --name-only HEAD | LC_ALL=C.UTF-8 sort > /tmp/B 
$ LC_ALL=C.UTF-8 comm -13 /tmp/A /tmp/B 

erzeugt die Liste, die Sie wollen, indem Sie die Menge aller geänderten Dateien von der Menge aller Dateien subtrahieren. (Es ist ein wenig heikel, obwohl, damit alle LC_ALL überschreibt. Wenn Sie Fehlermeldungen über C.UTF-8 nur versuchen, C statt.)

+0

Ah, Komm! Rad. Klappt wunderbar! – thanksd

0

ich zwei Wege, um das Ende denken kann Ergebnis, das Sie brauchen, auch wenn es nicht der Fall ist Beantworten Sie speziell Ihre Frage nach der Suche nach unveränderten Dateien.

Der schnelle Weg wäre, eine Kopie aller Dateien zu erhalten, die zwischen dem Hash und der Kopf geändert hat:

cp -p --parents `git diff --name-only $3 $4` /path/to/output 

Sie können dann Ihre Git Repository initiieren in diesem Ordner und mit denen begehen zwingen Dateien. Das sollte alle alten Dateien entfernen und nur die geänderten Dateien übriglassen.

Alternativ können Sie wie oben beschrieben vorgehen und ein Verzeichnisvergleichswerkzeug wie meld verwenden, mit dem Sie wissen, welche Dateien im Repository, aber nicht im Verzeichnis der aktualisierten Dateien vorhanden sind. Sie können dann die Dateien aus dem Repository löschen.