你需要注意忽略路径的正则表达式太过普遍了。给出的正则表达式是在完整路径上运行的。例如,如果你的仓库布局为:
svn_root/path/to/your_project
然后它有一个标准的树干、分支和标签布局,一组被评估的样本路径行可能是:
svn_root/path/to/your_project/trunk/new/folder/cache
svn_root/path/to/your_project/trunk/meta/files/sets/tmps.html
svn_root/path/to/your_project/trunk/file/conf/setting.xml
svn_root/path/to/your_project/trunk/cache/...
svn_root/path/to/your_project/trunk/tmps/...
让我们开始分析你提供的作为忽略路径参数一部分的正则表达式:
'(/cache|/tmps|/file/conf/setting.xml)'
- 括号表示中的表达式应该捕获。
- 管道符或交替项表示在多个可能的表达式中评估目标字符串上的每个表达式
- 每个表达式都非常简单,但让我们来分析一下:
- /cache
- 查找一个字面字符“/”
- 查找一个字面字符“c”
- 查找一个字面字符“a”
- 查找一个字面字符“c”
- 查找一个字面字符“h”
- 查找一个字面字符“e”
- /tmps
- 查找一个字面字符“/”
- 查找一个字面字符“t”
- 查找一个字面字符“m”
- 查找一个字面字符“p”
- 查找一个字面字符“s”
- /file/conf/setting.xml
- 查找一个字面字符“/”
- 查找一个字面字符“f”
- 查找一个字面字符“i”
- 查找一个字面字符“l”
- 查找一个字面字符“e”
- 查找一个字面字符“/”
- 查找一个字面字符“c”
- 查找一个字面字符“o”
- 查找一个字面字符“n”
- 查找一个字面字符“f”
- 查找一个字面字符“/”
- 查找一个字面字符“s”
- 查找一个字面字符“e”
- 查找一个字面字符“t”
- 查找一个字面字符“t”
- 查找一个字面字符“i”
- 查找一个字面字符“n”
- 查找一个字面字符“g”
- 匹配(几乎)任何字符
- 查找一个字面字符“x”
- 查找一个字面字符“m”
- 查找一个字面字符“l”
使用您的正则表达式分析后,让我们用样例路径来解释一下您的表达式:
要评估的字符串:
svn_root/path/to/your_project/trunk/new/folder/cache
- 循环遍历每个字符,查找 "/c" 等后面跟着的字母,直到找到第一个子表达式 "/cache" 的完全匹配为止。这个路径将被忽略。
要评估的字符串:
svn_root/path/to/your_project/trunk/meta/files/sets/tmps.html
- 循环遍历每个字符,查找字面上的“/”,跟随着“c”等...如果没有找到匹配,则继续搜索
- 循环遍历每个字符,查找字面上的“/”,跟随着“t”等...直到第二个子表达式“/tmps”完全匹配为止。此路径将被忽略。
要评估的字符串:
svn_root/path/to/your_project/trunk/file/conf/setting.xml
- 通过循环遍历每个字符并与第一个子表达式进行匹配。没有匹配项
- 通过循环遍历每个字符并与第二个子表达式进行匹配。没有匹配项
- 通过循环遍历每个字符并与最后一个子表达式进行匹配。找到匹配项。此路径被忽略
从这里开始,您可能会看到为什么以下两个也被忽略。其中一个子表达式与每个路径的一部分匹配:
svn_root/path/to/your_project/trunk/cache/...
svn_root/path/to/your_project/trunk/tmps/...
有几种方法可以解决这个问题,但是如果你只想忽略版本库中的一些特定目录,你可以按照以下方式修改表达式:
'(trunk/cache|trunk/tmps|/file/conf/setting\.xml)'
这真的取决于你想要做什么,哪些特定路径你想要忽略。如果需要更多帮助,请详细说明你的存储库是如何布置的,以及哪些目录需要被忽略。