git show
सुझावों में से कोई भी वास्तव में संतुष्ट नहीं है क्योंकि (जैसा कि हो सकता है) का प्रयास करें, मुझे आउटपुट के शीर्ष से मेटाडेटा cruft प्राप्त नहीं करने का एक तरीका नहीं मिल सकता है। बिल्ली (1) की भावना केवल सामग्री दिखाने के लिए है। यह (नीचे) एक फ़ाइल नाम और एक वैकल्पिक नंबर लेता है। संख्या यह है कि आप किस तरह से वापस जाना चाहते हैं। (उस फ़ाइल को परिवर्तित करने वाले कमिट करता है। लक्ष्य फ़ाइल को नहीं बदलने वाले कमिट नहीं गिने जाते हैं।)
gitcat.pl filename.txt
gitcat.pl -3 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 );
}