Bootstrap

subversion(SVN)常见问题及其解决方法

 

1. 隐藏文件.svn目录删除了怎么办

Checkout后,工作空间下.svn目录下有大量隐藏文件,占用比较大的空间,他们是工作空间的管理文件,不能删除,如果不小心删除了也不要抓狂,不会影响服务器端的,重新checkout就又可以工作了。如果想不包含这些隐藏文件导出,可以用TSVN菜单里的export完成。

 

 

2.文件名大小写问题,在下载代码时,下载到一半,系统提示不能找到……文件, 提示Can't copy"……"to"……"系统找不到指定文件

该问题很可能是因为上传了大小写不同的同名文件,在Repo-Browser里找到同名文件删除一个就好了。(该问题曾经困惑过好长时间,解决了是如此简单)

 

 

3.为什么我的配置库http://ip/svn无法访问,提示没有权限,但是通过http://ip/svn/myproject可以访问

在apache配置文件httpd.conf配置的只是个配置库仓库的虚拟目录,物理上是不存在,即使有所有配置库的权限也只能访问到具体的配置库一级

 

 

4.在安装svn的机器上可以进行commit操作,但是通过其他机器commit出错

在安装svn的机器上可以进行commit操作,但是通过其他机器commit出现如下错误,appach的权限文件没有问题

错误信息如下

Error  Commit failed(details follow)

Error MKACTIVITY of '/svn/test/!svn/act/739fe0d1-58f7-be4a-915b-a:03 Forbidden (http://192.168.0.1) '

 

通过多次尝试,终于找到原因了。发现原来是域名写错了。

受下面的配置影响:

在Httpd.conf文件添加:

#SSPI authentication

<Location /repository>

              DAV svn

              SVNParentPath d:/repository

              AuthzSVNAccessFile e:/repository/accessfile               

              Require valid-user

              AuthType SSPI

           AuthName "Subversion repositories"

                     # SSPI settings

               SSPIAuth On

               SSPIAuthoritative On

               # point to domaincontroller

               SSPIDomain domain.com.cn

              SSPIOfferBasic On

</Location>

 

SSIDomain中的domain写的是全部的域名我们公司的域名是domain.cn.把它修改成domain然后重新启动appache就可以了

 

 

 

5.cant connect to host …………

1,服务器有没有运行,有没有打开相应端口

如果服务器是svnserve,检查有没有运行svnserve,有没有打开3690端口

如果服务器是apache,检查apahce是否运行,是否打开80端口

检查时可以在服务器运行netstat -na看看相应端口是否在LISTEN

2,防火墙有没有开放相应端口

3,客户端是否可以连接服务器的相应端口

使用命令telnet 服务器IP 相应端口

如:telnet 192.168.0.1 3690

 

 

6.基于svnserve的subversion服务器在新配置权限后:svnserve.conf:12: Option expected

该问题是因为subversion读取配置文件svnserve.conf时,无法识别有前置空格的配置文件,因此在配置文件里每行前面不能有空格

7.        怎样才能把svn版本库中的某一个文件或目录永久的删除?

 

[案例一]

例如:当前库的最新版本是46,我在第46个版本上,更加了一个5M的文件,名字为FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

现在我要把这个新增加的5M文件彻底的删除,不想让它存在库中占用空间

(1)用svn log -v命令查看添加文件时的Path。或者使用tortoisesvn之类的客户端工具查看也可以

C:/myhouse/SCM_Home/SVN_HOME/localtest/docs/general>svn log -v "FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf"

------------------------------------------------------------------------

r46 | zhangjia | 2007-09-23 10:40:34 +0800 | 3 lines

Changed paths:

   A /docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

 

FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

 

delete for ever

------------------------------------------------------------------------

(2)结果得到添加的路径为/docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

(3)把整个库先lock住,防止在此过程中有人继续修改

当然如果不lock也是可以了,只不过当你把所有的内容导入到新库中之后,还要用dumpfilter把旧库中

新增部分也导入到新库中。为了避免不必要的麻烦,所以我们需要lock

(4)导出旧库中的所有版本

svnadmin dump C:/myhouse/external/SVNRepos/svn > svns.dmp

(5)对导出的旧库中的文件做过滤,剔除我们不用的那个文件的PATH

type svns.dmp | svndumpfilter exclude "docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf" > filter.dmp

(6)重新创建一个新的库,版本最好和以前的相同。而且不要做任何的修改

svnadmin create C:/myhouse/external/SVNRepos/svndump

(7)把我们过滤后的那个导出文件,导入到新的库中

svnadmin load C:/myhouse/external/SVNRepos/svndump < filter.dmp

(8)检查新库中的文件和版本状态

[案例二]

当前库的最新版本是48,我在第46个版本上,更加了一个5M的文件,名字为FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

现在我要把在第46个版本上新增加的5M文件彻底的删除,不想让它存在库中占用空间

(1)用svn log -v命令查看添加文件时的Path。或者使用tortoisesvn之类的客户端工具查看也可以

C:/myhouse/SCM_Home/SVN_HOME/localtest/docs/general>svn log -v "FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf"

------------------------------------------------------------------------

r46 | zhangjia | 2007-09-23 10:40:34 +0800 | 3 lines

Changed paths:

   A /docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

 

FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

 

delete for ever

------------------------------------------------------------------------

(2)结果得到添加的路径为/docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

(3)把整个库先lock住,防止在此过程中有人继续修改

(4)导出旧库中的所有版本

svnadmin dump C:/myhouse/external/SVNRepos/svn > svns2.dmp

(5)对导出的旧库中的文件做过滤,剔除我们不用的那个文件的PATH

type svns2.dmp | svndumpfilter exclude "docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf" > filter2.dmp

(6)重新创建一个新的库,版本最好和以前的相同。而且不要做任何的修改

svnadmin create C:/myhouse/external/SVNRepos/svndump2

(7)把我们过滤后的那个导出文件,导入到新的库中

 

导入过程中出现提示:

...

<<< Started new transaction, based on original revision 46

 

------- Committed revision 46 >>>

 

<<< Started new transaction, based on original revision 47

     * editing path : src/build/build.xml ... done.

 

------- Committed revision 47 >>>

 

<<< Started new transaction, based on original revision 48

     * editing path : src/build/scmbuild.xml ... done.

 

------- Committed revision 48 >>>

显然46号版本已经保留了但是我们要删除的那个文件也同样被删除了

(8)检查新库中的文件和版本状态

[案例三]

当前库的最新版本是60,我在第50个版本上,更加了一个5M的文件,名字为FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf;

同时修改了10个源代码文件;删除了2个源代码文件

现在我要把在第46个版本上新增加的5M文件彻底的删除,不想让它存在库中占用空间

考虑一下,如果按照我们案例中提供的方法是否能够做到保留历史,而删除物理文件?

并说明理由?

[总结]

删除文件确实能够通过我们上述的提供的方法解决,但是我们也看到如果当库中的版本很多,容量很大的时候

每次当我们导出和导入的时候,花费的时间比较长,而且使用的空间也比较大。我们建议,

所有的导入和导出以及过滤的操作尽量在同一块磁盘或者扇区上执行,这样速度比较快;当然你要保证你的

扇区的容量能够容纳原来仓库至少2倍(2~4倍)的大小((1)原始的库,(2)导出的dump,(3)导出的filter dump,(4)导入的库)

当然你也可以copy到别的扇区,磁盘或者机器上运行,只要保证环境一致就可以

 

 

 

8.svn-怎么把authz转换成UTF-8格式

 

用菜单转换功能转换先,

用unicode转换为utf-8,然后再存盘

打开后再用utf-8转unicode(ASCII编辑)即可。

 

 

 

 

9.如何从客户端修改用户密码

从客户端修改密码的工具见附件,apache方式

 

 

10.提示:405 Method Not Allowed的原因和解决方法

用TortoiseSVN访问基于apache配置的svn版本库时,有时候会提示错误405 Method Not Allowed,开始用TSVN checkout了一个正常的目录,假设服务器地址为:http://svn/project1,之后,服务器经过其它配置,这个地址变了,使得用这个地址不再能访问到正确的版本库,此时,TSVN就极有可能报405错误。另外,当你访问的地址大小写与服务器的地址不一致时,也会出现该错误。只要将TSVN访问的地址改成正确的,或修改服务器配置,使原地址可以访问即可解决。

 

 

11.执行Import操作,出错信息:Error: Can't create directory '/storage/yslProR/db/transactions/0-1.txn': Permission denied (来自网络)

方法:这跟linux用户访问目录的权限有关。

1)、创建apache用户、组,useradd apache groupadd apache

2)、将用户apache加入apache组 usermod -ggroup apache

3)、修改apache的http.cont文件

找到 User daemon

Group daemon

改为 User apache

Group apache

4)、修改只有apache用户对SVN库目录有操作权限。

chown -R apache /库路径

chmod 700 /库路径

5)、说明,如果你有apache的用户、组就不需要创建

 

12.Error: Can't create directory '/svn/test/db/transactions/1-1.txn': Permission denied (来自网络)

 

方法:没有可写权限,chmod go+w transactions

 

13.commit failed(details follow):Can't open activity db: Permission denied (来自网络)

 

方法:修改仓库下面dav和db目录的写权限..

 

14.如何提高TSVN的效率

 

如何提升 TortoiseSVN 的使用效率

看到这篇文章,觉得不错,推荐给大家,原文是繁体,翻译了一下

TortoiseSVN 安裝好了之后会有個 TSVNCache.exe 程序不断在后台执行,对电脑中所有 Subversion 工作目录(Working Copy)的状态缓存(Status Cache),最主要的目的是让你在执行 svn commit 或 svn update 的时候可以更迅速的进行。

 

不过当你的 TortoiseSVN 沒有特別调整过的話,这个 TSVNCache.exe 程序就会一直不断的扫描你所有磁盘中所有的目录看有沒有 _svn 或 .svn 目目录,然后再进行档案比对,看有沒有档案有异常,如果你电脑的档案目录过多或工作目录过多的話,很有可能会让 TSVNCache.exe占去你不少 CPU 资源,以及不断的耗用磁盘 I/O,导致电脑速度变慢!

以下是我的摘要說明,我是用 TortoiseSVN 1.5.0

 

 

1、建议可以勾选这个,让这些 Overlays Icon 只会在「资源管理器」里出现,当我们在用其他软件的「打开资源管理器」出现的那个窗口时,就不会显示这些 Overlays Icon,以降低系统负担。

2、建议仅仅勾选 Drive Types 中的 Fixed drives,也就是说 Overlays Icon 只会在本地电脑的几个磁盘分区才会出现。

3、將所有磁盘都列入 Exclude paths,让 TSVNCache.exe 预设不要搜索所有的磁盘,但记得要设定 C:/* 不要只输入 C:/ 喔。

4、最后將你的 Subversion 工作目录位置列入 Include paths 即可,像我习惯將所有工作目录全部放在一个集中的目录內方便管理,这里我就只需要将该目录列进去即可,记得最后也要填上 * 号才会包含该目录下所有目录与档案。

5、另外提醒一点,在你电脑中的 Subversion 工作目录数量是越少越好,沒用的本地copy请删掉,等要用的時候再 Checkout 出來,避免影响效率。

 

;