git - 将 git 文件历史记录保存为多个文件

标签 git bisect

我一直在 perf.txt 中为我的代码保存一些自动生成的性能数据。每次改进代码时,我都会运行一个脚本,用新的性能数据覆盖 perf.txt。然后我将提交 perf.txt。

回想起来,覆盖 perf.txt 是一个愚蠢的错误,现在,我想对我的改进进行一些分析/绘制图表,但不能。当然,旧的 perf.txt 文件仍然存在于我的提交历史记录中。有什么简单的方法可以得到它们吗?理想情况下,我希望在新目录中包含 perf~1.txt、perf~2.txt 等以及时间戳。

或者,如果我可以像 git-bisect 那样简单地“重放”提交历史记录(例如 git next perf.txt)——但是是线性的——那也可以。

最佳答案

好的,我设法为此创建了一个 shell 脚本。让我知道它是否正常工作。

更新:

i=0; git rev-list HEAD package.json | while read sha1; do; git show "$sha1:package.json" > "$(printf "%04d" $i)-$sha1-package.json"; ((i++)); done

将输出:

$ ls *-package.json | cat
0000-a15147199edff1b1c0fab89c66214abfb8c65d7c-package.json
0001-51feba61197b837b7d55754a56e12f66f0624ba1-package.json
0002-ed9e34482a303e7e64c397f89533dbe64f51cfbf-package.json
0003-d01253e20158f53c08aa6bc0c1cf66806cd19148-package.json
0004-d57363e800535a7400fde56e97d0a4cd424cffbb-package.json
0005-6e995583a11b63bf1d94142da6408955ee93e7cc-package.json
0006-6bc2a87943f59ad277cdee26aec1c25949c0f091-package.json
0007-e06a8cae3a1de58b770a66cbd124cf50e809fb31-package.json
0008-81bf63359641255dfd340714d0635be03bda8de9-package.json
0009-95559f5117c8a21c1b8cc99f4badc320fd3dcbda-package.json
0010-5e906366dd86dda95df050257513c95834020e5e-package.json
0011-717cb2a5c7909ed16f7c599b02759b27fd2e4258-package.json
0012-f18b75940e61a52ef9c0cf41a4bda3bcdae5c46c-package.json
0013-3c86547a3b841807c4744af0fa4ee3894cc17a33-package.json
0014-d5658e978d9a7234e537d57c45069ce223cb3853-package.json
0015-286c4d91dde12ba32f4a56273d05374b1cbb79e7-package.json
0016-46d680458b74fcf956f6161a2b73b6b00fc2541d-package.json
0017-e64f89d9aaf26c2dae6c7f1ef29a2d3cadd0b4b2-package.json
0018-bd84aad6cdde8cf3ce7842df1febb82fe9816647-package.json
0019-6cf1542a8b823c6bdacf7e6e01dfcb58e9949ff4-package.json
0020-1434b5b56756d02190afe552b626823c97b11a49-package.json

排序后将保持正确的顺序。


原文:

i=0; git rev-list HEAD package.json | while read sha1; do; git show "$sha1:package.json" > "$i-$sha1-package.json"; ((i++)); done

将所有 3 个位置中的 package.json 替换为您想要的文件。

这将创建如下文件:

$ ls *-package.json | cat
0-a15147199edff1b1c0fab89c66214abfb8c65d7c-package.json
1-51feba61197b837b7d55754a56e12f66f0624ba1-package.json
10-5e906366dd86dda95df050257513c95834020e5e-package.json
11-717cb2a5c7909ed16f7c599b02759b27fd2e4258-package.json
12-f18b75940e61a52ef9c0cf41a4bda3bcdae5c46c-package.json
13-3c86547a3b841807c4744af0fa4ee3894cc17a33-package.json
14-d5658e978d9a7234e537d57c45069ce223cb3853-package.json
15-286c4d91dde12ba32f4a56273d05374b1cbb79e7-package.json
16-46d680458b74fcf956f6161a2b73b6b00fc2541d-package.json
17-e64f89d9aaf26c2dae6c7f1ef29a2d3cadd0b4b2-package.json
18-bd84aad6cdde8cf3ce7842df1febb82fe9816647-package.json
19-6cf1542a8b823c6bdacf7e6e01dfcb58e9949ff4-package.json
2-ed9e34482a303e7e64c397f89533dbe64f51cfbf-package.json
20-1434b5b56756d02190afe552b626823c97b11a49-package.json
3-d01253e20158f53c08aa6bc0c1cf66806cd19148-package.json
4-d57363e800535a7400fde56e97d0a4cd424cffbb-package.json
5-6e995583a11b63bf1d94142da6408955ee93e7cc-package.json
6-6bc2a87943f59ad277cdee26aec1c25949c0f091-package.json
7-e06a8cae3a1de58b770a66cbd124cf50e809fb31-package.json
8-81bf63359641255dfd340714d0635be03bda8de9-package.json
9-95559f5117c8a21c1b8cc99f4badc320fd3dcbda-package.json

关于git - 将 git 文件历史记录保存为多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895810/

相关文章:

git bisect 第一次猜测越界

mercurial - 如何从 Mercurial 获取平分线的当前状态(好/坏修订的历史)

git - 在 bitbucket 中导入本地文件夹

Gitk 下面板无法调整大小

git - 在 github/bitbucket 上使用多账户/多身份推送

python - Python bisect 中的 `key` arg 如何工作?

git - git log -p:显示差异还是生成补丁?

git - 无法打开 git/commit_editmsg

version-control - 当范围包含分支时,Mercurial 的二等分如何工作?