Dưới đây là tập lệnh Perl in ra các lệnh Git diff cho một tệp đã cho như được tìm thấy trong lệnh ghi nhật ký Git.
Ví dụ
git log pom.xml | perl gldiff.pl 3 pom.xml
Sản lượng:
git diff 5cc287:pom.xml e8e420:pom.xml
git diff 3aa914:pom.xml 7476e1:pom.xml
git diff 422bfd:pom.xml f92ad8:pom.xml
mà sau đó có thể được cắt và dán trong một phiên cửa sổ vỏ hoặc đường ống đến /bin/sh
.
Ghi chú:
- số (3 trong trường hợp này) chỉ định số lượng dòng cần in
- tệp (pom.xml trong trường hợp này) phải đồng ý ở cả hai nơi (bạn có thể gói nó trong hàm shell để cung cấp cùng một tệp ở cả hai vị trí) hoặc đặt nó trong thư mục nhị phân dưới dạng tập lệnh shell
Mã số:
# 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;
}
..
này không thực sự cần thiết, mặc dù nó sẽ hoạt động với nó (ngoại trừ trong các phiên bản khá cũ, có thể). Bạn cũng có thể sử dụnggit log
hoặcgitk
để tìm SHA1 để sử dụng, nếu hai cam kết cách nhau rất xa.gitk
cũng có "diff select -> this" và "diff this -> select" trong menu ngữ cảnh của nó.