执行Git导出丢失Blob脚本遇“blob was unexpected at this time”错误如何解决?
解决“blob was unexpected at this time”报错的方法
嘿,这个报错我太熟了!你应该是在Windows的CMD命令提示符里运行这段bash风格的脚本才出的问题——CMD和bash的语法完全不兼容,所以才会把blob当成意外的命令。给你几个靠谱的解决办法:
方法1:用Git Bash运行(最推荐)
Git for Windows自带的Git Bash完全支持bash语法,直接在里面运行修正后的脚本就行,注意把原脚本里的中文引号换成英文引号(你脚本里awk的引号是中文的,这也会导致问题):
for blob in $(git fsck --lost-found | awk '$2 == "blob" { print $3 }'); do git cat-file -p $blob > $blob.txt; done
操作步骤:
- 右键点击任意文件夹,选择“Git Bash Here”打开终端
- 把上面的命令粘贴进去回车就行,它会自动把所有丢失的blob对象导出成对应的
.txt文件。
方法2:在CMD里用兼容语法运行
如果你非要用CMD,得把脚本改成CMD支持的格式,用for /f来处理命令输出,用findstr替代awk的筛选功能:
for /f "tokens=3" %b in ('git fsck --lost-found ^| findstr "blob"') do git cat-file -p %b > %b.txt
注意点:
- 如果是把这段命令写到
.bat批处理文件里,要把%b改成%%b ^|是CMD里的管道转义符,必须加上,不然CMD会把管道当成命令结束符。
方法3:在PowerShell里运行
要是你用的是Windows PowerShell或者PowerShell 7,也可以用PowerShell的语法来写:
git fsck --lost-found | Where-Object { $_ -match 'blob' } | ForEach-Object { $blob = ($_ -split '\s+')[2] git cat-file -p $blob | Out-File "$blob.txt" }
这个写法更符合PowerShell的管道式风格,运行起来也很顺畅。
内容的提问来源于stack exchange,提问作者Nicole Weese
相关产品推荐
相关产品推荐

