git 推送错误 - 无法写入包文件

git push error - unable to write pack file

我有一位同事在尝试推送到远程 git 存储库时遇到错误。

git 抱怨它无法写入远程仓库上的特定包文件。请参阅下面的屏幕截图。

我已经检查了明显的基本文件权限等。是的,他有 read/write 访问权限。是的,他使用的是正确的帐户。等等

我对 git 背后发生的事情了解不多,但我对包对象的理解是,它们基本上是单个文件对象的压缩和差异版本曾经包含在“objects/??”中目录。执行 git 推送时,git 将在将对象发送到远程仓库之前创建对象的打包文件以减少网络流量。

所以在我看来,打包文件一旦创建,就永远不应修改。那是对的吗?如果需要重新打包以表示新信息,难道 git 不只是创建一个新名称的新打包文件吗?所以我很困惑为什么 git 试图写入现有的包文件。

也许我的理解是错误的,但我希望有人能证实或否认我的立场,或许可以解释一下。

So it would seem to me that a pack file, once created, should never be modified. Is that correct?

一般来说,是的。但是,当 git pushthin pack 发送到其他存储库时,接收方 Git 必须“增肥”thin pack。这需要写权限。育肥时不应使用薄包,因此应允许写入。

由于您使用的是 Windows,可能导致此问题的明显候选者是某种安全(anti-virus 等)扫描程序,它会打开文件并阻止 Git修改它,阻止 git index-pack --fix-thin1 完成它的工作。如何解决这个问题,我不知道(我避免 Windows)。


1这就是打印 Resolving deltas 消息的内容。您可以在错误消息上方看到它必须添加到精简包中的对象数量。

如何托管和访问远程存储库?

我会查看远程服务器上 objects/pack 目录的所有者和访问标志,可能还有 pack-1263... 包文件上的标志。


假设使用错误的凭据在远程服务器上执行了某些操作(例如:sudo git gc,或某些操作 运行 作为管理员)并且 this 操作创建了所述目录或文件,则此项目将归 root/admin 所有,普通用户无法编辑。