gpt4 book ai didi

git - 如何找到具有已知哈希值的对象的 git 对象 ID

转载 作者:太空狗 更新时间:2023-10-29 13:42:36 24 4
gpt4 key购买 nike

我正在使用 bfg清理我的 git repo。要获取要删除的大文件列表,我使用 this script .但是对于某些文件,我只想从存储库中删除它们的特定版本。

bfg 可以选择“去除具有指定 Git 对象 ID 的 blob”。当我运行上面的脚本时,我得到了列表中每个对象的哈希值。鉴于该哈希值,我如何找出该特定对象的 git 对象 ID,以便我可以使用 bfg 将其删除?

最佳答案

该脚本似乎已经列出了 git 对象 ID。

如果您有一个特定的提交您有兴趣清理,您可以使用 command line "Which commit has this blob?" 检查特定的对象 ID 是否是所述提交的一部分。

git log --all --pretty=format:%H -- <path> | \
xargs -n1 -I% sh -c "git ls-tree % <path> | \
grep -q <hash> && echo %"

例如,在我的 repo seec 中:

a255b5c1d469591037e4eacd0d7f4599febf2574 12884 seec.go
a7320d8c0c3c38d1a40c63a873765e31504947ff 12928 seec.go

我想清理 a7320d8 版本的 seec.go

如 BFG commit 12d1b00 中所示:

People can get a list of blob-ids using "git rev-list --all --objects", then grep to list all files in directories they want to nuke, and pass that to the BFG.

注意:bi test 是这样写的:

val blobIdsFile = Path.createTempFile()
blobIdsFile.writeStrings(badBlobs.map(_.name()),"\n")
run(s"--strip-blobs-with-ids ${blobIdsFile.path}")

意味着 -bi 的参数是一个文件,里面有 blob id。


我还可以通过查找它的提交来检查我刚刚得到的确实是 blob id:

vonc@bvonc MINGW64 ~/data/git/seec (master)
$ git log --all --pretty=format:%H -- seec.go | xargs -n1 -I% sh -c "git ls-tree % seec.go|\
grep -q a7320d8 && echo %"

我得到:commit c084402

让我们看看该提交是否确实包含 seec.go 修订版 blob id a7320d8(使用“Git - finding the SHA1 of an individual file in the index”)。
我可以从 GitHub 提交中找到文件的 blob id:

vonc@bvonc MINGW64 ~/data/git/seec (master)
$ (echo -ne "blob $(curl -s https://raw.githubusercontent.com/VonC/seec/c084402/seec.go --stderr -|wc -c)\0"; \
curl -s https://raw.githubusercontent.com/VonC/seec/c084402/seec.go --stderr -) | \
sha1sum | awk '{ print $1 }'
a7320d8c0c3c38d1a40c63a873765e31504947ff

宾果。

我是否应该删除 seec.go blob id a7320d8,我知道我可以将那个 blob id(在“blob ids”文件中)传递给 bfg。

关于git - 如何找到具有已知哈希值的对象的 git 对象 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44857829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com