我的SVN工作模式

来源:互联网 发布:bresenham画线算法 编辑:程序博客网 时间:2024/04/30 03:11

1.初始化版本库:
   将已有的文件Import到一个版本库rep中。
2.团队成员在本地建立work文件夹,用该文件夹Checkout版本库rep,则团队成员就获得了该项目的一个拷贝。
3 团队成员进行修改操作,完成后commit。
4.www服务器目录下建立相应项目文件夹,该文件夹Checkout版本库rep,保持更新,并且禁止commit

hook中post-commit.tmpl修改为post-commit.bat并修改如下代码:可以让www和SVN直接同步。而不需要执行上面所说的第4步。

REPOS="$1"
REV="$2"
SET SVN=E:/SVNserver/bin/svn.exe
SET DIR=D:/httproot/mySVN

CALL %SVN% update %DIR%

以上是Win下 post-commit 的配置(该配置文件是当向svnserver提交commit请求成功后执行的脚本,通常人们用来向管理员发Email,我用它做测试服务器的同步)。

下面是RHEL ES4的配置,不过估计大部分linux都差不多。

一开始将 post-commit 配置为,
svn update /var/www/html
结果当win本地提交后,linux上的apache下的www没有同步更新,郁闷......

从网上查了一堆资料,最有用的是说svn的hooks在无环境变量的情况下执行(为安全起见),也就是说post-commit下的shell命令要用绝对路径。一看我的配置 /var/www/html 就是绝对路径啊,继续郁闷。
接下来做了个测试,在post-commit中加上如下语句, cp /var/svn/aa.txt /var/www/html
当win向linux的svn提交后发现cp命令成功了。然而/var/www/html下仍然没有与版本库同步,也就是
svn update /var/www/html 仍然没有执行。 太郁闷了....

后来在 svn的mail-list里查到一篇文章说在post-commit中写入下测试代码

exec >/tmp/svn-up.out 2>&1
PATH=/usr/local/bin:/usr/bin:/bin
cd /var/www/html || exit 1
ls -ld
id
touch foo && rm -f foo # 测试html目录是否对操作svn的用户开放写入权限
svn update
exit 0

执行後到 /tmp/svn-up.out 2>&1中查看错误信息:

偶yeah终于看到错误在哪了,svn提示:

svn :Can`t recode string
然后再查这个问题,搜索的结果是修改字符集环境变量,我locale了一下我的是

LANG=zh_CN.GB18030
LC_CTYPE="zh_CN.GB18030"
LC_NUMERIC="zh_CN.GB18030"
LC_TIME="zh_CN.GB18030"
LC_COLLATE="zh_CN.GB18030"
LC_MONETARY="zh_CN.GB18030"
LC_MESSAGES="zh_CN.GB18030"
LC_PAPER="zh_CN.GB18030"
LC_NAME="zh_CN.GB18030"
LC_ADDRESS="zh_CN.GB18030"
LC_TELEPHONE="zh_CN.GB18030"
LC_MEASUREMENT="zh_CN.GB18030"
LC_IDENTIFICATION="zh_CN.GB18030"
LC_ALL=

于是将post-commit加一句 export LANG="zh_CN.GB2312"最后整个文件改为:

export LANG="zh_CN.GB2312"
/usr/bin/svn update /var/www/html
exit 0
一切OK了,其实就加了一句,告诉svn用什么字符集来编码。

我汗!!!!搞电脑的中国人什么时候才不被字符集纠缠啊!!!

   相信Thumbs.db这个文件大家都见过。它是在windows下为了加速图片缩略而生成的文件,在每个有图片的文件夹里都有这东西。
YY你说那么多和SVN有啥关系啊!!
   当小组成员在win下commit时会把
Thumbs.db也一并提交上去,你到linux下一find Thumbs.db会发现所有img的文件夹里都有Thumbs.db,看着很不顺眼,而且据说这东西可能带毒。。。
   这个问题我是那么处理的。
(1)首先在win下搜索工作文件夹里的所有Thumbs.db,删除之。然后commit
(2)然后再lin下find Thumbs.db,嗯没有了。
(3)最关键的一步:要用绝后患,需要在TortoiseSVN中设置
      鼠标右键->TortoiseSVN->Settings(设置)->General (常规设置) -> 在右侧 "Golbal ignore pattern"(全局忽略样式)内填入Thumbs.db-> 确定;
这样
Thumbs.db每次都会被忽略也就不会再跑到SVN服务器上了。

这样做需要对每台客户机进行设置,希望找到从服务器端设置的方法。

svn commit 提示missing or not locked

事件描述:
     work文件夹下有个文件夹叫images,在工作文件夹下删除images后,执行svn commit ,结果提示:

      svn: Working copy '/images' is missing or not locked

      上网搜了一下,有说cleanup能解决最后以失败告终。
网上说产生这个问题的原理是:
      “一些动态生成文件的文件夹造成的,解决的办法就将此文件夹从SVN资源库中删除,并在工程中把此文件夹加入到svn:ignore属性中,这样,SVN将不会对此文件夹进行控制,而且,我们也不需要对动态生成文件的文件夹进行控制。”
      所以解决这个问题的思路大致是:先手动将版本库中出现问题的文件处理成与工作文件夹相同的状态。然后让工作文件夹与版本库同步。之后,执行commit。
   
     具体步骤:(一开始最好在工作文件夹下执行clearup)
     1、用Tortoises的Repo-browser打开版本库,删除images。
     2、此时执行svn status |grep images 显示
            !      /images
            说明images项目已经丢失(例如,你使用svn移动或者删除了它)。
     3、执行svn update /images 单独更新改文件。此时显示:
           D /images
           说明/images是预定义要删除的项目。
     4、最后执行svn commit -m “messages”

原创粉丝点击