Вот скрипт 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» в контекстном меню.