Я начал оценивать программное обеспечение под названием 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
впредь).