SVNParentPath를 사용하는 일반적인 Subversion / Apache 구성에서 저장소는 다음 /svn/
과 같이 호스팅됩니다 .
<Location /svn>
DAV svn
SVNParentPath /srv/source/svn/repos
SVNReposName "Subversion Repository"
AuthzSVNAccessFile /srv/source/svn/authz
Satisfy Any
AuthType Basic
AuthBasicProvider file
AuthName "Subversion Repository"
AuthUserFile /srv/source/svn/htpasswd
Require valid-user
</Location>
특정 리포지토리에 대해이 구성을 다른 경로에서 호스팅 하지 않고 재정의하는 방법이 있습니까? 즉, Location
이와 같은 블록을 추가 할 수있는 방법 이 있습니까?
<Location /svn/my_special_repo>
SVNPath /srv/source/svn/repos/my_special_repo
AuthzSVNAccessFile /srv/source/svn/repos/my_special_repo/conf/authz
</Location>
… 그리고 블록에 제공된 구성을
무시 합니까? 위의 구성 으로이 작업을 수행하려는 시도는 Apache 오류 로그에서 다음과 같이 이상하고 도움이되지 않는 오류로 충족되었습니다.Location
/svn
[Wed Feb 02 11:28:35 2011] [error] [client 10.10.209.120]
(20014)Internal error: Can't open file '/srv/source/svn/repos/svn/format':
No such file or directory
이 모든 것은 mod_dav_svn의 방법으로 내가하려는 일을 할 수 없다고 말하는 것 같습니다. 나는 해결책이나 대안에 열려 있습니다!
편집 : 글쎄, 나는이 질문이 독자들 사이에 많은 흥분을 일으킨 것을 알 수 있습니다. 레코드의 경우, 기존의 모든 리포지토리에 대해 리포지토리 당 구성을 생성 한 다음 SVNParentPath
기반 구성 을 포기하는 것 입니다. repo 당 Apache 구성은 특히 mod_macro 와 같은 것을 사용하여 최소화 됩니다 . 어려운 부분은 전역 authz 파일을 분리합니다. 이전에이 작업을 수행 한 경우 팁을 주시면 감사하겠습니다.
답변
나는 대답하지 않은 질문 목록에서 내 질문이 사라지는 것을 싫어하기 때문에 다음과 같이했습니다.
-
기본 서버 구성에는 다음이 있습니다.
<Location /svn/> SVNParentPath /srv/source/svn/repos </Location>
-
mod_macro
새로운 리포지토리에 대해이 동작을 복제하기 위해 다음 을 채택했습니다 .<Macro LegacySubversionRepo $name> # Override SVNParentPath block in main vhost config. RewriteRule ^/svn/$name /repo/$name [PT] <Location /repo/$name> Order deny,allow Allow from all Use LdapAuth \ "$name svn repository" \ /srv/source/svn/htpasswd DAV svn SVNPath /srv/source/svn/repos/$name AuthzSVNAccessFile /srv/source/svn/authz SVNAutoversioning On Satisfy Any </Location> </Macro>
RewriteRule
이를 통해 리포지토리 구성<Location /svn/>
이 요청과 일치하는 기본 구성에서 를 재정 의 할 수 있습니다 .
이를 통해 저장소 별 인증 및 권한 부여 구성 ( htpasswd
여기에서 사용되는 전역 파일 대신)을 채택하는 것이 상대적으로 쉬워집니다 .