我刚刚svn
通过 https (带有apache2
)进行了配置。我可以svn checkout
很好,但是提交失败了。我从apache2
日志中可以看到,svn
服务器正在错误的位置查找用于执行提交的存储库。这是我的apache2
443.example.com.conf 文件:
<IfModule mod_ssl.c>
<virtualhost *:443>
# requests to https://example.com land here
ServerName example.com
DocumentRoot /home/me/svn-repos
# global properties for all directories in this site
<Location />
# do not use .htaccess files
allowoverride none
#DirectoryIndex index.html
#require all granted
DAV svn
SVNParentPath /home/me/svn-repos
AuthType Basic
AuthName "svn repositories"
AuthUserFile blah.passwd
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>
SSLEngine On
SSLCertificateFile blah
SSLCertificateKeyFile blah
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
ErrorDocument 400 /index.html
ErrorDocument 401 /index.html
# lots more ErrorDocument entries
</virtualhost>
</IfModule>
请注意,我的所有svn
存储库都位于/home/me/svn-repos
(例如/home/me/svn-repos/repo1
,/home/me/svn-repos/repo2
等)下的目录中
因此,我查看了我的一个存储库的最新本地副本:
$ cd /tmp
$ svn co --username me https://example.com/repo1 repo1
Authentication realm: <https://example.com:443> svn repositories
Password for 'me': ***
A repo1/file1.txt
Checked out revision 1.
到目前为止,一切都很好。但当我尝试提交时:
$ touch file2.txt
$ svn add file2.txt
A file2.txt
$ svn ci file2.txt -m added
Authentication realm: <https://example.com:443> svn repositories
Password for 'me': ***
Adding file2.txt
svn: E175009: Commit failed (details follow):
svn: E175009: The XML response contains invalid XML
svn: E130003: Malformed XML: no element found
我可以从apache2
错误日志中看到svn
服务器正在错误的位置查找存储库:
$ sudo tail -4 /var/log/apache2/error.log
[Sat Dec 02 20:23:29.626227 2017] [:error] [pid 123] (20014)Internal error (specific information not available): [client x.x.x.x:x] Can't open file '/home/me/svn-repos/index.html/format': Not a directory
[Sat Dec 02 20:23:29.626264 2017] [dav:error] [pid 123] [client x.x.x.x:x] Could not fetch resource information. [404, #0]
[Sat Dec 02 20:23:29.626272 2017] [dav:error] [pid 123] [client x.x.x.x:x] Could not find the requested SVN filesystem [404, #20]
[Sat Dec 02 20:23:29.626277 2017] [dav:error] [pid 123] [client x.x.x.x:x] Could not find the requested SVN filesystem [404, #20]
它正在查找的文件是/home/me/svn-repos/repo1/format
,但是它没有附加正确的路径来查找该文件。我怀疑这意味着我需要在apache2
443.example.com.conf 文件中添加一些内容,但我想不出是什么。
更新
我对 443.example.com.conf 文件进行了以下更改:
# ErrorDocument 404 /index.html
ErrorDocument 404 /indexyz.html
现在,当我尝试提交时,错误消息更改为:
[Sat Dec 02 20:39:00.153942 2017] [:error] [pid 123] (20014)Internal error (specific information not available): [client 192.168.1.177:50228] Can't open file '/home/me/svn-repos/indexyz.html/format': No such file or directory
[Sat Dec 02 20:39:00.153979 2017] [dav:error] [pid 123] [client x.x.x.x:x] Could not fetch resource information. [404, #0]
[Sat Dec 02 20:39:00.153987 2017] [dav:error] [pid 123] [client x.x.x.x:x] Could not find the requested SVN filesystem [404, #2]
[Sat Dec 02 20:39:00.153992 2017] [dav:error] [pid 123] [client x.x.x.x:x] Could not find the requested SVN filesystem [404, #2]
但这仍然没有多大帮助。
答案1
- 你犯了所有可能的错误 (3/3)
- 你没有读过SVN这本书
使固定:
- 回购协议一定不位于 http 树内
- SVN位置一定不位于 http-host 的根目录中
- SVN位置一定不位于 http-host 内的物理路径中,仅位于逻辑路径中
答案2
我终于让它工作了。最后,它与文档根无关,它是 ErrorDocument 声明 - 我只需要将它们从 更改/index.html
为default
.我的最终配置如下所示:
<IfModule mod_ssl.c>
<virtualhost *:443>
# requests to https://example.com land here
ServerName example.com
DocumentRoot /home/me/svn-repos
# global properties for all directories in this site
<Location />
# do not use .htaccess files
allowoverride none
DAV svn
SVNParentPath /home/me/svn-repos
AuthType Basic
AuthName "svn repositories"
AuthUserFile blah.passwd
Require valid-user
</Location>
# http://svnbook.red-bean.com/en/1.7/svn.serverconfig.httpd.html
CustomLog ${APACHE_LOG_DIR}/svn_logfile "%t %u %{SVN-ACTION}e" env=SVN-ACTION
ErrorLog ${APACHE_LOG_DIR}/error.log
SSLEngine On
SSLCertificateFile fullchain.pem
SSLCertificateKeyFile privkey.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
ErrorDocument 400 default
ErrorDocument 401 default
ErrorDocument 402 default
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 405 default
ErrorDocument 406 default
ErrorDocument 407 default
ErrorDocument 408 default
ErrorDocument 409 default
ErrorDocument 410 default
ErrorDocument 411 default
ErrorDocument 412 default
ErrorDocument 413 default
ErrorDocument 414 default
ErrorDocument 415 default
ErrorDocument 416 default
ErrorDocument 417 default
#ErrorDocument 418 default
ErrorDocument 421 default
ErrorDocument 422 default
ErrorDocument 423 default
ErrorDocument 424 default
ErrorDocument 426 default
ErrorDocument 428 default
ErrorDocument 429 default
ErrorDocument 431 default
ErrorDocument 451 default
ErrorDocument 500 default
ErrorDocument 501 default
ErrorDocument 502 default
ErrorDocument 503 default
ErrorDocument 504 default
ErrorDocument 505 default
ErrorDocument 506 default
ErrorDocument 507 default
ErrorDocument 508 default
ErrorDocument 510 default
ErrorDocument 511 default
</virtualhost>
</IfModule>