为了账号安全,请及时绑定邮箱和手机立即绑定

如何将文件的所有git版本保存到磁盘?

如何将文件的所有git版本保存到磁盘?

千巷猫影 2022-08-16 16:33:20
在git中有三个版本,具有三个唯一的提交哈希。file.py那么,如何以编程方式将所有版本还原到特定文件中,例如:0_<git_hash>_file.py1_<git_hash>_file.py2_<git_hash>_file.py解决方案不一定是Python,而是目前正在研究Python包。git
查看完整描述

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 的哈希值还是提交哈希值。


查看完整回答
反对 回复 2022-08-16
?
互换的青春

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


查看完整回答
反对 回复 2022-08-16
?
慕桂英546537

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 列表中,保留执行权限也是如此。


查看完整回答
反对 回复 2022-08-16
  • 3 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信