致命:推送到远程存储库时对象已损坏



我有一台安装了 Gitolite 的服务器来托管我的存储库,我昨天和今天创建了一个新的存储库,当我尝试将更多提交推送到我得到的服务器时:

fatal: object 86eeaa0c5a154ff3df34d6a43669930b9c6c7f59 is corrupted
error: unpack failed: unpack-objects abnormal exit
error: failed to push some refs to

由于存储库非常新,我不太担心丢失以前的提交,所以我删除了我的本地和远程存储库,但仍然收到相同的错误。

正如我所说,我

不太关心维护我的提交历史记录,我只想让它再次工作!

如注释所示,任何其他存储库在创建过程中都存在问题(即在使用声明新存储库的gitolite.conf文件推回gitolite-admin存储库时)

以前没有注意到这一点,但是当我创建一个新的存储库时,我收到以下错误:

remote: line 1 too long: command="/home/git/gitolite/src/gitolite... 
remote: FATAL: fingerprinting failed for /tmp/Cdug9Itivq 

但它正在创建存储库/home/git/repositories

此操作发生在名为 ssh-authkeys 的编译后触发器中:

sub fp_file {
    return $selinux++ if $selinux; # return a unique "fingerprint" to prevent noise
    my $f = shift;
    my $fp = `ssh-keygen -l -f '$f'`;
    chomp($fp);
    _die "fingerprinting failed for '$f'" unless $fp =~ /([0-9a-f][0-9a-f](:[0-9a-f][0-9a-f])+)/;
    $fp = $1;
    return $fp;
}

这意味着ssh-keygen -l -f <path_to_public_key.pub>没有遵循正确的模式,如"自助服务密钥管理"所示。

确保您的密钥生成如下:

ssh-keygen -t rsa -f "${H}/.ssh/git" -C "Gitolite Admin access (not interactive)" -q -P ""

2015 年 4 月更新:

正如Starfry在"Gitolite - remote: FATAL:'keydir/'的指纹识别失败"中提到的:

在 6.8 版中,OpenSSH 中的密钥指纹格式发生了更改:

FingerprintHash选项添加到ssh(1)sshd(8),并将等效的命令行标志添加到其他工具中,以控制用于密钥指纹的算法。默认值从 MD5 更改为 SHA256,格式从十六进制更改为 base64。

指纹现在预置了哈希算法。
新格式的示例:

SHA256:mVPwvezndPv/ARoIadVY98vAC0g+P/5633yTC4d/wXE

请注意,可视主机密钥也将有所不同。

自 15 年 3 月 18 日以来,Gitolite 的最新 git 结账就知道这种新格式。

最新更新