如果我有一个 存储库 在 commit ffded2bb9b398af20fbc2f3e11c74b546f4c9764
我想使用 bash 获取给定文件夹(以及可能的子文件夹)中所有文件的 blob ID。但我不明白怎么办。
由于我是 blob 新手,我不明白 在线手册。
几个选项:
git ls-tree
git-ls-tree - 列出树对象的内容
git ls-tree ffded2bb9b398af20fbc2f3e11c74b546f4c9764
git log
# get the tree (%T) object of the given commit
git log ffded2bb9b398af20fbc2f3e11c74b546f4c9764 -1 --pretty=%T
git diff-tree
git-diff-tree - 比较通过两个树对象找到的 blob 的内容和模式
# Get the SHA-1 of the files in the given commit
git diff-tree ffded2bb9b398af20fbc2f3e11c74b546f4c9764
总长:
git cat-file -p `git cat-file -p ffded2 | head -1 | cut -f2 -d\ `
提交上的 cat-file 将为您提供如下摘要:
tree 143b70383b734d62402f70f348aeea4274ce861b
parent f16817d149bca8e07831a78a2a7f55a3dcbb3ccd
author NAME <EMAIL> 1700159016 -0600
committer NAME <EMAIL> 1700159016 -0600
COMMIT MESSAGE
因此,您可以获取树 ID,这是第一行中的第二个标记(我使用
head
和 cut
完成),并将其传递给 git cat-file -p
将列出带有 blob ID 的目录,如下所示:
100644 blob 5169a5e4135e9f7e5ff7b2c835dfb34e48202ff7 LICENSE
100644 blob 2b670dd63ad28cbce62171fe96f89796ece8b064 README.md
040000 tree 278c0d7f7a312e0af40154a6dbfabc0fb779bd43 src
然后您可以从中获取 blob ID。