如题

环境

  1. 客户端:windows 7 + TortoiseSVN 1.8.12
  2. svn 服务器:CentOS 5

添加一个新项目的操作

对于一个新项目,在 svn 仓库添加项目之后,Checkout,将项目文件 copy/remove 至项目文件夹,选中所有文件及目录->右键->TortoiseSVN->Add…,这样就能递归添加目录、子目录和文件至 svn server。

这似乎已经是默认的规则了,但是笔者今天遇到的情况却并非如此。

问题现象

我遇到的现象是:在项目的一个模块下(一个模块,对于 svn 版本管理软件来说,就是一个目录),仅能将选中文件和目录添加到 svn,选中目录下的子目录及文件不能添加到 svn。

这样的话,如果目录下有很多嵌套子目录,每个子目录下又有文件的话,手动添加,那将是一个费力不一定讨好的体力活儿,一不小心就会少添加文件或者目录。

拿我今天添加的新版 Top.Api SDK 来说,一共有一千三百多个文件,四十六个目录,手动一层一层添加的话,耗时可想而知,作为一个资深 coder,对这种应对方法是绝对不能容忍的!

怎么办?折腾呗。

失败的尝试

  1. 首先,排除 svn 的问题,将该签的代码全部签入,TortoiseSVN->Clean up…,再试,表现跟最初一样,尝试失败。
  2. 重新 Checkout 到另外一个文件夹,添加文件,再选中所有文件及目录->右键->TortoiseSVN->Add…,表现跟最初一样,尝试失败。
  3. 换用 svn 命令,在 dos 命令窗口,进入需要添加的文件夹目录,svn add * –force,表现跟最初一样,尝试失败。
  4. 在模块根目录将所有文件和目录全部删除,提交 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost svn]# svnserve --version
svnserve, version 1.6.11 (r934486)
compiled Aug 17 2015, 08:37:43

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository back-end (FS) modules are available:

* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.

Cyrus SASL authentication is available.

[root@localhost svn]# cat /proc/version
Linux version 2.6.32-696.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Mar 21 19:29:05 UTC 2017

[root@localhost svn]# cat /etc/issue
CentOS release 6.9 (Final)