您的位置:首页 > 其它

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

2012-11-09 16:17 519 查看
Settings -> Saved Data -> Authentication Data -> clear。即可清除保存的上个用户登录信息;当再次用到svn时,会提示输入用户名密码,输入新的用户名密码即可。

或者,手动删除下面目录下的svn登录用户信息保存文件:
C:\Documents and Settings\javaLee\Application Data\Subversion\auth\svn.simple

通过TortoiseSVN的clear Authentication Data和手动删除效果是一模一样的!都是对userName\Application Data\Subversion\auth\svn.simple\目录下的已保存登录用户信息文件进行删除。



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

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

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

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

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

3. .can’t connect to host …………

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

如果服务器是svnserve,检查有没有运行svnserve,有没有打开3690端口(我们用的是这个,端口是9999)

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

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

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

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

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

如:telnet 192.168.0.1 9999

4. 路径或权限不足时将出现错误信息提示:

  http://localhost (路径不对)

  Error * PROPFIND request failed on '/' PROPFIND of '/': 200 OK (http://localhost)

  http://localhost/svn (权限不足)

  Error * PROPFIND request failed on '/svn' PROPFIND of '/svn': 403 Forbidden (http://localhost)

  http://localhost/svn/repos (正常显示)

  http://localhost/repos (权限不允许)

  Error * PROPFIND request failed on '/repos' PROPFIND of '/repos': 405 Method Not Allowed (http://localhost)

解决办法是填写正确的路径或给予适当的权限。

5、不启动E:\subversion\bin\svnserve.exe ,但启动了ApacheSVN ,访问(tortoiseSVN –> Repo – browser)或提交(SVN Commit)情形如下:

  现象:svn://localhost/svn/repos 不能访问或提交,提示:Error * Can't connect to host 'localhost': 由于目标机器积极拒绝,无法连接。 但 file:///e:/svn/repos 和 http://localhost/svn/repos 可以访问或提交。

  原因:svn:// 是独立服务器 svnserver 自己的协议。file:/// 是本地访问,即服务器端和客户端在一个机器上。

  解决方法:使用 http 方式访问。(咱启动用的是svnserve)

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

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

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.基于svnserve的subversion服务器在新配置权限后:svnserve.conf:12: Option expected

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

9. 怎样让版本库中的项目返回至以前的某个版本?
选中本地拷贝文件夹, 右键->TrosiseSVN ->显示日志 ,弹出的对话框中选中要恢复的版本,右键->复原到此版本。
复原到此版本只会影响本地拷贝。
你要再将你的本地拷贝提交到版本库,最高的版本才会变动

复原至此版本: 这将会还原从那个版本以来的所有变更,使用选中的版本来替换文件/文件夹。在实际使用中发现并不是简单的替换,如果你在当前工作复本中所做的修改不涉及到被选中版本以来的变更内容,那么你的修改会与版本N进行合并,否则这个操作会产生一个冲突。

10.如何看已删除文件的历史版本
TortoiseSVN:
如果是误删除的文件:
1.恢复该删除文件。

用TortoiseSVN:
(1).在本地working copy中,用TortoiseSVN->Show log查看版本库的历史记录。可以用search。
(2.)找到删除该文件或者文件夹的版本,在Log message里右键Revert the changes from this revision。
(3).该文件或文件夹就被恢复到本地的working copy中了。如果是误删除的,commit到Repository里就行了。

用Eclipse的Subclipse插件:
(1)用Team->Show SVN Repository History查看版本库的历史记录。
(2.) 找到删除该文件或者文件夹的版本,右键Revert to XX version.
(3).该文件或文件夹就被恢复到本地的working copy中了。如果是误删除的,commit到Repository里就行了。
2.在该文件上右键TortoiseSVN->Blame 查看该文件的所有修改。

如果不是误删除的文件:
1.用Show log找到该文件的版本N.
2.Update to revision M(N以前的版本)。
3.本地working copy添加该文件后,查看该版本或用Blame查看该文件的所有修改(范围选择1到N-1)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: