Как я могу сделать git log
показывать только коммиты, которые меняли файлы, отличные от тех, которые я указываю?
С git log
, я могу отфильтровать коммиты, которые я вижу, тем, кто касается определенного набора путей. Я хочу, чтобы инвертировать этот фильтр так, чтобы он записывал только те пути касания, кроме указанных.
Я могу получить то, что хочу,
git log --format="%n/%n%H" --name-only | ~/filter-log.pl | git log --stdin --no-walk
где filter-log.pl
:
#!/usr/bin/perl
use strict;
use warnings;
$/ = "\n/\n";
<>;
while (<>) {
my ($commit, @files) = split /\n/, $_;
if (grep { $_ && $_ !~ m[^(/$|.etckeeper$|lvm/(archive|backup)/)] } @files) {
print "$commit\n";
}
}
за исключением того, что я хочу что-то более элегантное, чем это.
Обратите внимание, что я не спрашиваю, как сделать git игнорировать файлы. Эти файлы следует отслеживать и фиксировать. Это просто, что большую часть времени мне не интересно видеть их.
Связанный вопрос: Как инвертировать` git log --grep = <pattern> `или Как показать журналы git, которые не соответствуют шаблону Это тот же вопрос, кроме сообщений commit, а не путей.
Обсуждение форума по этому вопросу с 2008 года: Re: Исключение файлов из git -diff Это выглядело многообещающим, но поток, кажется, высушил вверх.