1

Red Hat Linux マシンで SVN をセットアップしています。私のシナリオは、同じディレクトリに 2 つのプロジェクトがあることです。

  • /var/www/svn/proj1
  • /var/www/svn/proj2

私のsubversion.confには次の構成があります:

<Location /svn/proj1>
    DAV svn
    SVNPath /var/www/svn/proj1
    AuthzSVNAccessFile /etc/svn_proj1-acl-conf
    AuthType Basic
    AuthName "Subversion repos"
    AuthUserFile /etc/svn-auth-conf
    Require valid-user
</Location>

<Location /svn/proj2/>
    DAV svn
    SVNParentPath /var/www/svn/proj2
    SVNListParentPath on
    AuthzSVNAccessFile /etc/svn_proj2-acl-conf
    AuthType Basic
    AuthName "Subversion repos"
    AuthUserFile /etc/svn-auth-conf
    Require valid-user
</Location>

project1 の場合、私の URL http://www.example.com/svn/proj1はかなりうまく機能しますが、project2 の場合は、URL の末尾に末尾のスラッシュを追加する必要がありますhttp://www.example.com/svn/proj2/そうしないと、ユーザー/パスワード ウィンドウが表示されません。

location ディレクティブから末尾のスラッシュを削除すると、

<Location /svn/proj2>

403 Forbiddenブラウザでスラッシュを使用するかどうかに関係なく、エラーが発生し始めます。

TortoiseSVN で使用していますが、project2 がまったく機能しません。

構成で何を見る必要がありますか?

4

2 に答える 2

1

混乱している。混乱している。混乱している...

でも、迷いやすい…。

2 つのプロジェクトがあります。最初に使用するもの:

SVNPath /var/www/svn/proj1

2番目に使用するもの:

SVNParentPath /var/www/svn/proj2

なぜ一方SVNPathと他方なのSVNParentPathですか?違いがあります。SVNPath特定のリポジトリをいつ参照するかを指定します。複数のリポジトリSVNParentPathを含むディレクトリを参照するときに使用します。

それで、正確にあなたの設定は何ですか?両方ともあるべきだと感じていますSVNPath

ところで、ユーザー リストは同じですが、AuthzSVNAccessFileアクセス ファイルは別になっています。人々がコミットするのを止めているだけですか、それとも特定のファイルやディレクトリを読むのを妨げていますか?

通常の方法では、ユーザーがすべてのファイルを表示できるようにしますが、コミット アクセスは禁止します。その場合、私のpre-commit hookを使用して、Apache httpd の外でそれを行うことができます。これにより、次の 2 つのことが可能になります。

  • Subversion を高速化するディレクトリ チェック アクセスをオフにします。
  • Apache httpd を再起動せずにコミット権限を変更します。

その後、単一の構成で両方のディレクトリを構成できます。

<Location /svn>
    DAV svn
    SVNParentPath /var/www/svn
    SVNListParentPath on
    AuthType Basic
    AuthName "Subversion repos"
    AuthUserFile /etc/svn-auth-conf
    SVNPathAuthz off
    Require valid-user
</Location>

もちろん、AuthzPath を使用して読み取りアクセスを防止している場合は、AuthzSVNAccessFileパラメーターを使用する必要があります。しかし、それは物事をより複雑にし、あなたを遅くします。ユーザーがお互いのリポジトリをのぞき見ることができないと思われる場合を除き (これは非常にまれです)、通常はこれをお勧めしません。

さらに、もう 1 つ... ユーザーは LDAP または Windows Active Directory アカウントを持っていますか? その場合、それを使用て Subversion リポジトリへのアクセスを決定できます。

 LoadModule authnz_ldap_module   modules/authnz_ldap.so

 <Location /svn>
    DAV svn
    SVNParentPath /var/www/svn
        SVNListParentPath on
    AuthType basic
    AuthName "Subversion Repository"
    AuthBasicProvider ldap
    AuthzLDAPAuthoritative off
    AuthLDAPURL "ldap://windomain.mycorp.com:3268/dc=mycorp,dc=com?sAMAccountName" NONE
    AuthLDAPBindDN "CN=svn_user,OU=Users,DC=mycorp,DC=com"
    AuthLDAPBindPassword "swordfish"
    Require ldap-group CN=developers,CN=Users,DC=mycorp,DC=com
</Location>

このように、ユーザーが Windows アカウントを持っていて (または LDAP データベースにいて)、そのユーザーが開発者グループに属している場合、Subversion リポジトリに自動的にアクセスできます (SVNParentPathリポジトリと将来のリポジトリの両方に注意してください)。このようにして、SVN AUthorization ファイルからユーザーを常に追加および削除する必要はありません。さらに、忘れたパスワードを常に取得しているわけではありません。

ここまでは、すべて Windows 管理者の責任です。魔法です。私はあなたの仕事を彼らの仕事にしました。ユーザーは Subversion へのアクセス権を持っていませんか? もうあなたの問題ではありません。Angry Birds をプレイする時間が増えました。

/var/wwwもう 1 つ小さなこと:ドキュメント ルートである可能性があるという単純な理由で、リポジトリを配置したくないと感じています。注意しないと、Subversion リポジトリ ディレクトリへの直接アクセスを許可している可能性があります。

それらを別の場所に置いて、SVNParentPath.

于 2012-05-18T02:06:48.987 に答える
0

Locationandディレクティブには、同じ末尾のスラッシュ ルールが必要です(SVNParentPath有無にかかわらず)。

したがって、次のようになります。

<Location /svn/proj2/>            <--- Here trailing slash (or not)
    [..]
    SVNPath /var/www/svn/proj2/  <--- Here same like Location
    [...]
</Location>
于 2012-05-17T22:18:21.513 に答える