Как мне настроить gitweb и gitolite, чтобы они работали вместе?

Я пытаюсь заставить gitweb работать с gitolite... но пока безуспешно.
Я работаю на машине RedHat Linux. Пользователь с именем git существует.

gitolite установлен в: /home/git
Местоположение репозитория: /home/git/repositories

Обратите внимание, что gitweb отлично работал с обычным ванильным 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:

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

Какую конфигурацию я пропустил? Я не вносил никаких изменений в Apache.

Веб-URL: http://MyHostName/git
Это приводит к ошибке 404: Репозитории не найдены.


person Jee    schedule 27.08.2011    source источник


Ответы (3)


Недавно я установил gitolite и gitweb и обнаружил, что /etc/gitweb.conf требует очень минимальной настройки. То, что у вас есть, выглядит правильно для меня. Каковы разрешения на /home/git/repositories? Вы можете обнаружить, что они слишком ограничительны. Попробуйте это:

$ chmod -R 775 /home/git/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
person Adam Sharp    schedule 30.05.2012
comment
Чтобы быть немного более безопасным, вы можете добавить пользователя apache/www-data в группу gitolite usermod -a -G gitolite apache, а затем выполнить chmod -R 750 /home/git/repositories вместе с установкой переменной gitolite $REPO_UMASK = 0027; - person Hamish Downer; 24.06.2012
comment
Параметр $REPO_UMASK был особенно полезен для меня. chmod-ing каталог репозиториев работает до тех пор, пока вы в следующий раз не обновите репо, а затем разрешения сбрасываются до 700 для одного из файлов. Обратите внимание, что в документах говорится, что параметр UMASK в gitolite имеет решающее значение, если вы хотите запустить gitweb: gitolite.com /gitolite/g2/rc.html - person Jason L; 10.07.2013
comment
Проверка вашего cmd chmod -R 775 /home/git/repositories: пользователь получает полный доступ, группа также и другие читают и выполняют. Почему так щедро? У меня ошибка 500 с curl localhost: 1234, а была 755. Переход на 775 не помогает. - person Timo; 03.11.2020

Вам нужно добавить Gitolite contrib/gitweb.conf в конце /etc/gitweb_config.perl.
Другими словами, вам нужно вызвать функцию Gitolite из вашего gitweb.conf perl-файла, иначе интеграция GitWeb-Gitolite никогда не будет работать.

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

(здесь repo_rights — метод из gitolite.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 (".");" в качестве первой строки этого файла.

person VonC    schedule 27.08.2011
comment
В конце /etc/gitweb.conf какую именно строку мне нужно добавить? Я попытался добавить эту строку: $/home/git/gitolite/contrib/gitweb.conf , но это выдает ошибку. Я думаю, что я неправильно понял. - person Jee; 28.08.2011
comment
Я делаю что-то явно неправильное. Правильно ли настроены мои gitweb.conf, project.list, .gitolite.rc? В сообщении об ошибке четко сказано: «Проекты не найдены». - person Jee; 28.08.2011
comment
@Jee: В конце /etc/gitweb.conf вам нужно было скопировать все строки github.com/sitaramc/gitolite/blob/pu/contrib/gitweb/gitweb.conf (и измените значение строк 21, 23, ..., если у вас есть использовали разные пути в вашей установке Gitolite) - person VonC; 28.08.2011
comment
я получаю следующую ошибку на веб-странице (похоже, эти новые строки не понимаются gitweb, это дает синтаксическую ошибку в самой первой строке): 500 - синтаксическая ошибка Internal Server Error в строке 74 /etc/gitweb.conf, рядом с моим - person Jee; 29.08.2011
comment
@Jee: я обновил свой ответ, чтобы избежать сообщений об ошибках синтаксиса. - person VonC; 29.08.2011
comment
Я изменил права доступа к домашнему каталогу git рекурсивно на 755 (пробовал много других меньших привилегий, но они, похоже, не работали). Похоже, это решило проблему «Нет проектов, найденных в Интернете». Я не добавлял содержимое gitolite-contrib/gitweb.conf в /etc/gitweb.conf. Теперь я могу просматривать репозитории в Интернете. - person Jee; 29.08.2011
comment
@Jee: отлично, но я не думаю, что ваш просмотр выиграет от управления разрешениями Gitolite. Любой должен иметь возможность просматривать ваш репозиторий, даже если он не должен этого делать в соответствии с файлом конфигурации gitolite. - person VonC; 29.08.2011

1/ установить gitolite и настроить. Тогда достаточно убедиться, что /home/git/.gitolite.rc содержит незакомментированные части, которые выглядят так:

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

2/ правильно установить директивы $projectroot и $projects_list для /etc/gitweb.conf (чтобы они соответствовали расположению файла projects.list и каталога repositories). Нравиться:

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

3/Убедитесь, что текущие файлы репозитория также доступны для чтения пользователю веб-сервера. Эти примеры взяты из систем на основе Debian, поэтому 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/ Наконец, настройте доступ для пользователя gitweb в файле /conf/gitolite.conf репозитория gitolite-admin на клиентской машине и примените их, зафиксировав и отправив их (стандартным способом). Репозиторий, который мы хотели бы видеть и управлять через 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

person helvete    schedule 19.12.2017