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

rjd*_*rjd 45 git

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

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

在服务器上创建回购:

$ cd /home/username/git
$ mkdir myrepo.git
$ cd myrepo.git/
$ git --bare init
Run Code Online (Sandbox Code Playgroud)

在开发机器上创建回购:

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
Run Code Online (Sandbox Code Playgroud)

错误:

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'
Run Code Online (Sandbox Code Playgroud)

我的.git/config文件:

[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/*
Run Code Online (Sandbox Code Playgroud)

类似的问题: 如何使用Git初始推送到远程存储库?

Don*_*son 62

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


rjd*_*rjd 24

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

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

$ chown username /home/username/git
Run Code Online (Sandbox Code Playgroud)

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

$ ls -ld /home/username/git
Run Code Online (Sandbox Code Playgroud)

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

$ mkdir myrepo.git
$ ls -ld myrepo.git/
drwxr-xr-x 2 root root 4096 2012-10-30 18:41 myrepo.git/
Run Code Online (Sandbox Code Playgroud)

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

$ chown username myrepo.git/
$ ls -ld myrepo.git/
drwxr-xr-x 2 username root 4096 2012-10-30 18:41 myrepo.git/
Run Code Online (Sandbox Code Playgroud)

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

在git目录中:

$ cd myrepo.git/
$ git --bare init
Initialized empty Git repository in /home/username/git/myrepo.git/
Run Code Online (Sandbox Code Playgroud)

在本地机器上:

$ git remote add origin      
ssh://username@server.com/home/username/git/myrepo.git
$ git push origin master
Run Code Online (Sandbox Code Playgroud)

成功!

希望这对于未来遇到同样问题的其他任何人都派上用场!

资源

  • 非常有帮助!感谢您一步一步地完成它,以便我能够查明我的问题. (2认同)