Komenda git diff-tree
ma --diff-filter
argumentu, który może być używany do filtrowania dla określonego rodzaju modyfikacji:
Z git diff-tree documentation:
--diff-filter = [(A | C | D | M | R | T | U | X | B) ... [*]]
Wybierz tylko pliki, które zostały dodane (A), skopiowane (C), usunięte (D), Zmodyfikowany (M), Zmieniony (R), mają swój typ (tj. Zwykły plik, dowiązanie symboliczne, sub moduł, ...) zmieniono (T), są Unmerged (U), są nieznani (X), lub ich parowanie Broken (B). Można użyć dowolnej kombinacji znaków filtrujących (w tym żadnej).
Jeśli chcesz uzyskać listę nazw wszystkich dodanych plików można użyć polecenia tak:
git diff-tree -r --name-only --diff-filter A <oldCommit>..<newCommit>
opcja w tym przypadku -r
oznacza diff drzewa rekurencyjnie. Opcja --name-only
powoduje tylko drukowanie nazw plików bez ich statusu i uniemożliwia drukowanie nagłówka diff.
Ponieważ jest to jedna z komend git diff, pobiera również dodatkowe argumenty, które umożliwiają filtrowanie listy plików. Jeśli interesują Cię tylko pliki kończące się na '.py' w określonej ścieżce, możesz dodać do polecenia -- 'path/*.py'
.
Jeśli lista plików jest wysyłana dalej do narzędzia takiego jak xargs
, może być sens dodanie opcji -z
. Ta opcja powoduje, że lista nazw plików ma być rozdzielana przez bajt zerowy zamiast nowego wiersza. To sprawia, że polecenie jest odporne na różne znaki specjalne, które mogą występować w nazwach plików (w tym spacje). Odbierający koniec musi to uświadomić. Dla opcji xargs
można użyć opcji --null
.
Kompletny polecenia, które uruchamia pylint
na dodanych plików z rozszerzeniem „.py” pomiędzy dwoma zobowiązuje może zatem wyglądać następująco:
git diff-tree -r -z --name-only --diff-filter A <oldCommit>..<newCommit> -- '*.py' | xargs --null pylint
nie próbowałem tego, ale wygląda obiecująco: https: //github.com/edx/diff-cover –
@IsmailBadawi: Dziękuję, to przydatne narzędzie!Chociaż o ile widzę, że może on dostarczać tylko wysokiej jakości raporty od pylintów, a nie komunikatów o błędach. – user3608247