我该如何配置gitweb和gitolite使它们能够一起工作?

13

我正在尝试让gitweb与gitolite一起工作...但目前尚未成功。
我在一个RedHat Linux机器上工作。存在一个名为git的用户。

gitolite安装在:/home/git
存储库位置:/home/git/repositories

请注意,gitweb在使用普通的vanilla git时可以正常工作。现在我正在尝试让它与gitolite一起工作。

以下是我的文件内容:

  • /etc/gitweb.conf

  • $projectroot = "/home/git/repositories";
    @git_base_url_list = qw(ssh://[MyHostName]/home/git/projects.list);
    $projects_list = "/home/git/projects.list"
    
  • /home/git/projects.list

  • myrepo1.git
    myrepo2.git 
    
  • /home/git/.gitolite.rc:

    /home/git/.gitolite.rc 是一个文件路径,指的是gitolite的配置文件。
    $PROJECTS_LIST = $ENV{HOME} . "/projects.list";
    $GL_GITCONFIG_KEYS = "gitweb.url receive.denyNonFastforwards receive.denyDeletes";
    
    我错过了哪些配置? 我没有对Apache进行任何更改。
    Web网址:http://MyHostName/git 这会显示404错误,显示“未找到存储库”。
3个回答

13

我最近设置了gitolite和gitweb,发现/etc/gitweb.conf需要进行非常少的配置。你现在的配置看起来是正确的。请问/home/git/repositories的权限如何?你可能会发现它们过于受限制。尝试使用以下命令:

$ chmod -R 775 /home/git/repositories

那就是解决我的问题的方法,(尽管我想象中可能有一种更安全的方式来设置权限)。如果有效,我建议仅查看在repositories目录上为Apache(或gitweb正在执行的任何用户帐户)提供更细粒度的权限。

我还在.gitolite.rc中加入了以下内容:

GIT_CONFIG_KEYS => 'gitweb\.(owner|description|category)',

为了让下面的内容在 <gitolite-admin>/conf/gitolite.conf 中起作用:

config gitweb.owner         =   owner name
config gitweb.description   =   some description
config gitweb.category      =   some category

4
为了稍微增加安全性,您可以将apache/ www-data用户添加到gitolite组中usermod -a -G gitolite apache,然后执行chmod -R 750 /home/git/repositories,并设置gitolite变量$REPO_UMASK = 0027; - Hamish Downer
1
$REPO_UMASK设置对我特别有用。 为仓库目录进行chmod操作,可以在下一次更新存储库之前运作,但是权限会在其中一个文件上重置为700。请注意,文档说明了如果要运行gitweb,则必须在gitolite中使用UMASK设置:http://gitolite.com/gitolite/g2/rc.html - Jason L
检查您的cmd chmod -R 775 /home/git/repositories:用户获得完全访问权限,组也可以读取和执行。为什么这么慷慨?我在使用curl localhost:1234时遇到了500错误,并且之前是755。更改为775并没有帮助。 - Timo

0

你需要在/etc/gitweb_config.perl的末尾添加Gitolite contrib/gitweb.conf
换句话说,你需要从你的gitweb.conf perl文件中调用一个Gitolite函数,否则GitWeb-Gitolite集成将永远无法工作。

# check for (at least) "R" permission
    my ($perm, $creator) = &repo_rights($repo);
    return ($perm =~ /R/);

(这里repo_rightsgitolite.pm中的一个方法)

请查看“帮助使用gitweb”部分。

你需要在gitweb_config.perl的末尾添加以下最后几行:

use lib (".");
require "gitweb.conf.pl";

那样,您将避免任何“500 - Internal Server Error syntax error at /etc/gitweb.conf”错误消息。
如果您没有一个gitweb_config.perl文件,在其中声明gitweb.conf.pl,而是直接使用“gitweb.conf.pl”,那么请在该文件的第一行添加“use lib (".");”。

在/etc/gitweb.conf的末尾,我需要添加哪一行?我尝试添加了这一行:$/home/git/gitolite/contrib/gitweb.conf,但是出现了错误。我想我误解了。 - Jee
@Jee:在/etc/gitweb.conf的末尾,您需要复制https://github.com/sitaramc/gitolite/blob/pu/contrib/gitweb/gitweb.conf的*所有*行(如果您在Gitolite安装中使用了不同的路径,则更改第21、23行的值)。 - VonC
@Jee:我更新了我的答案,以避免出现任何“语法错误”的信息。 - VonC
我在git主目录上递归地将目录权限更改为755(尝试了许多其他较低的权限,但似乎都不起作用)。这似乎解决了网页上的“未找到项目”问题。我没有将gitolite-contrib/gitweb.conf的内容添加到/etc/gitweb.conf中。现在我可以在网页上浏览存储库了。 - Jee
@Jee: 很棒,但我认为你的浏览不受Gitolite权限管理的影响。任何人都应该能够浏览你的存储库,即使根据gitolite conf文件他们不应该这样做。 - VonC
显示剩余2条评论

0
1/ 安装 `gitolite` 并进行设置。然后,只需确保 `/home/git/.gitolite.rc` 中包含取消注释的部分,如下所示:
%RC = (
    ...
    UMASK                           =>  0027,
    ...
    ENABLE => [
        ...
        'gitweb',
        ...
     ]
);

2/正确设置/etc/gitweb.conf$projectroot$projects_list指示(以匹配projects.list文件和repositories目录的位置)。像这样:

$projectroot = "/home/git/repositories";
...
$projects_list = "/home/git/projects.list";

3/ 确保当前存储库文件也可被 Web 服务器用户读取。这些示例来自基于 Debian 的系统,因此可能会有所不同:

sudo adduser www-data git                   # append `www-data` user to a `git` group
sudo chmod g+r /home/git/projects.list      # make sure group members can read the `project.list`
sudo chmod -R g+rx /home/git/repositories   # recursively set less restrictive access mode for group members
sudo /etc/init.d/apache2 restart            # restart web server to apply these changes

4/ 最后,在客户端的gitolite-admin仓库的/conf/gitolite.conf文件中配置gitweb用户的访问权限,并通过提交和推送(标准方式)来应用它们。我们想要通过gitweb查看和管理的仓库必须设置访问权限如下:

repo testing                                                                    
    RW+     = @all                                                              
    R       = gitweb  # add this line to make the repo browsable using `gitweb`

注意:"..."只是表示文件中还有其他配置指令。不要把它们放在那里!
使gitlab能够可视化gitolite存储库,不需要进行其他更改。
适用于gitolite 3.6.6和gitweb 2.1.4(至少)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接