【问题标题】:Git, error: remote unpack failed: unable to create temporary object directory - By creating new BranchGit,错误:远程解包失败:无法创建临时对象目录 - 通过创建新分支
【发布时间】:2018-12-31 20:49:37
【问题描述】:

我正在尝试在我的仓库中创建一个新分支。

我这样做了:

git branch events
git Checkout events

那行得通。所以我更改了一些文件并做了:

git Status
git add --all
git commit -m "Commit"

效果很好,但我试图推动它并没有奏效:

git push -u origin events

这是错误:

Enumerating objects: 9, done.                                                                                                                       
Counting objects: 100% (9/9), done.                                                                                                                 
Delta compression using up to 4 threads.                                                                                                            
Compressing objects: 100% (5/5), done.                                                                                                              
Writing objects: 100% (5/5), 716 bytes | 716.00 KiB/s, done.                                                                                        
Total 5 (delta 4), reused 0 (delta 0)                                                                                                               
error: remote unpack failed: unable to create temporary object directory                                                                            
To http://git.int.censoredlink/scm/freeb/freebrep.git                                                                                       
 ! [remote rejected] events -> events (unpacker error)                                                                                              
error: failed to push some refs to 'http://stsu@git.int.censoredlink/scm/freeb/freebrep.git'

我不知道为什么它不起作用。

我拥有回购的管理员权限。我审查了回购的链接,因为它是一个带有私人链接的内部回购。

【问题讨论】:

  • 如果有人遇到这种情况,我的解决方案就是删除我的开发服务器上的文件。原来我的开发服务器存储已用完。
  • 仅供参考,我得到这个是因为我无意中使用服务器上有效的用户帐户克隆了一个 repo,但没有对 repo 的写访问权限(D'Oh!) .我通过编辑 .git/config 中的“远程源”条目来修复它。
  • 检查服务器端.git 目录的权限(或从推送用户在服务器端创建git init
  • @MartinCR 你在 .git/config 的 remote-origin 条目中编辑了什么?那是在远程服务器上吗?还是本地克隆?
  • @m4l490n 在本地克隆中:在 [remote "origin"] 部分中,我只是将 url=... 行中的用户名更改为具有写入权限的用户名

标签: git git-branch git-commit git-push git-repo


【解决方案1】:

这个错误信息:

error: remote unpack failed: unable to create temporary object directory

表示 服务器(不是您的 Git)上的 Git 存储库空间不足,或遇到类似的服务器问题,1 或安装不正确。也就是说,给定:

To: http://git.int.censoredlink/scm/freeb/freebrep.git

您必须在git.int.censoredlink 登录到提供HTTP 流量的机器,然后走到scm/freeb/freebrep.git 目录,并在那里更正安装。这很可能是权限问题:接收 Git 必须能够在对象区域中创建名为 incoming-XXXXXX 的目录,并将 Xs 替换为唯一标识符,然后在该目录中创建 pack 子目录.

所有传入的对象和包文件都放置在这些目录中,在某种隔离过程中,直到服务器端 Git 挂钩对引用名称更新请求感到满意。如果推送失败,则简单地删除隔离目录。如果推送成功,则将隔离对象和/或包文件迁移(并调整精简包)到正常对象存储区域。请注意,即使隔离过程成功,迁移也可能失败;但如果这样做,您会收到一个向客户端报告的不同错误。 (这个错误也必须在服务器上纠正。)

注意:推送到http:// 而不是https://ssh:// URL 是相当不寻常的。检查您的服务器配置,看看谁将拥有由此创建的各种文件,以及 Web 服务器将拥有哪些权限。


1如果硬盘驱动器出现故障,Linux 有时会将驱动器和/或其文件系统标记为只读。或者,即使您有磁盘空间,也可能会用完 inode。许多不同的根本原因都将导致在您的客户端上观察到相同的行为。如果您是检查服务器的 Linux 管理员,请查找系统日志消息,并同时考虑 dfdf -i 输出。

【讨论】:

  • 不完全正确,但我仍然赞成这一点,因为它包含快速调试所需的线索:mkdir objects/incoming-XXXXXX 在服务器管理员需要的情况下显示“设备上没有剩余空间”修复我刚刚遇到的问题。如果您可以为此改写或重组答案,那就太好了。 (我同意所有您的观点,包括最后一段,但这不是造成这种影响的唯一原因。)
  • @mirabilos 这是另一个可能的原因。错误的权限是更典型的问题。
  • 当然......如果它以前从未工作过,但如果这突然开始发生,则不会☻
  • @mirabilos: 取决于你是否使用ssh://<user>@<server> 推送并设置了群组权限。这就是我经常看到这种情况发生的地方。
【解决方案2】:

当我尝试推送到“审查的 git 服务器”时,我遇到了同样的错误。问题出在服务器端。您可以等待一段时间,直到服务器正常恢复联机,或者只是联系管理员修复它:)

【讨论】:

  • 对不起,伙计,但这个答案没有提供任何有用的见解。
  • 抱歉,我无法提供正确的解释。在公司工作时,我曾多次遇到此错误,并且通常在服务器关闭时遇到此错误。后来,当服务器恢复正常时,我可以执行推送命令。无论如何,感谢您的反馈:)
【解决方案3】:

在删除远程 git 存储库中的 .git 子目录之前,我遇到了同样的错误。

.git 子目录不可被 git 登录帐户写入。最初我在尝试提交时遇到权限问题,我怀疑 .git 子目录是在那时创建的。

【讨论】:

    【解决方案4】:

    因为这个错误信息,我被重定向到这里。

    错误:远程解包失败:无法创建临时对象目录

    仅供参考:当您以只读方式挂载 git 目录时也会发生这种情况

    例如x.x.x.x:/nas/git on /mnt/git type nfs (ro,.....

    【讨论】:

      【解决方案5】:

      如果您是root user请先将用户更改为your git user,然后再更改为init your git directory

      1. 如果你是 root -> $ [root@server ~]#
      2. 更改用户 -> $ su - 用户名
      3. init a git repo -> [username@server ~] $ git init --bare git-repo.git
      4. 从客户端推送 -> 现在您可以从客户端推送:
        git remote add yourAliasName ssh://username@IP-or-HOST:sshPort/home/username/git-repo.git

      注意:
      我想您已经在您的客户端中创建了一个public/private key,并将公钥传递给/home/username/.ssh/authorized_keys 服务器文件。否则你必须在第(4)步之前完成。

      【讨论】:

        【解决方案6】:

        最近我确实遇到了这个错误。问题是用户没有足够的权限,例如 git remote add production ssh://username@{your-ip}/var/test/test.git` 确保用户名没有权限

        【讨论】:

          【解决方案7】:

          假设您在 Mac 上连接到 AWS 上自己的 ubuntu 服务器。

          很可能您将以用户“ubuntu”的身份连接。

          如果权限不是问题(只是你自己),只需登录到你的 ubuntu 服务器,然后

          ] chown ubuntu:ubuntu
          

          所有有问题的 git 目录。这样就可以了。

          【讨论】:

            【解决方案8】:

            对我来说,这是一个悬空的、崩溃的 gitk-session:专门阻止 windows 机器上的文件访问。

            【讨论】:

              【解决方案9】:

              90% 的可能性是权限问题。

              1. 登录远程服务器。
              2. 导航到“freebrep.git”所在的“/scm/freeb”。
              3. 调用 chown -R yourusername freebrep.git(您的用户名为 stsu )
              4. 再试一次。现在它应该允许写入对象了。

              【讨论】:

                猜你喜欢
                • 2021-02-04
                • 1970-01-01
                • 2023-01-19
                • 2016-01-11
                • 2016-12-18
                • 2011-06-29
                • 1970-01-01
                • 2012-06-27
                • 2012-01-15
                相关资源
                最近更新 更多