Подтвердить что ты не робот

Fatal: невозможно создать временный файл '/home/username/git/myrepo.git/./objects/pack/tmp_pack_XXXXXX': разрешение отклонено

У меня возникли проблемы с этим сообщением об ошибке, и я не понимаю правильное решение для его исправления или отладки. Я искал ошибку в разных формах, но ни одно реальное решение не представилось. Я предполагаю, что это проблема с разрешениями, но я действительно не знаю, как проверить или что я должен проверить.

У меня есть сервер, на котором запущен 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://[email protected]/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://[email protected]/home/username/git/myrepo.git'

Мой файл .git/config:

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

Аналогичный вопрос: Как выполнить первоначальный переход в удаленный репозиторий с помощью Git?

4b9b3361

Ответ 1

Похоже, у вас есть файл в репозитории git, принадлежащем root. Поскольку вы используете ssh'ing как "имя пользователя", чтобы сделать push, файлы должны быть доступны для записи по имени пользователя. Проще всего, вероятно, создать репо, как пользователь, и использовать одного и того же пользователя для выполнения ваших нажатий. Другой вариант - создать группу, сделать все доступной для записи группой и сделать ваш пользователь членом этой группы.

Ответ 2

Хорошо, я понял это. Проблема заключалась в том, что у меня не было правильных разрешений для 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

Затем я создаю новый каталог для myrepo.git внутри 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/

Затем я выхожу из корня и подписываюсь на сервер как имя пользователя:

Внутри каталога git:

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

На локальной машине:

$ git remote add origin      
ssh://[email protected]/home/username/git/myrepo.git
$ git push origin master

УСПЕХ!

Надеюсь, это будет полезно для всех, кто сталкивается с той же проблемой в будущем!

Ресурсы

Ответ 3

Казалось бы, у вашего пользователя нет права на запись в этот каталог на сервере. Убедитесь, что разрешения правильные. Пользователю потребуются права на запись в этот каталог.

Ответ 4

Спасибо доктору Брэнсону, я решаю свою проблему. Я думаю, что в следующий раз я должен использовать этот код, когда я создам свое репо на сервере:

[email protected]:~#mkdir foldername
[email protected]:~#cd foldername
[email protected]:~#git init --bare
[email protected]:~#cd ../
[email protected]:~#chown -R usergroup:username foldername

И на клиенте, я этот пользователь

$ git remote add origin [email protected]:/var/git/foldername
$ git push origin master

Ответ 5

Просто попробуйте сделать это (через root-доступ) - "chmod -R 777/home/username/git"

Ответ 6

Одна из основных проблем, связанных с отправкой в GIT, заключается в том, что материал, который вы нажимаете, будет отображаться как ваш материал и будет блокировать представления от других людей в команде. Будучи администратором GIT-репозитория, вы должны управлять хуками, чтобы Алиса не блокировала Боба. Для этого вам нужно убедиться, что все ваши разработчики принадлежат группе, давайте назовем ее "разработчиками", а хранилище принадлежит root: developers, а затем добавим это в скрипт hooks/post-update:

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

Это сделает так, чтобы члены команды могли перемещаться в хранилище, не наступая друг другу на пальцы.

Ответ 7

Я решил это, дав пользователю разрешение на каждый из каталогов, которые вы используете, например:

sudo chown user /home/user/git

и так далее.