53

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

我有一台运行 Ubuntu 11.10 的服务器,我基本上是在尝试从我的开发机器对我的 git 存储库进行初始提交。我以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/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/*

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

4

9 回答 9

67

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

于 2012-10-30T20:48:44.997 回答
26

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

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

$ chown username /home/username/git

然后返回 drwxrwxr-x 4 username 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

成功!

希望这对将来遇到相同问题的其他人有用!

资源

于 2012-10-31T02:04:04.400 回答
3

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

于 2012-10-30T20:47:20.757 回答
2

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

root@localhost:~#mkdir foldername
root@localhost:~#cd foldername
root@localhost:~#git init --bare
root@localhost:~#cd ../
root@localhost:~#chown -R usergroup:username foldername

在客户端,我使用这个

$ git remote add origin git@servername:/var/git/foldername
$ git push origin master
于 2016-11-19T02:20:34.977 回答
2

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

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

这将使团队成员能够推送到存储库,而不会互相干扰。

于 2018-03-24T19:27:28.067 回答
0

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

于 2019-03-03T19:25:02.827 回答
0

我通过授予用户对您正在使用的每个目录的权限来解决它,如下所示:

sudo chown user /home/user/git

等等。

于 2019-07-19T14:25:07.833 回答
0

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

于 2019-09-11T20:33:58.003 回答
0

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

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

WINDOWS 10 / VISUAL STUDIO 2019 或 GIT FOR WINDOWS

于 2021-06-14T17:29:52.177 回答