Назад | Перейти на главную страницу

GIT SVN с subgit и apache

Я начал оценивать программное обеспечение под названием subgit, которое позволяет без проблем взаимодействовать с репозиторием как с SVN, так и с GIT.

В нашей организации мы взаимодействуем с нашими репозиториями с помощью apache, и попытка объединить это с GIT становится несколько проблематичной.

В целом мы хотим разрешить доступ для чтения без аутентификации, а запись должна быть аутентифицирована, это нормально работает с SVN, но, похоже, не так просто с GIT.

В дополнение к этому было бы неплохо, если бы apache определил, является ли это запрос GIT / SVN, и выяснил, где указать клиенту, чтобы вы могли использовать один и тот же URL-адрес независимо от того, какую репо-систему вы используете.

Ниже приведена конфигурация, прямо сейчас у нас есть правильный доступ для чтения без авторизации для svn и доступ для записи с авторизацией, но для GIT это r / w без аутентификации.

<VirtualHost *:80>
DocumentRoot /home/subgit/public_html
CustomLog /home/subgit/logs/access_log combined
SetEnv GIT_PROJECT_ROOT /home/subgit/repos/repo/
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<LocationMatch "^/git/.*/git-receive-pack$">
  Options +ExecCGI
AuthType Basic
AuthName "subgit"
AuthBasicProvider file
AuthUserFile /home/subgit/etc/subgit
Require valid-user
  Allow From All
</LocationMatch>
<LocationMatch "/svn">
  DAV svn
  SvnPath /home/subgit/repos/repo
AuthType Basic
AuthName "subgit"
AuthBasicProvider file
AuthUserFile /home/subgit/etc/subgit
  AuthzSVNAccessFile /home/subgit/etc/subgit.access
      <LimitExcept GET PROPFIND OPTIONS REPORT>
          Require valid-user
      </LimitExcept>
</LocationMatch>
</VirtualHost>

Любой вклад будет оценен!

Су, мне действительно удалось это исправить:

<VirtualHost *:80>
DocumentRoot /home/subgit/repos

    <Directory /home/subgit/repos>
        Options       None
        AllowOverride none
        Order         allow,deny
        Allow         from all
    </Directory>

CustomLog /home/subgit/logs/access_log combined
SuexecUserGroup subgit subgit
ScriptAlias /git/ /home/subgit/bin/gitolite-suexec-wrapper.sh/
RewriteEngine On
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR,NC]
RewriteCond %{REQUEST_URI} ^/git/.*/git-receive-pack$ [NC]
RewriteRule .* - [E=AUTHREQUIRED:yes]

 <LocationMatch "/git/">
    Order Allow,Deny
    Deny from env=AUTHREQUIRED
    Allow from all
    Satisfy Any
    AuthType Basic
    AuthName "subgit"
    AuthBasicProvider file
    AuthUserFile /home/subgit/etc/subgit
    Require valid-user
  </LocationMatch>
  <LocationMatch "/svn">
    DAV svn
    SvnPath /home/subgit/repos/testrepo
    AuthType Basic
    AuthName "subgit"
    AuthBasicProvider file
    AuthUserFile /home/subgit/etc/subgit
    AuthzSVNAccessFile /home/subgit/etc/subgit.access
    <LimitExcept GET PROPFIND OPTIONS REPORT>
      Require valid-user
    </LimitExcept>
  </LocationMatch>
</VirtualHost>

Что касается комментариев о бесшовной интеграции, нет, она не идеальна, но довольно хороша и достаточно хороша для этой цели.

«Бесшовная интеграция между SVN и git» невозможна, лежащие в основе модели слишком разные. Посмотрите документацию для git svn для длинный список вещей, которые естественны в мире git, но не могут быть выполнены в SVN. Лучше подумайте о переходе с SVN (упомянутый git svn отлично работает, чтобы проглотить репо SVN, но это происходит медленно, как патока; может хранить оригинал для резервного копирования и работать с git впредь).