致命:无法创建临时文件'/home/username/git/myrepo.git/./objects/pack/tmp_pack_XXXXXX':权限被拒绝

时间:2012-10-30 20:19:16

标签: git

我一直遇到此错误消息的问题,我不明白解决它的正确解决方案或调试它。我用各种形式搜索了错误,但没有真正的解决方案。我假设这是一个权限问题,但我真的不知道如何检查或我应该检查什么。

我有一台运行Ubuntu 11.10的服务器,我基本上试图从我的开发机器初始提交我的git repo。我是以root身份运行的。我应该以用户身份运行吗?

在服务器上创建回购:

$ cd /home/username/git
$ mkdir myrepo.git
$ cd myrepo.git/
$ git --bare init

在开发机器上创建回购:

Goto rails project directory first
$ git init
$ git add .
$ git commit -m "initial commit"
$ bundle pack
$ git add Gemfile.lock vendor/cache
$ git commit -m "bundle gems"
$ git remote add origin ssh://username@server.com/home/username/git/myrepo.git
$ git push origin master

错误:

fatal: Unable to create temporary file '/home/username/git/myrepo.git/./objects/pack/tmp_pack_XXXXXX': Permission denied
error: pack-objects died of signal 13
error: failed to push some refs to 'ssh://username@server.com/home/username/git/myrepo.git'

我的.git /配置文件:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[remote "origin"]
    url = ssh://username@server.com/home/username/git/myrepo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

类似的问题: How do I do an initial push to a remote repository with Git?

9 个答案:

答案 0 :(得分:60)

听起来你在root拥有的git repo中有文件。由于您正在使用“用户名”进行推送,因此文件必须可以通过用户名进行写入。最简单的事情可能是创建repo作为用户,并使用相同的用户进行推送。另一个选择是创建一个组,使组内的所有内容都可写,并使您的用户成为该组的成员。

答案 1 :(得分:24)

好的,我明白了。问题是我没有为myrepo.git和父目录git设置正确的权限。

以root身份登录服务器并使用:

$ chown username /home/username/git

然后使用以下内容返回drwxrwxr-x 4用户名root 4096 2012-10-30 15:51 / home / username / git:

$ ls -ld /home/username/git

然后我在git中为myrepo.git创建了一个新目录:

$ mkdir myrepo.git
$ ls -ld myrepo.git/
drwxr-xr-x 2 root root 4096 2012-10-30 18:41 myrepo.git/

但它将用户设置为root,因此我将其更改为用户名,方法与之前相同。

$ chown username myrepo.git/
$ ls -ld myrepo.git/
drwxr-xr-x 2 username root 4096 2012-10-30 18:41 myrepo.git/

然后我退出root并以用户名登录服务器:

在git目录中:

$ cd myrepo.git/
$ git --bare init
Initialized empty Git repository in /home/username/git/myrepo.git/

在本地计算机上:

$ git remote add origin      
ssh://username@server.com/home/username/git/myrepo.git
$ git push origin master

SUCCESS!

希望这对于将来遇到同样问题的其他人来说都很方便!

资源

答案 2 :(得分:2)

您的用户似乎无权写入服务器上的该目录。请确保权限正确。用户将需要该目录的写权限。

答案 3 :(得分:1)

感谢Don Branson,我解决了我的问题。我想下次我在服务器上构建我的repo时应该使用这段代码:

$ git remote add origin git@servername:/var/git/foldername
$ git push origin master

在客户端,我使用此

/*
#cgo pkg-config: python3
#define Py_LIMITED_API
#include <Python.h>
*/
import "C"

//export Nothing
func Nothing(self, args *C.PyObject) (status *C.PyObject) {
    C.Py_IncRef(C.Py_None)
    return C.Py_None
}

答案 4 :(得分:1)

只需尝试执行此操作(通过root用户访问)-“ chmod -R 777 / home / username / git”

答案 5 :(得分:0)

推送到GIT的主要问题之一是您推送的材料将显示为您的材料,并将阻止团队中其他人的提交。作为GIT存储库管理员,您必须管理挂钩以防止Alice推动阻止Bob推送。要做到这一点,您需要确保您的开发人员都属于某个群组,我们可以将其称为“开发人员”。并且存储库由root:developers拥有,然后将其添加到hooks / post-update脚本:

sudo chown -R root:developers $GIT_DIR
sudo chmod -R g+w $GIT_DIR

这将使团队成员能够在没有踩到彼此的脚趾的情况下推送到存储库。

答案 6 :(得分:0)

我通过授予用户所使用的每个目录的权限来解决此问题,例如:

sudo chown user /home/user/git

以此类推。

答案 7 :(得分:0)

可能是您要推送到的git服务器已关闭/崩溃,而解决方案在于重新启动git服务器。

答案 8 :(得分:0)

就我而言(WINDOWS 10),它是 Microsoft Defender(我只是从其他防病毒软件切换到 Defender)。

我只是把我的 C:\Users\USERNAME\PROJECT-PATH.git\objects\pack 放在排除列表和魔法中。 :)

<块引用>

WINDOWS 10 / VISUAL STUDIO 2019 或 GIT FOR WINDOWS