debian11服务器端的SVN搭建完毕,我们本地提交远程仓库后,发现我们在/www/svndata/proj_1目录下根本就没有找到我们上传的文件,这是为什么呢?难道我们没有上传成功?
实际上,这是由于把文件上传到SVN版本库后,上传的文件不再以文件原来的格式存储,而是被svn以它自定义的格式压缩成版本库数据,存放在版本库中,svn服务器版本库有两种格式,一种为FSFS,一种为BDB,这时候我们就需要在linux中实现检出(check out)。
1、手动check out
svn checkout svn://ip/proj_1 /wwww/online_data
svn://ip/proj_1表示需要检出的仓库地址,/wwww/online_data 表示需要代码检出到哪个目录下
2、自动check out
在/www/svndata/proj_1/hooks目录下新建一个post-commit文件(注意没有后缀名),post-commit文件添加内容为:
#!/bin/sh
SVN=/usr/bin/svn
WEB=/wwww/online_data
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
$SVN update $WEB --username 管理员账号 --password 管理员密码
注意/usr/bin/svn是你的svn执行文件路径,/wwww/online_data是你要将代码checkout的地址
将post-commit设置为可执行
chmod +x /www/svndata/proj_1//hooks/post-commit
到此自动checkout配置完成,以后每次本地提交的时候,/wwww/online_data里面会同步checkout。
需要注意的是,第一次的时候需要SSH手动检出,之后就不需要了。
如果第一次不手动checkout,配置了hook的post-commit钩子文件后,本地客户端更新时会报错。第一次checkout时候会让你输入root密码,不管,安全第一可以不输入。但是后面的SVN管理账号和密码就需要了
到此linux搭建svn服务器完成。
3、修复字符集bug
当你开心的提交完代码后,突然发现SVN客户端报错了~:
E000022: Can‘t convert string from ‘UTF-8‘ to native encoding~
原因是服务器中文字符集,单纯的修改~/.bashrc,依然会报错
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory~
完美解决方法如下:
写文不易,请博主喝一瓶冰阔落