3 回答
TA贡献1830条经验 获得超3个赞
n=0
git log --pretty= --diff-filter=d --raw -- $file |
while read m1 m2 h1 h2 rest; do
eval git show $h2 > $((n++))_${h2}.$file
done
或
n=0
git log --pretty=%h --diff-filter=d -- $file |
while read; do
eval git show $REPLY:$file > $((n++))_$REPLY.$file
done
取决于是希望在生成的文件名中使用 Blob 的哈希值还是提交哈希值。
TA贡献1797条经验 获得超6个赞
使用 git rev-list 获取提交列表,使用 git show 输出文件:
i=0; git rev-list --abbrev-commit HEAD |
while read sha; do
git show $sha:./file.py > $((i++))_${sha}_file.py
done
此版本可以避免在子shell中执行并且不影响父级的问题:i++
i=0; git rev-list --abbrev-commit HEAD |
while read sha; do
git show $sha:./file.py > ${i}_${sha}_file.py
((i++))
done
TA贡献1848条经验 获得超10个赞
您可以使用 获取文件的指定版本,而无需签出相应的提交。例如:git show
git show git_hash:./file.py
将自指定提交起的内容打印到标准输出。(据推测,我没有使用过的Git Python接口提供了类似的功能。在某些情况下,领先避免了路径解析问题(我不记得细节)。file.py./
我已经写了一个Perl脚本,它为几个不同的版本控制系统(其中大部分我不再使用)做这样的事情:https://github.com/Keith-S-Thompson/get-versions(无保修)。
根据要求,下面是在自己的存储库的副本上运行的示例:get-versions
$ ls -l
total 56
-rw-r--r-- 1 kst kst 18092 Aug 9 2015 COPYING
-rw-r--r-- 1 kst kst 6234 Apr 16 2018 README.md
-rw-r--r-- 1 kst kst 940 Apr 25 2018 TODO.md
-rwxr-xr-x 1 kst kst 20977 Apr 16 2018 get-versions
$ get-versions -pad 3 -last 3 get-versions
$ ls -l
total 128
-rw-r--r-- 1 kst kst 18092 Aug 9 2015 COPYING
-rw-r--r-- 1 kst kst 6234 Apr 16 2018 README.md
-rw-r--r-- 1 kst kst 940 Apr 25 2018 TODO.md
-rwxr-xr-x 1 kst kst 20977 Apr 16 2018 get-versions
-r--r--r-- 1 kst kst 20752 Mar 2 10:54 get-versions,012
-r--r--r-- 1 kst kst 20766 Mar 2 10:54 get-versions,013
-r--r--r-- 1 kst kst 20977 Mar 2 10:54 get-versions,014
$
get-versions -help打印一个完全过于冗长的用法消息。(添加手册页在我的 TODO 列表中,保留执行权限也是如此。
添加回答
举报