How do I have to configure gitweb and gitolite so they'll work together?

筅森魡賤 提交于 2019-11-29 03:41:16

问题


I am trying to make gitweb work with gitolite... but unsuccessful so far.
I am working on a RedHat Linux machine. A user called git exists.

gitolite is installed under: /home/git
Repository location: /home/git/repositories

Please note that, gitweb was working fine with plain vanilla git. Now i am trying to make it work with gitolite.

Here are what my files look like:

  • /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:

    $PROJECTS_LIST = $ENV{HOME} . "/projects.list";
    $GL_GITCONFIG_KEYS = "gitweb.url receive.denyNonFastforwards receive.denyDeletes";
    

What configuration have I missed? I have not made any changes to Apache.

Web URL: http://MyHostName/git
This gives a 404 error saying - No repositories found.


回答1:


I recently set up gitolite and gitweb and found that /etc/gitweb.conf required very little configuration. What you have looks right to me. What are the permissions like on /home/git/repositories? You may find they are too restrictive. Try this out:

$ chmod -R 775 /home/git/repositories

That's what solved the issue for me, (though I imagine there's a more secure way to set up the permissions). If that works, I'd recommend just having a look into giving Apache (or whatever user account gitweb is being executed under) more fine-grained permissions over the repositories directory.

I also have this in my .gitolite.rc:

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

so that the following works in <gitolite-admin>/conf/gitolite.conf:

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



回答2:


You need to add the Gitolite contrib/gitweb.conf at the end of /etc/gitweb_config.perl.
In other words, you need to call a Gitolite function from your gitweb.conf perl file, otherwise the integration GitWeb-Gitolite will never work.

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

(here repo_rights is a method from gitolite.pm)

Check the section "helping with gitweb".

The last lines you need to add at then end of gitweb_config.perl are:

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

That way, you will avoid any "500 - Internal Server Error syntax error at /etc/gitweb.conf" error message.

If you don't have a gitweb_config.perl in which you declare gitweb.conf.pl, but directly "gitweb.conf.pl", then add "use lib (".");" as the first line of that file.




回答3:


1/ install gitolite and set it up. Then it suffices to make sure /home/git/.gitolite.rc contains uncommented parts that look like:

%RC = (
    ...
    UMASK                           =>  0027,
    ...
    ENABLE => [
        ...
        'gitweb',
        ...
     ]
);

2/ set correctly $projectroot and $projects_list directives of /etc/gitweb.conf (to match location of projects.list file and repositories dir). Like:

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

3/ Make sure current repository files are also readable by webserver user. These examples are from debian based systems, so YMMV:

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/ Finally configure access for gitweb user within your /conf/gitolite.conf file of gitolite-admin repository on a client machine and apply them by committing and pushing them (the standard way). A repository we would like to see and manage via gitweb has to have the access set like this:

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

Note: The ... only suggests there are other configuration directives within the files. Do not put them there!

No other chages are necessary to make gitlab visualize the gitolite repositories.

Applies (at least) for gitolite 3.6.6 and gitweb 2.1.4



来源:https://stackoverflow.com/questions/7216176/how-do-i-have-to-configure-gitweb-and-gitolite-so-theyll-work-together

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!