这个脚本似乎已经列出了git对象id。
如果你想要清理特定的提交,你可以使用命令行“哪个提交有这个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
seec.go
的a7320d8
版本;如在BFG 提交 12d1b00中所示:
请注意:bi测试阅读:人们可以使用“
git rev-list --all --objects
”获取blob-id列表,然后使用grep列出要删除的目录中的所有文件,并将其传递给BFG。
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 %"
让我们看看这个提交是否确实包括seec.go
修订blob id a7320d8
(使用“Git - 查找索引中单个文件的SHA1”).
我可以从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 rev-list --all --objects | grep myFile
并在列表中看到了哈希)。然而,当我将该哈希传递给 BFG 使用java -jar bfg-1.12.15.jar -bi 12345
时,它会显示错误信息:Error: Option --strip-blobs-with-ids failed when given '12345'. 12345(The system cannot find the file specified).
(12345 是示例哈希) - Chin