一、问题描述
刚刚在敲完某个模块的代码,提交代码到那么本地分支,然后push到远程分支的时候,出现了下面的错误,提示我Push rejected。然后没有其他的提示了。
使用 git bash 终端,输入git push 命令,也提示被拒绝,如下所示:
$ git push
Counting objects: 59, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (51/51), done.
Writing objects: 100% (59/59), 7.13 KiB | 0 bytes/s, done.
Total 59 (delta 43), reused 0 (delta 0)
error: unpack failed: unable to create temporary object directory
To 172.28.xxx.xxx:Android/XXXXX.git
! [remote rejected] feature/TalentXXXXX -> feature/TalentXXXXX (unpacker error)
error: failed to push some refs to 'git@172.28.xxx.xxx:Android/PhoneApp/XTCWatch.git'
二、解决问题
1、查看.git目录权限
提示: unable to create temporary object directory
无法创建临时目录,看样子应该是权限问题,怀疑是.git文件夹写权限问题。
我去查看了下远程服务器上的协议权限如下所示:
root@ubuntu4146:/data/gitlabData/repositories/Android/XXX# ll
total 32
drwxrwx--- 8 git git 4096 10月 31 2017 ./
drwxrwx--- 9 git git 4096 6月 7 15:00 ../
drwxr-xr-x 6 git git 4096 8月 3 16:47 XXXX.git/
发现 XTCWatch.git的权限变成了 drwxr-xr-x 6 git git 4096 8月 3 16:47 XTCWatch.git/
,
表示权限的10个字符用于确定不同用户能对文件干什么
- 第一个字符代表文件(
-
)、目录(d
),链接(l
)
其余字符每3个一组(rwx
),读(r
)、写(w
)、执行(x
)
-
第一组
rw-
:文件所有者的权限是读、写,但是不能执行 -
第二组
r-x
:权限是读、执行,但是不能写 -
第三组
r-x
:权限是读、执行,但是不能写
也可用数字表示为:r=4,w=2,x=1 因此rwx=4+2+1=7
因此,我们push所以会失败就是因为我们没有权限进行写。
2、查看为什么不能写的原因
我怀疑是不是系统磁盘不够用了,去查了下系统剩余磁盘。 好家伙,居然一点磁盘剩余空间都没有了。
root@ubuntu4146:/data/gitlabData/repositories/Android/XXXX# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 28G 14G 13G 52% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 32G 4.0K 32G 1% /dev
tmpfs 6.3G 1.8M 6.3G 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 32G 4.0K 32G 1% /run/shm
none 100M 0 100M 0% /run/user
/dev/sda5 238G 60M 226G 1% /home
/dev/sdb 1.8T 1.8T 0 100% /data
如上图所示:/data
目录磁盘已满,而gitlab
的仓库就放在/data
目录下。因此就无法进行写操作啦。
好吧,我去清理下垃圾数据,要保证磁盘可用。清理完后的磁盘剩余空间情况如下所示:
root@ubuntu4146:/data/gitlabData/repositories/Android/XXXX# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 28G 14G 13G 52% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 32G 4.0K 32G 1% /dev
tmpfs 6.3G 1.8M 6.3G 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 32G 4.0K 32G 1% /run/shm
none 100M 0 100M 0% /run/user
/dev/sda5 238G 60M 226G 1% /home
/dev/sdb 1.8T 1.7T 91G 95% /data
清理完磁盘空间之后,我再进行push操作就可以使用了。
下午04:05分
的时候,还是不能git push
的
下午 04:05 Push rejected: Push feature/XXXX to origin/feature/XXXX was rejected by remote
将GitLab服务器的磁盘清理完毕之后,下午04:47
分的时候再次git push 即可成功
了。
下午 04:47 Push successful: Pushed 157 commits to origin/feature/XXXX
总结
出现git push
失败,提示 : unable to create temporary object directory
。肯定是远程服务器对应的仓库权限不够了。至于为什么会权限不够的原因可能有很多种,需要根据实际情况去判断。这一次我遇到问题是因为GitLab服务器的磁盘已经没有了,导致无法进行写文件操作。
其他读者遇到此问题,可以仅仅参考,然后自己去解决实际问题。如果你不是git服务器的管理员之类的,可以尝试联系管理员来解决!
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:https://blog.csdn.net/qq446282412/article/details/81431208
如果觉得本文对您有所帮助,欢迎您扫码下图所示的支付宝和微信支付二维码对本文进行随意打赏。您的支持将鼓励我继续创作