是否可以使用 git 命令行工具获取已通过给定提交哈希添加到存储库的所有 git 对象哈希的列表?
我已经尝试使用 git 管道工具将其存档git-diff-tree
。也许这是错误的方法。以下是迄今为止我能得到的最好结果。但是(非常长的手册页)文档并没有帮助找出必须如何准确地解释输出。
$ git diff-tree --no-commit-id 2b53d04dbb7cd35d030ddc59b13c0836a87daeb7
:100644 100644 03f15b592c7d776da37e3d4372c215b14ff8820f 6e0ed0b1ed56e9a35a3be52a9de261c8ffcccae8 M file1.ts
:100644 100644 b5083bdb9c31005ebd16835a0f49dc848d3f387a 4b7f9e6624a66fec0510d76823303017e224c9d7 M file2.ts
:100644 100644 368d64862e6aa2a0110f201c8a5193d929e2956d 0e51626a9866a8a3896489f497fbd745a5f4a9f2 M file3.ts
:040000 040000 c332b1e576af0dbb93cc875106bc06c3de6b74c8 f7f3478a9b0eaac85719699d97e323563a1b102b M some_folder
第一个和第二个 git 对象 blob 哈希是否分别显示修改文件的旧对象和新对象?在最坏的情况下,我可以通过解析输出来获取该信息。
我的主要目标是找到一个如下工作的命令行:
$ git <command> <option1> <option2> 368d64862e6aa2a0110f201c8a5193d929e2956d
6e0ed0b1ed56e9a35a3be52a9de261c8ffcccae8
4b7f9e6624a66fec0510d76823303017e224c9d7
0e51626a9866a8a3896489f497fbd745a5f4a9f2
在下面编辑以响应@torek
为了回应@torek 的回答,我想更清楚我的意图是什么,因为他绝对正确地指出新的不一定是新的。
我打算用来git rev-list --reverse <branch>
按提交顺序获取该分支上所有提交的列表。然后我想按这个顺序访问每个提交,并在每次提交时收集这个分支上第一次看到的 blob 哈希。
最终结果应该类似于以下内容:
C:368d64862e6aa2a0110f201c8a5193d929e2956d
B:03f15b592c7d776da37e3d4372c215b14ff8820f
B:4b7f9e6624a66fec0510d76823303017e224c9d7
B:c332b1e576af0dbb93cc875106bc06c3de6b74c8
C:5521a02ce1bc4f147d0fa39a178512476764dd66
B:e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e
B:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
C:a3db5c13ff90a36963278c6a39e4ee3c22e2a436
B:4888920a568af4ef2d2f4866e75b4061112a39ea
.
.
.
C:
提交
B:
blob
如果这不容易完成,则可以进行两次通过。由于您指出的原因,在第一遍中,可以在不同的提交中多次提及 blob:
- 在另一个文件中添加具有相同内容的文件
- 文件修改后内容相同
然后我可以对文件进行第二次传递,通过该文件awk '!x[$0]++'
将删除任何重复项。这不会很有效,但会得到我想要的结果。
我希望我现在表达了我的意图。有什么想法吗?