2012-04-15 9 views
7

I Validierung entwickle und Dienstprogramm Fusseln mit verschiedenen commit Haken integriert werden, einschließlich Git einGit pre-commit Haken: getting Liste der geänderten Dateien

https://github.com/miohtama/vvv

Derzeit Validierer und Linters sind gegen die gesamte laufen Projekt-Codebasis bei jedem Commit. Es wäre jedoch viel besser, sie nur für geänderte Dateien auszuführen. Dafür möchte ich geänderte Dateien Liste in meinem Git precommit Haken (in Python)

https://github.com/miohtama/vvv/blob/master/vvv/hooks/git.py

Welche Möglichkeiten habe ich extrahieren Sie die geänderten Dateien Liste (in Python, wenn diese Fragen) wissen müssen?

Antwort

5

Die pre-commit Haken ein bisschen nervig ist, wenn Sie wirklich wollen die Dinge machen, arbeiten „rechts“, weil das, was in der Arbeit Baum ist nicht unbedingt das gleiche wie ist das, was begangen werden soll:

$ echo morestuff >> file1; echo morestuff >> file2 
$ git add file1 # but not file2 
$ git commit -m 'modified two files but check in just one' 

Sie können git diff-index --cached HEAD verwenden, um eine Liste zu erhalten, "was eingecheckt werden soll". Siehe auch z. B. http://newartisans.com/2009/02/building-a-better-pre-commit-hook-for-git/.

+0

Für den Artikel Link: ziemlich die Mühe, zweite Kopie des Repository nur für die Überprüfung, was Dateien geändert haben :( –

+0

Sie brauchen keine zweite Kopie des Repo, aber Sie können (je nachdem, was Sie Es gibt zwei Alternativen: Überprüfen Sie den Index an einer anderen Stelle, so dass Sie einen funktionierenden Baum erhalten, der dem entspricht, was eingecheckt werden soll, oder überprüfen Sie, ob der aktuelle Arbeitsbaum "sauber" ist ", so dass Sie das aktuelle Verzeichnis verwenden können (der Pre-Commit-Hook wird im Arbeitsbaum ausgeführt). – torek

+0

Funktioniert perfekt, so weit. Hier ist die vollständige Lösung https://github.com/mihtama/vvv/blob/ master/vvv/hooks/git.py –

Verwandte Themen