git - 在"hg"或者"cat"的git中等价

  显示原文与译文双语对照的内容
0 0

我想提取一个在git存储库中保存的文件的最新版本的副本,并将它传递到一个脚本中进行一些处理。 使用svn或者 hg,我只使用"cat"命令:

打印指定的文件,因为它们位于给定的版本。 如果未给出修订,则使用工作目录的父级,或者提示如果未签出任何修订。

( 这来自hg文档中 hg cat的描述)

使用git执行这里操作的命令是什么?

时间: 原作者:

0 0

git show rev:path/to/file

冯在哪里修改。

有关git和svn命令的比较,请参阅 http://git.or.cz/course/svn.html

0 0

你可以像这样运行"git cat-file":

$ git cat-file blob v1.0:path/to/file

你可以取代'v1.0'分支,标签或你想要提交沙然后'path/to/file'相对路径的存储库。 你也可以通过'-s'查看内容的大小,如果你想要。

可能接近你习惯于'cat'命令,虽然前面提到的'显示'会做同样的事情。

0 0

git show 是你要查找的命令。 从文档:


 git show next~10:Documentation/README
 Shows the contents of the file Documentation/README as they were
 current in the 10th last commit of the branch next.

原作者:
0 0

使用 git show,如 git show commit_sha_id:path/to/some/file.cs

原作者:
0 0

似乎没有直接替代。 这个博客条目详细说明如何通过确定最近的提交,然后确定该提交中文件的哈希,然后将它的转储。


git log.. .
git ls-tree.. .
git show -p.. .

( 博客条目有拼写错误,并使用上面的命令 svn )

原作者:
0 0

没有一个 git show 建议真正满足,因为( 试试吧),我找不到从输出顶部得到元数据的方法。 cat(1)的精神就是显示内容。 这里( 下方) 接受文件名和可选数字。 数字是你想要返回的方式。 ( 更改了该文件的提交。 不对不更改目标文件的提交进行计数。)


gitcat.pl filename.txt
gitcat.pl -3 filename.txt

显示 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] filenamen";

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 上面 your pwd.n" );
 }
 $cwd = join( '/', @cwd );
 }
 return join( '/', map {"'$_'"; } @path );
}

...