Redmine + Gitolite - проблема с разрешениями хранилища и другими

У меня есть установка Redmine на том же сервере, что и мои репозитории gitolite.

Чтобы связать мой репозиторий с моим экземпляром Redmine, я локально клонировал репозиторий с помощью следующей команды:

git clone --bare --local /home/git/repositories/my-repo.git

Так же, как я успешно клонировал репо на сервере, я могу перемещаться по репо в Redmine, как и ожидалось.

Дело в том, что, как только я это сделаю, я не могу больше ничего толкать к удаленному репо на моей локальной машине.

Когда я пытаюсь

git push

Я получаю следующие ошибки:

Counting objects: 15, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (8/8), 695 bytes, done.
Total 8 (delta 6), reused 0 (delta 0)
fatal: loose object 455f30c5243ec5b5cc698b1e51bdfb23ee6c1b22 (stored in     ./objects/45/5f30c5243ec5b5cc698b1e51bdfb23ee6c1b22) is corrupt
error: unpack failed: unpack-objects abnormal exit
To git@dev.my-host.org:my-repo.git
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'git@my-host.org:my-repo.git'

Есть идеи по этому поводу?

РЕДАКТИРОВАТЬ #1

Гитолитовые журналы показывают следующее:

2012-10-22.10:59:59     13121   ssh     ARGV=drgomesp   SOC=git-receive-pack 'my-repo.git'   FROM=187.65.248.7
2012-10-22.11:00:00     13121           access(my-repo, drgomesp, W, 'any'),-> refs/.*
2012-10-22.11:00:00     13121           trigger,Writable,access_1,ACCESS_1,my-repo,drgomesp,W,any,refs/.*
2012-10-22.11:00:00     13121   pre_git my-repo      drgomesp        W       any     -> refs/.*
2012-10-22.11:00:00     13121           system,git,shell,-c,git-receive-pack '/home/git/repositories/my-repo.git'
2012-10-22.11:00:00     13121   END

2 ответа

Решение

Мне удалось заставить его работать, указывая исходное хранилище на Redmine, так как оба находятся на одной машине, выполнив несколько простых шагов:

  1. Добавьте репозиторий на Redmine с оригинальным репозиторием репозитория gitolite. Путь будет что-то вроде /home/git/repositories/my-repo.git,

  2. Изначально Redmine не имеет никаких прав для чтения репозитория, поэтому мы решаем проблему, добавляя пользователя Redmine (обычно www-data или же apache) к git группа по бегу usermod -a -G git www-data (знайте о конфигурации вашего сервера, потому что она может немного отличаться в зависимости от того, как вы настроили gitolite.

  3. Изменить UMASK собственность на .gitolite.rc файл, из значения по умолчанию 0077 в 0022, эквивалент 755 (rwxr-xr-x) для каталогов и 644 (rw-r--r--) для файлов.

  4. Для существующих репозиториев вам может потребоваться запустить chmod -R g+rX

Если вы все еще испытываете проблемы с разрешениями в Redmine, где он открывает 404вместо репо на вкладке репозитория, вам может потребоваться запустить chmod -R g+rX в целом /home/git/repositories, чтобы удостовериться, что пользователь Redmine может читать весь путь через репозитории.

Если git repack remote/origin/master не решает проблему, проверьте ваш umask (umask 0002), чтобы избежать каких-либо проблем с правами на запись, как указано в " git: can push (ошибка распаковщика)".

Помимо этого, " Распаковка ошибок Git-pushing с чистого репо на промежуточный сервер" суммирует все остальные пункты для проверки.

Другие вопросы по тегам