获取git中文件的所有修订版

时间:2011-11-25 13:00:46

标签: git unix

我有一个git存储库,里面有多个文件。

我需要获取特定文件foo.bar的所有修订版(不是差异版),并将其存储为新文件夹中的0001-{date}-{sha}-foo.bar0002-{date}-{sha}-foo.bar等内容。

我该怎么做?

2 个答案:

答案 0 :(得分:6)

假设您想要作者日期,并且unix时间戳是可以的:

i=0
git log --reverse --format=%H\ %at $file |
while read hash date; do
  git show $hash:$file > $(dirname $file)/$i-$hash-$date-$(basename $file)
  : $((i += 1))
done

应该做你想做的事。如果您想要不同的日期,请在说明符处更改%, 但是unix时间戳很好,因为你不必处理名称中的空格。明显, 如果你愿意,有办法解决这个问题。

答案 1 :(得分:4)

您可以使用git log --pretty="%ct %H" -- foo.bar,它会为您提供以下内容:

1322212187 f75e724eec4e11a720d4620b3ca09eff91bb754e
1311666567 d6b578f1b778c67d78322d914d3ab46e02d12f6c
1311584563 cb76c3e39553cf20c9e96ad3d2c963b905d19180
1311321178 bec391005805ca01e9c7b11032b456d426f4fa52
1311321089 b29afbf8c4ca7e8f178cec981b5d3d14f0abeb15
1311081641 74d5747f2094a8f1696344c6c2b94244e52c7cc9

第一列是commit(unix)时间戳,第二列是commit的SHA。如果您想要其他内容(%ct参数中的“--pretty”,RTFM可以查看选项),您可以更改日期格式。从这里可以很容易地编写git命令来检查该特定文件的特定修订版本,并使用shellscript将其复制到您的命名约定中 - 留给读者作为练习。