我破坏了(本地)git仓库。问题出在我的Python脚本中添加了以'./'开头的文件名。
当我尝试进行git push操作时,会得到以下错误信息:
当我谷歌搜索时,唯一与我的问题相关的是这个未回答的SO问题,其中作者遇到了hasDotgit: 包含'.git'错误。
我运行了git show a6cc7dfb40e8c513415315d6ed84143448bd4f99:
我不知道该怎么办,因为在互联网上找不到关于这个问题的任何信息,即使在git源代码中搜索也没有显示任何结果。我宁愿在普通的git中修复这个问题,而不是再次使用python模块(顺便提一下,当我尝试删除文件时,它还会给我fatal:pathspec错误)。 编辑1:git ls-tree --long --abbrev --full-name a6cc7dfb40e8c513415315d6ed84143448bd4f99
当我尝试进行git push操作时,会得到以下错误信息:
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 4.03 KiB | 0 bytes/s, done.
Total 6 (delta 1), reused 0 (delta 0)
remote: error: object a6cc7dfb40e8c513415315d6ed84143448bd4f99: hasDot: contains '.'
remote: fatal: Error in object
error: unpack failed: unpack-objects abnormal exit
To git@framagit.org:xxx/yyy.git
! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'git@framagit.org:xxx/yyy.git'
当我谷歌搜索时,唯一与我的问题相关的是这个未回答的SO问题,其中作者遇到了hasDotgit: 包含'.git'错误。
我运行了git show a6cc7dfb40e8c513415315d6ed84143448bd4f99:
./
./file1
./file2
...
file1
file2
...
并且 git fsck --full:
warning in tree a6cc7dfb40e8c513415315d6ed84143448bd4f99: hasDot: contains '.'
我认为我需要在git中删除./files,但是git rm "./file1"会删除常规的file1文件,而不是./file1。如果我再次运行该命令,我会得到以下内容:
fatal: pathspec './file1' did not match any files
我不知道该怎么办,因为在互联网上找不到关于这个问题的任何信息,即使在git源代码中搜索也没有显示任何结果。我宁愿在普通的git中修复这个问题,而不是再次使用python模块(顺便提一下,当我尝试删除文件时,它还会给我fatal:pathspec错误)。 编辑1:git ls-tree --long --abbrev --full-name a6cc7dfb40e8c513415315d6ed84143448bd4f99
040000 tree 22b75ee - .
100644 blob d519532 3580 file1
...
100644 blob 03e914c 6754 fileN
列表中没有./file
Edit2: 如果使用--full-tree代替--full-name,则结果相同。
git ls-tree --long --abbrev --full-name a6cc7dfb40e8c513415315d6ed84143448bd4f99
的输出吗? - Romanls-tree
输出中看到。我怀疑最简单的修复方法是使用命令行git重新创建有问题的提交。 - Romanfsck.c
在创建错误消息时会跳过一些步骤,这些步骤最终使得在源代码中使用grep查找错误消息变得非常困难。fsck.c
使用xmacros从错误ID创建错误消息,但也会转换ID,以便从消息中删除下划线并将大多数(但不是全部)字符转换为小写。因此,打印出来的内容接近于代码中的标识符,但不同之处足以使得当你的起点是:“我遇到了这个错误,它是从哪里来的?”时很难进行grep查找。 - Michael Burr