使用SharpSVN检测新文件夹文件变更时未检测到文件的问题排查
兄弟,我太懂这个问题了——这其实是Subversion(包括你用的SharpSVN)的默认行为,不是你漏了什么操作!
问题根源
Subversion的核心逻辑是:未被纳入版本控制的目录,默认不会被递归扫描其子内容。你看到的NewDir被检测到,是因为它是直接在已版本控制的RootDir下的新增目录,但SVN不会主动去翻这个“未登记”的目录里的文件,所以NewFile.txt就没被检测出来。这个行为在SVN的各个版本(包括你用的1.7版本)里都是一致的。
解决方案
根据你的需求,有两种处理方式:
1. 把目录和文件一起加入版本控制
如果你想让NewDir和NewFile.txt都被SVN管理,调用SvnClient.Add()时一定要设置递归深度为无限,这样会一次性把目录和里面的所有文件都添加进去:
using (var client = new SvnClient()) { var addArgs = new SvnAddArgs(); addArgs.Depth = SvnDepth.Infinity; // 关键:开启递归添加 client.Add(@"RootDir\NewDir", addArgs); }
2. 只检测文件但不立刻添加
如果只是想先检测到NewFile.txt的存在,不需要马上加入版本控制,那调用SvnClient.Status()时要指定递归深度为无限,同时开启获取所有条目:
using (var client = new SvnClient()) { var statusArgs = new SvnStatusArgs(); statusArgs.Depth = SvnDepth.Infinity; // 递归扫描所有层级 statusArgs.RetrieveAllEntries = true; Collection<SvnStatusEventArgs> statuses; client.Status(@"RootDir", statusArgs, out statuses); // 遍历statuses集合,就能同时看到NewDir和NewFile.txt的状态了 }
内容的提问来源于stack exchange,提问作者mamuesstack
相关产品推荐
相关产品推荐

