Redmine + Gitolite - 存储库权限问题等等

时间:2012-10-21 17:23:54

标签: git redmine gitolite

我在与我的gitolite存储库相同的服务器上安装了Redmine。

为了将我的存储库链接到我的Redmine实例,我使用以下命令在本地克隆了repo:

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

正如我在服务器上成功克隆了repo一样,我可以像预期的那样浏览Redmine上的repo。

事情是,一旦我这样做,我就不能再向本地机器上的远程仓库推送任何东西了。

当我尝试

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

gitolite日志显示以下内容:

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 个答案:

答案 0 :(得分:16)

我设法让它工作,将原始回购指向Redmine,因为两个人都坐在同一台机器上,按照一些简单的步骤:

  1. 在Redmine上添加一个存储库,其中包含gitolite存储库的原始存储库。路径类似于/home/git/repositories/my-repo.git

  2. 最初,Redmine没有读取存储库的任何权限,因此我们通过将Redmine用户(通常为www-dataapache)添加到{{1}来解决问题通过运行git进行分组(请注意您的服务器配置,因为根据您配置gitolite的方式,这可能会有所不同。

  3. usermod -a -G git www-data文件的UMASK属性从默认值.gitolite.rc更改为0077,相当于目录的0022755 (rwxr-xr-x)文件。

  4. 对于现有的回购,您可能需要运行644 (rw-r--r--)

  5. 如果您仍然遇到Redmine权限问题,它会在存储库选项卡上打开chmod -R g+rX而不是repo,您​​可能需要在整个404上运行chmod -R g+rX ,以确保Redmine用户可以一直阅读回购。

答案 1 :(得分:1)

如果git repack remote/origin/master无法解决问题,请检查您的umask(umask 0002)以避免任何写入权限问题,如“git: can't push (unpacker error)”中所述。

除此之外,“Unpacker error Git-pushing from bare repo to staging server”总结了要检查的所有其他要点。