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

5
我有一个Git仓库,里面有多个文件。
我需要获取特定文件foo.bar的所有版本(不是差异),并将其存储为类似于0001-{date}-{sha}-foo.bar0002-{date}-{sha}-foo.bar等格式的新文件夹中。
如何实现?

也许这有帮助?(https://dev59.com/SnVC5IYBdhLWcg3wfhKL) - Timofey Stolbov
2个回答

8
假设您想获取作者日期,且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
这段代码可以实现您的需求。如果您需要不同的日期格式,请更改%at指示符, 但Unix时间戳很好用,因为您无需处理名称中的空格。显然,如果您选择, 有方法可以解决这个问题。

4
您可以使用 git log --pretty="%ct %H" -- foo.bar 命令,它会返回如下结果:
1322212187 f75e724eec4e11a720d4620b3ca09eff91bb754e
1311666567 d6b578f1b778c67d78322d914d3ab46e02d12f6c
1311584563 cb76c3e39553cf20c9e96ad3d2c963b905d19180
1311321178 bec391005805ca01e9c7b11032b456d426f4fa52
1311321089 b29afbf8c4ca7e8f178cec981b5d3d14f0abeb15
1311081641 74d5747f2094a8f1696344c6c2b94244e52c7cc9

第一列是提交(unix)时间戳,第二列是提交的SHA。如果需要其他日期格式(在--pretty参数中使用'%ct',请参阅RTFM以查看选项),您可以更改日期格式。从这里开始,编写git命令以检出该特定文件的特定版本,并使用shell脚本按照您的命名约定进行复制将变得容易 - 留给读者作为练习。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接