কোনও git show
প্রস্তাবনা সত্যই সন্তুষ্ট নয় কারণ (আমি যেমন চেষ্টা করবো), আউটপুট থেকে শীর্ষে মেটাডাটা ক্রাফ্ট না পাওয়ার কোনও উপায় আমি খুঁজে পাচ্ছি না। বিড়ালের স্পিরিট (1) কেবলমাত্র বিষয়বস্তু প্রদর্শন করা। এটি (নীচে) একটি ফাইলের নাম এবং একটি alচ্ছিক নম্বর নেয়। সংখ্যাটি কীভাবে আপনি ফিরে যেতে চান তা প্রতিশ্রুতি দেয়। (সেই ফাইলগুলি পরিবর্তন করে যে কমিটিগুলি Comm লক্ষ্য ফাইলটি পরিবর্তন করে না এমন কমিট গণনা করা হয় না))
gitcat.pl filename.txt
gitcat.pl -3 filename.txt
filename.txt এর সর্বশেষ প্রতিশ্রুতি হিসাবে ফাইলনাম.টেক্সট এর সামগ্রীগুলি এবং এর আগে 3 টি কমিট থেকে লিখিত সামগ্রীগুলি দেখায়।
#!/usr/bin/perl -w
use strict;
use warnings;
use FileHandle;
use Cwd;
# Have I mentioned lately how much I despise git?
(my $prog = $0) =~ s!.*/!!;
my $usage = "Usage: $prog [revisions-ago] filename\n";
die( $usage ) if( ! @ARGV );
my( $revision, $fname ) = @ARGV;
if( ! $fname && -f $revision ) {
( $fname, $revision ) = ( $revision, 0 );
}
gitcat( $fname, $revision );
sub gitcat {
my( $fname, $revision ) = @_;
my $rev = $revision;
my $file = FileHandle->new( "git log --format=oneline '$fname' |" );
# Get the $revisionth line from the log.
my $line;
for( 0..$revision ) {
$line = $file->getline();
}
die( "Could not get line $revision from the log for $fname.\n" )
if( ! $line );
# Get the hash from that.
my $hash = substr( $line, 0, 40 );
if( ! $hash =~ m/ ^ ( [0-9a-fA-F]{40} )/x ) {
die( "The commit hash does not look a hash.\n" );
}
# Git needs the path from the root of the repo to the file because it can
# not work out the path itself.
my $path = pathhere();
if( ! $path ) {
die( "Could not find the git repository.\n" );
}
exec( "git cat-file blob $hash:$path/'$fname'" );
}
# Get the path from the git repo to the current dir.
sub pathhere {
my $cwd = getcwd();
my @cwd = split( '/', $cwd );
my @path;
while( ! -d "$cwd/.git" ) {
my $path = pop( @cwd );
unshift( @path, $path );
if( ! @cwd ) {
die( "Did not find .git in or above your pwd.\n" );
}
$cwd = join( '/', @cwd );
}
return join( '/', map { "'$_'"; } @path );
}