Archive

Posts Tagged ‘SVN’

SVN CheckOut系统找不到指定的文件_解决方法

July 11th, 2011 will No comments

在从SVN版本控制CheckOut(检出)最新版本的代码时,出现“系统找不到指定的文件”错误,然后CheckOut中止。从“Repository Browser”中查看指定的文件存在,而且还同时存在另一个文件,如指定文件是Test.c文件,同时存在test.c文件,而SVN提示找到Test.c.svn-base文件(其实就是找不到Test.c文件)。

产生这种问题的原因就是在某次commit(提交)时,将Test.c文件通过windwos的Explorer改成了test.c文件名。Windows认为是同一个文件,而SVN认为是不同的文件(使用于Linux系统,对文件名大小写敏感),导致SVN认为指定文件丢失。

解决方法:在“Repository Browser”中找到Test.c从右键菜单中“delete”,因为test.c是最新的,保留最新的版本即可。然后再次CheckOut(检出)最新版本的工程就不会有指定文件找不到的错误了。

到这里“SVN CheckOut系统找不到指定的文件”的问题就已经解决了。后面的可以不看了。

这里涉及到一个SVN改变文件名称大小写的问题。TortoiseSVN提供了两种方法如下:

解决方案 A)(推荐)

1. 提交你工作副本中的改变到版本库
2. 使用版本库的浏览器立即重命名该文件的大写(小写)为小写(大写)
3. 更新你的工作副本

解决方案 B)

1. 使用TortoiseSVN子菜单中的重命名命令将UPPERcase重命名为UPPERcase_ 格式
2. 提交该更改
3. 将UPPERcase_重命名为upperCASE格式
4. 提交该更改

Categories: 软件应用 Tags: ,

Windows下subversion强制写日志强制

May 2nd, 2011 will No comments

强制写日志才能提交代码有两种方法,一种是通过SVN客户端软件,简单方便,但只能针对特定的客户端。第二种是通过修改SVN服务器的钩子脚本,对所有的SVN客户端均有效,但需要获取SVN服务器管理权限。

修改SVN客户端的方法(以TortoiseSVN为例)

TortoiseSVN 使用属性来控制它的一些特性。这其中有一个 tsvn:logminsize 属性。在需要修改工作副本,右键到properties选定,出现如下图所示clip_image002

点new按钮,出现如图

clip_image004

选择图中的tsvn:logminsize属性,设置属性值就是最小日志长度。在提交前如果日志的长度没有达到最小长度的要求,提交按钮将是灰色,表示不能提交。

在SVN服务器修改写日志钩子脚本(以Visual SVN Server为例)

在服务器端的代码仓库的项目下面有一个hooks文件夹,将下面的代码存为pre-commit.bat放到版本库的hooks目录下即可,当你不写日志提交的话就会报告错误。(如果你下载使用,需要修改SVN_BINDIR为你的Subversion安装的程序目录),此其实是一个批处理文件,如果中间出现语法错可以参考批处理语法更改。

@echo off set SVN_BINDIR=d:\Subversion\bin  (此处需要修改为你的svn安装目录)
setlocal
set REPOS=%1
set TXN=%2
rem check that logmessage contains at least 10 characters
%SVN_BINDIR%\svnlook log “%REPOS%” -t “%TXN%” | findstr “……….” > nul
if %errorlevel% gtr 0 goto err
exit 0
:err
echo Empty log message not allowed. Commit aborted! 1>&2
exit 1

PS:每个需要强制写日志提交的项目都需要将此脚本(批处理文件),替换掉,没有替换的项目将不会强制需要写日志。

Categories: 软件应用 Tags: ,

TortoiseSVN branch/tag switch Relocate的区别

May 1st, 2011 will 2 comments

将之前先明确两个概念,工作副本就是本地的代码的目录,工作目录就是SVN服务器端的与本地工作副本相对应的目录。

Branch/Tag是将当前工作目录保存一个类似快照的东西到版本库,此版本一般是发行版(Release)或者里程碑意义的,它并不会将当前工作副本的改变上传。在TortoiseSVN中Branch/Tag的目录路径需要指令文件夹的名称。branch_tag_hint switch是转换当前工作副本对应的工作目录,一般是从trunk工作目录转向tag工作目录,或者从tag转回来,switch的类似update,将switch的目标工作目录的文件更新到本地,一般会产生很多冲突。

Relocate是当代码仓库的访问路径(服务器的计算机名称修改,或IP地址变更,URL变更),而此时已检出修改的工作副本(working copy)没有变更,若此时直接提交(commit),肯定不能成功,因为此提交地址对应的svn服务器不存在了。TortoiseSVN为我们提供了重定位工作副本的功能(TortoiseSVN → Relocate),此指令扫描.svn文件夹中的所有条目,改变条目的url(服务器地址)为新输入的地址。

重定位操作可能的原因:

a) 服务器的IP地址已更改

b) 协议已更改(比如从http://改为 https://)

c) 版本库在服务器的路径已更改

在TortoiseSVN的帮助说明中说明重定位是极少使用的操作,但对于在本地小型内网开发的,由于重装系统,服务器主机变动,重定位应用还是比较多的。

Categories: 软件应用 Tags: ,