从 Git 存储库清除文件失败,无法创建新备份
Posted
技术标签:
【中文标题】从 Git 存储库清除文件失败,无法创建新备份【英文标题】:Purging file from Git repo failed, unable to create new backup 【发布时间】:2011-09-18 05:12:53 【问题描述】:我试图通过运行从我的远程仓库中删除一个文件:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
但 Git 抱怨说
无法创建新备份。以前的备份已经存在于 refs/original/ 使用 -f 强制覆盖备份 rm:无法删除 /.git-rewrite/backup-refs :权限被拒绝 rm: 无法删除目录 /.git-rewrite : 目录不为空
这是在我已经删除 Windows 上的 .git-rewrite 目录之后。
如何删除该文件?这是一个 29Mb 的文件,位于我的仓库中,所以我非常需要删除该文件。
我试图删除git rebase -i
中的提交,但显然因为该提交涉及很多不同的文件,Git 抱怨冲突,我为了安全而中止了。
【问题讨论】:
对于搜索引擎:当您的错误消息为.git-rewrite already exists, please remove it
时,这也可能适用。
【参考方案1】:
使用此命令删除原始备份:
git update-ref -d refs/original/refs/heads/master
这是我用来过滤分支我的 git repo 的要点:https://gist.github.com/k06a/25a0214c98bc19fd6817
【讨论】:
这是删除备份的正确解决方案!删除.git/refs/original/
并不能解决问题。
确保将“master”更改为您尝试修复的分支。在我的情况下为“develop”
git show-ref | awk '/ refs.original.refs/print$2'
查找您的仓库拥有的所有备份。【参考方案2】:
我遇到了同样的问题,上面的答案没有解决。没有 .git/refs/original/ 目录了。我的解决方案是删除 .git/packed-refs 文件。
【讨论】:
同样的问题。但是,没有.git/packed-refs
文件,并且.git/refs
中没有文件夹original
。有人吗?
通过在命令中添加-r
标志解决了here。
这里有同样的问题。删除 packed-refs 解决了这个问题,但它也破坏了我的 git 目录的其余部分,我不得不从备份中恢复。【参考方案3】:
您已经执行了过滤器分支操作。在 filter-branch 之后,Git 保留对旧提交的引用,以防出现问题。
您可以在.git/refs/original/…
中找到它们。要么删除该目录和其中的所有文件,要么使用 -f
标志强制 Git 删除旧的引用。
git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
【讨论】:
终于可以使用了,谢谢!我确实尝试了 -f 标志,但问题是我将它放在命令的末尾,例如。头-f。看到你的命令让我试着把旗帜放在开头,它奏效了! =D 选项标志 (-f
) 位于裁判 (HEAD
) 之前。裁判到最后
添加 -f 并删除目录后,我仍然遇到同样的错误。有什么想法吗?
@knittl,我指的不是git add
。即使在删除.git/refs/original/
文件夹并在git filter-branch
命令中使用-f
标志后,我仍收到与原始海报相同的错误。就我而言,解决方案是删除 .git/packed-refs
文件。
@knittl,我找到了解决方法,但没有找到问题所在。基本上,我在命令git rm
中添加了--ignore-unmatch
,并且进展顺利!【参考方案4】:
向过滤器分支命令添加强制。
【讨论】:
以上是关于从 Git 存储库清除文件失败,无法创建新备份的主要内容,如果未能解决你的问题,请参考以下文章