Ваше регулярное выражение путей игнорирования слишком общее. Предоставленное регулярное выражение выполняется по полному пути. Например, если макет вашего репозитория:
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/...
Давайте начнем с анализа регулярного выражения, которое вы предоставили как часть параметра ignore-paths:
'(/cache|/tmps|/file/conf/setting.xml)'
- Окружающие круглые скобки означают, что выражение внутри должно захватывать.
- Каналы, или чередование, означают оценку каждого выражения в целевой строке из нескольких возможных выражений.
- Each expression is very straight forward, but lets analyze each:
- /cache
- Find a literal character "/"
- Найдите буквенный символ «c»
- Найдите буквенный символ «а»
- Найдите буквенный символ «c»
- Найдите буквенный символ «h»
- Найдите буквенный символ «e»
- /tmps
- Find a literal character "/"
- Найдите буквенный символ «t»
- Найдите буквенный символ «м»
- Найдите буквенный символ «p»
- Найдите буквенный символ «s»
- /file/conf/setting.xml
- Find a literal character "/"
- Найдите буквенный символ «f»
- Найдите буквенный символ «i»
- Найдите буквенный символ «л»
- Найдите буквенный символ «e»
- Найдите буквенный символ "/"
- Найдите буквенный символ «c»
- Найдите буквенный символ «о»
- Найдите буквенный символ «n»
- Найдите буквенный символ «f»
- Найдите буквенный символ "/"
- Найдите буквенный символ «s»
- Найдите буквенный символ «e»
- Найдите буквенный символ «t»
- Найдите буквенный символ «t»
- Найдите буквенный символ «i»
- Найдите буквенный символ «n»
- Найдите буквенный символ «g»
- Совпадение (почти) с любым символом
- Найдите буквенный символ «x»
- Найдите буквенный символ «м»
- Найдите буквенный символ «л»
Проанализировав ваше регулярное выражение, давайте пройдемся по примерам путей, приведенным выше, с вашими выражениями:
Строка для оценки:
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)'
Это действительно зависит от того, что вы хотите сделать, какие конкретные пути вы хотите игнорировать. Если вам нужна дополнительная помощь, не могли бы вы подробно разъяснить, как устроен ваш репозиторий и какие каталоги следует игнорировать.
person
Russ Watson
schedule
31.07.2013