【问题标题】:Redmine + Gitolite - Issue with repository permissions and moreRedmine + Gitolite - 存储库权限等问题
【发布时间】:2012-10-21 17:23:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: git redmine gitolite


    【解决方案1】:

    通过以下一些简单的步骤,我设法让它将原始存储库指向 Redmine,因为它们都位于同一台机器上:

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

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

    3. .gitolite.rc 文件上的UMASK 属性从默认值0077 更改为0022,相当于目录的755 (rwxr-xr-x) 和文件的644 (rw-r--r--)

    4. 对于现有的存储库,您可能需要运行 chmod -R g+rX

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

    【讨论】:

    • 感谢您的提示。 setfacl -R -m git:rX ~git/repositories/ 为我做了诀窍
    • 我得到 stderr: fatal: Not a git repository: '/home/git/repositories/myrepo.git' 在现有的 repo 上,其中有提交。知道为什么会发生这种情况吗?运行 redmine 3.1。在网页中显示 404。
    【解决方案2】:

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

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

    【讨论】:

    • 重新打包命令不能解决问题。关于um​​ask,什么都没有出现。我不确定这是一个权限问题。有其他选择吗?
    • @DanielRibeiro 在服务器上设置umask 0002 仍然是推荐的,只是看看这是否对当前问题有任何影响。我知道的大多数替代方案都列在我在答案中引用的两个 SO 问题中。
    • 我该怎么做?直接在服务器上执行命令?
    • 服务器没问题,如 0002 和应该如何。有其他选择吗?
    • 只要我在存储库上执行 chown apache,一切似乎都可以正常工作,这样 Redmine 就可以读取它。然后,我不能再从本地推送了。这看起来很奇怪......
    猜你喜欢
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2013-05-04
    • 2023-03-08
    • 2011-04-02
    • 2017-05-04
    相关资源
    最近更新 更多