Вот скрипт Perl, который выводит команды Git diff для данного файла, как это указано в команде журнала Git.
Например
git log pom.xml | perl gldiff.pl 3 pom.xml
Урожайность:
git diff 5cc287:pom.xml e8e420:pom.xml
git diff 3aa914:pom.xml 7476e1:pom.xml
git diff 422bfd:pom.xml f92ad8:pom.xml
который затем может быть вырезан и вставлен в сеансе окна оболочки или передан по трубопроводу /bin/sh.
Ноты:
- число (в данном случае 3) указывает, сколько строк будет напечатано
- файл (в данном случае pom.xml) должен совпадать в обоих местах (вы можете обернуть его в функцию оболочки, чтобы обеспечить одинаковый файл в обоих местах) или поместить его в двоичный каталог как скрипт оболочки
Код:
# gldiff.pl
use strict;
my $max = shift;
my $file = shift;
die "not a number" unless $max =~ m/\d+/;
die "not a file" unless -f $file;
my $count;
my @lines;
while (<>) {
chomp;
next unless s/^commit\s+(.*)//;
my $commit = $1;
push @lines, sprintf "%s:%s", substr($commit,0,6),$file;
if (@lines == 2) {
printf "git diff %s %s\n", @lines;
@lines = ();
}
last if ++$count >= $max *2;
}
..самом деле в этом нет необходимости, хотя он будет работать с ним (за исключением довольно старых версий, может быть). Вы также можете использоватьgit logили,gitkчтобы найти SHA1 для использования, если два коммита будут очень далеко друг от друга.gitkтакже имеет «diff selected -> this» и «diff this -> selected» в контекстном меню.