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.can’t 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 出來,避免影响效率。
1.Commit failed。……You have to update your working copy first
多人同时修改同一文件,在提交前其他人已经抢先提交到SVN服务器中,导致该错误;解决方法:对工作复本中的文件进行更新即可
更新版本解决冲突主要就是
a、 在当前目录下执行“update”(更新)操作
b、 在冲突的文件上(选中文件--右键菜单—TortoiseSVN—Edit conflicts(解决冲突))
c、 如果要使用服务器版本,在Theirs窗口选中差异内容,右键,选择Use this text block(使用这段文本块)。
同理如果要使用本地版本,在协商后,在Mine窗口右键,选择Use this text block(使用这段文本块)。
d、 修改完成后,保存kingtuns.txt文件内容。
e、 在B用户的冲突目录下,选中文件--右键菜单—TortoiseSVN—Resolved(解决)。会列出冲突的文件列表,如果确认已经解决,点OK。
2.Commit failed;File already exists”提交失败,文件**已存在
版本管理系统在改变你的计算机上的工作副本时,是非常的小心的。在做任何事情之前,它都尽可能把您的意图写到你的计算机上的日志文件中去。但如果偶然地操作中断了(例如:突然停电了,您的计算机死机了),那么日志文件记录就可能同您最后的工作状态不一致。一种建议解决途径:先把要提交的东西拷出来放到其它目录,再更新本地文件,然后把拷出来的文件重新放回去提交
3.Working copy’**’locked. Please execute the ’Clean up’command
Subversion客户端在提交内容之前会在本地的工作拷贝写日志,防止其他客户端再次作操作,如果这个提交过程中发生错误,就会存在未清理的日志,解决这个问题之需要执行“清理”操作,整理你的计算机上的工作副本,清理错误的日志记录,使您可以继续操作
4.执行clean up时,出现错误“Subversion reported an error while doing a cleanup!” /'**/' is not a working copy directory ”
遇到这种情况,先删除隐藏文件夹.svn中的tmp下面的临时文件,再执行clean up
5.
svn: Commit failed (details follow):
svn: MKACTIVITY of '/aanugdk/!svn/act/1f177b34-1601-...': 403 Forbidden
方法一:修改url大小写。
SVN在Check out 等操作时,是URL大小写不敏感的,可在Commit /delete时却是在大小写 敏感的,所以在设定SVN的服务器路径时,一定要注意大小写。
方法二:修改SVN客户端适配器。
Eclipse preferences, Team -> SVN ->svn interface: 将JavaHL改成svnKit
注:SVN在Checkout等操作时,是URL大小写不敏感的,可在Commit/delete时却是在大小写敏感的,所以在设定SVN的服务器路径时,一定要注意大小写。
svn 更换提交地址:svn switch --relocate http://1.1.5.54:8080/svn/MyERP_Core_Main/MyERP_Core/trunk/trunk_ios5x_1_2 http://1.1.5.54:8080/svn/MyERP_Core_Main/MyERP_Core/trunk/trunk_ios5x_1_2
svn 某一文件(BillUIDeviceFunction.m)存在冲突,我就将旧文件拷出来直接取代新文件
这个svn resolves 命令告诉系统冲突已经解决请忽略。
svn add foobar 时出现 xx is already under version control
find . -name ".svn" | xargs rm -Rf
问题1:’.’ is not a working copy. Can’t open file ‘.svn/entries’:
解答:原因是输入的访问路径不正确,如svn://192.168.6.200/如果最后少写了“/”,就会出现这种错误提示。
问题2:将文件checkout之后,没有出现SVN的图标,是怎么回事?
解答:有些时候在客户端Checkout文件后,SVN的系统图标也会不显示,可以执行一下“Clean up”,就会出现SVN的系统图标。
问题3:为什么添加的文件,别人看不到,版本库里也没有?
解答:最可能的原因是,你只是执行了“Add”而没有“Commit”,这样只是在本地注明某个文件是预定要增加的,而没有实际添加到版本库中,要添加到版本库必须执行“Commit”。删除文件也是一样。
问题4:“Commit failed。……You have to update your working copy first”
解答:多人同时修改同一文件,在提交前其他人已经抢先提交到SVN服务器中,导致该错误;解决方法:对工作复本中的文件进行更新即可。
问题5:更新时提示文件发生冲突:“One or more files are not a conflicted state。”
解答:多人同时修改同一文件的同一部分,SVN无法自动进行合并,会导致该错误;解决方法:对工作复本中的文件和服务器的文件进行比较,手工合并即可。
问题6:“Commit failed;File already exists”提交失败,文件**已存在。
解答:版本管理系统在改变你的计算机上的工作副本时,是非常的小心的。在做任何事情之前,它都尽可能把您的意图写到你的计算机上的日志文件中去。但如果偶然地操作中断了(例如:突然停电了,您的计算机死机了),那么日志文件记录就可能同您最后的工作状态不一致。一种建议解决途径:先把要提交的东西拷出来放到其它目录,再更新本地文件,然后把拷出来的文件重新放回去提交。
问题7:Working copy’**’locked. Please execute the ’Clean up’command.
解答:Subversion客户端在提交内容之前会在本地的工作拷贝写日志,防止其他客户端再次作操作,如果这个提交过程中发生错误,就会存在未清理的日志,解决这个问题之需要执行“清理”操作,整理你的计算机上的工作副本,清理错误的日志记录,使您可以继续操作。
问题8:执行clean up时,出现错误“Subversion reported an error while doing a cleanup!” '**' is not a working copy directory ”
解答:遇到这种情况,先删除隐藏文件夹.svn中的tmp下面的临时文件,再执行clean up。
问题9:因为仓库与目录很多,使用TSVN每次选择目录URL of repository有很多地址,如何才清除呢?像清除浏览器中的历史那样,用什么方法呢?
解答:右键->TortoiseSVN->Settings->Saved Data,就可以清除你想要的东西了,包括URL、log、窗口大小、密码缓存等。
问题10:在SVN中选中一个目录show log时,出现了某些版本只显示版本号和(no date),没有其他信息,什么原因引起的?
解答:出现了(no date)的revision,为其他人修改了你所没有权限访问的某个目录下的文件。
问题11:Attempted to lock an already-locked dir
问题12:svn: warning: 'xxxxx' is already under version control 解决办法?
1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
2、往版本库中添加新的文件或文件夹
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
svn commit -m
例如:svn commit -m “add test file for my test“ test.php
简写:svn ci
4、加锁/解锁
svn lock -m “LockMessage“ [--force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH
5、更新到某个版本
svn update -r m path
例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
7、删除文件
svn delete path -m “delete test fle“
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
简写:svn (del, remove, rm)
8、查看日志
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息
svn info path
例如:svn info test.php
10、比较差异
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
11、将两个版本之间的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、SVN 帮助
svn help
svn help ci
13、版本库下的文件和目录列表
svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
14、创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
16、代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH...]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
17、解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
18、输出指定文件或URL的内容。
svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)