为什么有些文件不能从svn服务器上更新下来
这个问题,对于刚使用SVN的用户都会遇到
首先,你得到本地的SVN项目根目录上,进行 Clean up 操作,然后在更新你本地地整个SVN项目,如果没有任何文件更新下来,你右键选择 Check for modifications 命令进行操作,会出现一个对话框你只要点击 Check repository 一会就会出现很多文件,这时你就能看到SVN服务器上有没有你想上传的文件在服务器上
要是有,就右键更新下来,要是没有,你就可以上传新文件到SVN服务器上了
一个最直接的想法就是利用google的cpplint对代码进行一些coding
style的检查,让小组内成员的代码风格在一定程度上得到统一。并且用于版本控制的TortoiseSVN能够方便的设置pre-commit
hook,以便在每次提交代码前运行cpplint。
考虑到初步的实验性质,以及cpplint带来的冲击,所以这个检查暂时只能做到client-end。
事实证明,即使是这样,在配置的过程也掉了几次坑,大致如下:
TortoiseSVN的pre-commit hook只支持直接运行EXE或者Batch脚本。对于python脚本,即使你设置了文件关联(即双击能运行),运行Hook时也会提示 %1不是有效的Win32程序
。
解决方法是使用形如 C:\python27\pythonexe "D:\StaticCodeAnalysis\run_cpplintpy"
的commandline。两个路径都要是full path。
run_cpplintpy
是我写的中间脚本,它会首先做一些处理,设置一些参数,然后调起 cpplintpy
TortoiseSVN的pre-commit hook会在调用脚本的时候(这里是run_cpplintpy)传递4个参数, 它传递的
第一个参数是一个临时文件路径,这个临时文件包含了此次发生改动的文件或者文件夹列表。
这是一个很重要的信息,因为现在是在client-end部署,所以网上找到的那些使用 svnlook changed
的获取文件改变的情况并不适用。
改动列表包含了改动的文件夹,以及被删除的文件。明显不能对他们做cpplint。
脚本通知hook检查失败是通过简单的检查exit()调用的返回值,为了方便,修改cpplint,让他到处他的main,直接在run_cpplint中调用cpplintmain。
cpplint检查失败之后恰好会返回sysexit(non_zero),通知hook脚本失败。
0条评论