标签:svn

浏览模式: 标准 | 列表 | 图文
svn: E220001: Unreadable path encountered; access denied

svn: E220001: Unreadable path encountered; access denied

发现svn的代码有更新,却忘了与上次对比。于是svn与上一版本对比的时候就出现了标题的错误:
svn: E220001: Unreadable path encountered; access denied

其实解决方法很简单,在conf/svnserve.conf中。找到anonaccess = read这一行,(默认是注释掉的)
加入一行 anonaccess = none

再试一下,就会发现正常了。

这应该算是svn的BUG了。拜托,就算你不支持anon这样的匿名用户,你好歹默认为NONE这种值你总要存在吧。不存在 就直接造成无法访问,没权限了。

How-to recover from checksum mismatch errors in SVN

How-to recover from checksum mismatch errors in SVN

windows和linux有一点不同,即。。。文件名是否区分大小写。于是在SVN里就有了这么纠结的事情,如果将文件名即时改名大小写,SVN会认为这是同一个文件,而不会加到SVN的库里。如果有改动,再提交,我日。尼玛,其他 客户端就会说文件不一样。会报标题出现的错误 ,肿么办??

原文标题来自的文章是出自这里:http://andrew.hedges.name/blog/2009/01/25/how-to-recover-from-checksum-mismatch-errors-in-svn

全英文,有四屏哦(光标回到最上面,按四次空格 可以到底,称之为四屏),如果你兴趣不大,我这里有一个简化版。。。

1、将出错的目录,重新checkout出来到一个新的目录
2、将原svn中的该目录删除
3、将新checkout的目录拷过去,到项目目录里
4、改正用户组权限。
Over了。就是这么简单。。。。

英文是这样说的:

  1. Check out the latest revision of the corrupted directory into a temporary directory
  2. Delete the munged SVN revision files
  3. Copy the correct SVN revision files into the working directory

Over。。。真不难哦

转:蛋疼的版本提交日志TOP10

10. XXXX项目-改版 // 你用一次也就罢了,需要整个项目期间提交的日志都是这句话嘛...

9. 修改 // 如果版本提交不是做修改,莫非骗提交率来了?

8. BUG修改 // 是不是还要先提交一个版本叫做“BUG生成”?

7. 修改BUG // LS的,猿粪呐!~

6. 测试 // 册那...

5. test // 猿粪,又见猿粪

4. 版本更新 // 俺又不是siri,发出这种让人产生联想的指令干嘛,讨厌~

3. update // 你就算说英文俺也变不成siri

2. publish // 小样,会的词还挺多啊!

1. svn // 靠.......

---------

挺有意思,不过,我大部分还是习惯将主要更新内容扔上去,但如果一次上传过多的时候就没办法写了。一个一个的上传也不是个办法。。。

转老王:PHPCheckstyle代码审计与Subversion钩子脚本

之所以要转这一篇文章,是在于有人在THINKINLAMP的googlegroup里提问,说是怎么在svn提交的时候对phpdoc进行检查,需要让他们强制写注释,否则就不让他们提交,于是我说了是在老王的博客上。但后来我看了一下老王新的博客,huoding.com,这篇文章不在(没有迁移到新的博客中)。所以我重新在本地复制了一下他在百度博客里的文章。
原文来自:http://hi.baidu.com/thinkinginlamp/blog/item/17476d22661ee6a94623e8d7.html

PHP代码审计方面的软件越来越多了,PHPCheckstyle算是最近比较活跃的一个。通过SVN钩子脚本的方式来调用PHPCheckstyle,可以强制代码必须符合预先设定的编码标准(比如PEAR编码标准),有助于在多人合作项目中提高代码整体质量。

PHPCheckstyle的设置:

安装真的没什么可说的,属于接插即用型的,唯一需要设置的就是config目录下的配置文件:缺省使用的是default.cfg.xml,你可以编辑它,按照官方文档适当的增减规则。不过PHPCheckstyle项目诞生时间短,不够稳定,截至0.8版本为止还有不少问题,使用前最好逐条规则进行测试。

最简单的运行方法如下:

php run.php --src /path/to/file

这样的话会生成相关的html文档,如果你想直接输出的话,请使用:

php run.php --format console --src /path/to/file

更多选项可以自己看帮助(php run.php就可以查看相关帮助)

Subversion钩子脚本:

下面设置钩子脚本,具体点说是前置钩子,也就是:pre-commit,通过钩子检查后才被允许提交到版本库。只有添加或更新的文件是需要检查的,如果是 要删除的文件,则没有必要检查;还有一个问题,PHPCheckstyle只能检查具体文件的内容,而在提交之前,我们想要检查的文件还不存在,所以我们 得生成一个临时文件,检查完再删除,另外,在生成文件时要注意其唯一性,免得多用户一起提交时发生冲突,注意事项了解的差不多了,可以写钩子脚本了:

代码(at pastebin.com):

01 #!/bin/bash
02
03 REPOS="$1"
04 TXN="$2"
05
06 PHP="/usr/local/php/bin/php"
07 SVNLOOK="/usr/bin/svnlook"
08
09 RUNSCRIPT="/path/to/run/php/script"
10
11 CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | grep '^[U|A]' | awk '{print $2}'`
12
13 for FILE in $CHANGED; do
14 if [[ "$FILE" =~ \.php$ ]]; then
15 TEMPFILE=`mktemp`
16 $SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" > $TEMPFILE
17 MESSAGE=`$PHP $RUNSCRIPT --format console --src $TEMPFILE | head -n -2`
18 if [ ! -z "$MESSAGE" ]; then
19 rm -rf $TEMPFILE
20 echo "$MESSAGE" | sed -e "s|$TEMPFILE|$FILE|" 1>&2
21 exit 1
22 fi
23 rm -rf $TEMPFILE
24 fi
25 done

关于Shell,如果有不清楚的可以自己搜索一下,网上有很多类似的文章。

钩子脚本还可以做很多事情,比如核对PHP脚本语法(php -l),而且通过管道符不用生成临时文件:

MESSAGE=`$SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | $PHP -l`

运行后,不用判断MESSAGE是否为空,而是根据退出状态来判断脚本是否有语法问题:

if [ $? -ne 0 ]

PHPCheckstyle配置和使用多少还是有点别扭,有机会试试PHP_CodeSniffer,配置钩子脚本更简单。

BTW:发现一个PHP Commit Hooks项目,有点意思,可以看看。
-------
---EOF---
最后,我也下载一份PHP COMMIT HOOKS项目 ,有点意思,可以少写很多了

editplus 支持svn了

刚才在看sae的文档时,发现他在介绍如何部署代码时提到了editplus,并说,editplus可以用TSVN来部署文件。
这时候我觉得纳闷,什么时候editplus支持SVN了?
然后找到了editplus的官网,找到了what's new:

原来,从3.30开始就支持了。
不过TSVN必须要先安装小乌龟才OK,HOHO,有兴趣的朋友是可以尝试了。
反正我现在用PHPstorm,什么都带了。
自从用了phpstorm,腰不酸腿不疼了。

svn 切换源

svn 切换源

由于IT对整个公司的IP网段进行了更替,导致svn连接不上。
于是想到了用命令行切换源的IP。
在windows平台下是很方便的,直接用小乌龟relocate就OK了。可是mac下面没有,linux下面也没有这样的gui界面。所以就用命令行了
网上找到资料都是svn relocate,但运行了一下,发现没有这个命令,只有svn switch --relocate
嗯,于是发现命令就是这样的:
svn switch --relocate FROM TO 原来的svn地址 新的SVN地址

--------

郝老师说svn sw就可以了,没有试过,我先备一下

svn ignore 命令行用法

由于安装了ubuntu,所以不可避免的需要使用一些命令行的东西了。比如这个svn,以前在windows下面,可以用小乌龟搞定。但在linux下面就不能这样了。
当然一些简单的命令我还是会用的,比如svn update,svn checkout,svn commit这类常用操作,但是这些只能解决一些简单的问题,遇到一些复杂的就搞不定了。
比如,为了做一些本地的配置不想传到服务器上,在windows下面,我可以直接在想要忽略的文件上右键,加入到ignore列表。在ubuntu下就不行了。。。
因此找了一点资料,先备份一下(家中连不上单位的svn服务器,所以没法测试)

若想创建了一个文件夹,并且把它加入版本控制,但忽略文件夹中的所有文件的内容:
$ svn mkdir spool
$ svn add spool
$ svn commit -m “Adding ’spool’”
$ svn propset svn:ignore ‘*’ spool
$ svn ci -m ‘Adding “spool” and ignoring its contents.’

若想创建一个文件夹,但不加入版本控制,即忽略这个文件夹:
$ mkdir spool
$ svn propset svn:ignore ’spool’ .
$ svn ci -m ‘Ignoring a directory called “spool”.’

若已经创建了文件夹,并加入了版本控制,现在想忽略这个文件夹,但要保持文件夹的内容:
$ svn export spool spool-tmp
$ svn rm spool
$ svn ci -m ‘Removing inadvertently added directory “spool”.’
$ mv spool-tmp spool
$ svn propset svn:ignore ’spool’ .
$ svn ci -m ‘Ignoring a directory called “spool”.’

若要忽略文件夹里的某几个文件
$ svn mkdir spool
$ svn add spool
$ svn commit -m “Adding ’spool’”
gvim .svnignore
每种要忽略的文件加一行,如:
.svnignore
*.pyc
*.cash
test.php

然后
svn propset svn:ignore -F .svnignore .

svn status

---EOF--

来源于:http://www.lampblog.net/2010/08/svn-ignore-%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%94%A8%E6%B3%95/

纯备份。

RabbitVCS 用后感

RabbitVCS 用后感

自从我的开发环境换成ubuntu后,对于SVN总感觉不象以前那样痛快。毕竟习惯了windows下的小乌龟了,于是找了很多资料,然后在某篇博客里发现了这个rabbitvcs,兴冲冲的装上去。

然后,就开始我的rabbitvcs之旅了,只是这段旅行并不快乐,在我写这篇文章的时候,它已经被我remove掉了。

先简单介绍一下rabbitvcs吧,它是一个GUI的SVN client,界面和操作方法都有点类似于小乌龟,所以,上手度极高。配置起来也挺方便,如果你装的是中文版的ubuntu,菜单中还有部分会被汉化。如果你用过小乌龟,那么我就不多说了。如果你没有用过,那我说了也白说。

剩下的就是我说缺点了,它有一个最大的缺点,那就是,SVN目录如果稍微过大,它就会在打开目录的时候,几乎停止响应。OK,你停止响应也就算了,你不能影响到所有打开的目录吧,只要是涉及到目录打开的,都会停止响应,时间比较长。

还有一个缺点就是,无论你怎么设置保存密码,它都记不住,我靠,你都记不住,你把那个复选框放出来干啥。真受不了。

所以,我卸载了,当然,最主要的原因,还是因为它卡死了目录。

现在我还是到SVN目录下,直接执行:svn update --username=xxx --password=xxx,速度超快,看来以后还是这样比较好。

笔记:svn之目标机器积极拒绝

笔记:svn之目标机器积极拒绝

在以前的博客文章里也介绍了怎么安装svn的,昨天我又重装了一下,不过是按照网上的教程来装的。所以遇到了点问题,那就是:目标机器积极拒绝。
安装过程如下:
$apt-get update
$apt-get install subversion
$mkdir /var/svn/
$useradd svn
$passwd svn
$chown -R svn:svn /var/svn
$svnadmin create /var/svn/test
$vim /var/svn/test/conf/svnserve.conf
把几个注释去掉。。。。
$vim /var/svn/test/conf/passwd
添加用户
$vim /var/svn/test/conf/authz
增加权限
$svnserve -d -listen-port 9999 -r /var/svn
表面上看来没什么问题。但事实上连接的时候就是目标机器积极拒绝。。
仔细想了想,应该没什么问题。看了一下进程,也确实存在 svnserve:ps -ef|grep svnserve
那问题出来哪里呢?突然想到-listen-port ,会不会端口的问题?于是杀掉进程后
$svnserve -d -r /var/svn
然后就可以连上了。。
做个记录

typecho SVN更新

typecho SVN更新

这样typecho的SVN源代码更新对我来说,有几个比较重要的地方。其中有一点就是我向70提出来的(我无法改源码)
1、需要能够对插件变量直接修改值,而不是通过config方法的form方式提交(其实我是想用在数据库备份插件中的,记录上次备份时间,以前的话,恐怕只能到option表里找到这个key,并且update这个key对应的value了),该方法目前存在于Helper类中。
2、修正附件的所有权(r1449)

多看看project页面的source中的change,可以看到更多修改记录。好象你有意见也可以去issues里面提(一个人更新。太慢了。。。)