环境
- 客户端:windows 7 + TortoiseSVN 1.8.12
- svn 服务器:CentOS 5
添加一个新项目的操作
对于一个新项目,在 svn 仓库添加项目之后,Checkout,将项目文件 copy/remove 至项目文件夹,选中所有文件及目录->右键->TortoiseSVN->Add…,这样就能递归添加目录、子目录和文件至 svn server。
这似乎已经是默认的规则了,但是笔者今天遇到的情况却并非如此。
问题现象
我遇到的现象是:在项目的一个模块下(一个模块,对于 svn 版本管理软件来说,就是一个目录),仅能将选中文件和目录添加到 svn,选中目录下的子目录及文件不能添加到 svn。
这样的话,如果目录下有很多嵌套子目录,每个子目录下又有文件的话,手动添加,那将是一个费力不一定讨好的体力活儿,一不小心就会少添加文件或者目录。
拿我今天添加的新版 Top.Api SDK 来说,一共有一千三百多个文件,四十六个目录,手动一层一层添加的话,耗时可想而知,作为一个资深 coder,对这种应对方法是绝对不能容忍的!
怎么办?折腾呗。
失败的尝试
- 首先,排除 svn 的问题,将该签的代码全部签入,TortoiseSVN->Clean up…,再试,表现跟最初一样,尝试失败。
- 重新 Checkout 到另外一个文件夹,添加文件,再选中所有文件及目录->右键->TortoiseSVN->Add…,表现跟最初一样,尝试失败。
- 换用 svn 命令,在 dos 命令窗口,进入需要添加的文件夹目录,svn add * –force,表现跟最初一样,尝试失败。
- 在模块根目录将所有文件和目录全部删除,提交 svn,再将需要的文件添加到模块根目录,再选中所有文件及目录->右键->TortoiseSVN->Add…,表现跟最初一样,尝试失败。
成功的尝试
将项目中需要添加的模块从 svn 项目的根目录直接删除,提交 svn,再把备份项目模块移到原来的位置,选中已经从 svn 删除的项目模块目录->右键->TortoiseSVN->Add…,表现跟添加新项目一样,尝试成功!
注意,这里是在 svn 项目的根目录操作,相当于操作的是 svn 项目根目录下的一个一级文件夹。
结论
至少我今天的尝试说明了一点,在 svn 项目的根目录下添加文件夹的话,是会递归添加其子目录和文件的,而在非根目录下添加文件夹,则不能。
如果哪位童鞋有更好的解决办法,请留言,将不胜感激。
补充
后来,同样的操作,完全没有问题。差别是,svn 服务端运行在 CentOS 6.9 上,相对来说是目前(2017-05-25)6 系列的最新版本。
可能跟 svn 版本有关系,是通过 yum install subversion 来安装的。而之前在 CentOS 5 上的版本,已经无从查证了,因为已经升级服务器。
1 | [root@localhost svn]# svnserve --version |