git-svn clone регулярное выражение ignore-paths для папок

Я пытаюсь сделать клон git-svn, чтобы импортировать все файлы из SVN в GIT. Была дана такая команда;

git svn clone --stdlayout --ignore-paths='(/cache|/tmps|/file/conf/setting.xml)' --authors-file=../authors.txt file:///svnFolder/local-repos/PRG PRG.git

Вышеупомянутые клоны, но проблема в том, что они игнорируют все файлы и папки с кешем и tmps. Например, он игнорирует даже эти

new/folder/cache
meta/files/sets/tmps.html

Может ли кто-нибудь помочь мне установить регулярное выражение, чтобы указать пути игнорирования для игнорирования файлов и подкаталогов, которые находятся в кеше корневой папки и каталогах tmps.


person zapping    schedule 19.03.2013    source источник


Ответы (2)


Ваше регулярное выражение путей игнорирования слишком общее. Предоставленное регулярное выражение выполняется по полному пути. Например, если макет вашего репозитория:

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)'
  1. Окружающие круглые скобки означают, что выражение внутри должно захватывать.
  2. Каналы, или чередование, означают оценку каждого выражения в целевой строке из нескольких возможных выражений.
  3. Each expression is very straight forward, but lets analyze each:
    • /cache
      1. Find a literal character "/"
      2. Найдите буквенный символ «c»
      3. Найдите буквенный символ «а»
      4. Найдите буквенный символ «c»
      5. Найдите буквенный символ «h»
      6. Найдите буквенный символ «e»
    • /tmps
      1. Find a literal character "/"
      2. Найдите буквенный символ «t»
      3. Найдите буквенный символ «м»
      4. Найдите буквенный символ «p»
      5. Найдите буквенный символ «s»
    • /file/conf/setting.xml
      1. Find a literal character "/"
      2. Найдите буквенный символ «f»
      3. Найдите буквенный символ «i»
      4. Найдите буквенный символ «л»
      5. Найдите буквенный символ «e»
      6. Найдите буквенный символ "/"
      7. Найдите буквенный символ «c»
      8. Найдите буквенный символ «о»
      9. Найдите буквенный символ «n»
      10. Найдите буквенный символ «f»
      11. Найдите буквенный символ "/"
      12. Найдите буквенный символ «s»
      13. Найдите буквенный символ «e»
      14. Найдите буквенный символ «t»
      15. Найдите буквенный символ «t»
      16. Найдите буквенный символ «i»
      17. Найдите буквенный символ «n»
      18. Найдите буквенный символ «g»
      19. Совпадение (почти) с любым символом
      20. Найдите буквенный символ «x»
      21. Найдите буквенный символ «м»
      22. Найдите буквенный символ «л»

Проанализировав ваше регулярное выражение, давайте пройдемся по примерам путей, приведенным выше, с вашими выражениями:

Строка для оценки:

svn_root/path/to/your_project/trunk/new/folder/cache
  1. Перебирайте каждый символ в поисках буквального «/», за которым следует «c» и т. д., пока не будет найдено полное совпадение с вашим первым подвыражением «/cache». Этот путь игнорируется.

Строка для оценки:

svn_root/path/to/your_project/trunk/meta/files/sets/tmps.html
  1. Прокручивайте каждый символ в поисках буквального «/», за которым следует «c» и т. д. Соответствие не найдено.
  2. Прокручивайте каждый символ в поисках буквального «/», за которым следует «t» и т. д., пока не будет найдено полное совпадение с вашим вторым подвыражением «/ tmps». Этот путь игнорируется.

Строка для оценки:

svn_root/path/to/your_project/trunk/file/conf/setting.xml
  1. Переберите каждый символ и сравните с первым подвыражением. Совпадение не найдено
  2. Переберите каждый символ и сравните со вторым подвыражением. Совпадение не найдено
  3. Переберите каждый символ и сравните с последним подвыражением. Совпадение найдено. Этот путь игнорируется

Отсюда вы, вероятно, можете понять, почему следующие два также игнорируются. Одно из подвыражений соответствует части каждого пути:

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
comment
Отличное объяснение простого регулярного выражения. - person Martin; 09.07.2014

как насчет добавления маркера начала строки?

 ... --ignore-paths='^(/cache|/tmps|/file/conf/setting.xml)' ...
person umläute    schedule 19.03.2013
comment
Это как раз то, что не работает, если только вы не знаете, с каким значением оно на самом деле сопоставляется, чего вы, по-видимому, не знаете (потому что оно не начинается с косой черты и не не начинать с ветки). -1. - person Jan Hudec; 04.03.2014
comment
я хотел сделать регулярное выражение более конкретным и закрепить его; вы можете перечитать исходный вопрос, прежде чем оскорблять и отрицать ответы... - person umläute; 10.03.2014
comment
вы по-прежнему можете считать, что наличие похожей проблемы не является причиной для отрицания случайных ответов на другие проблемы. - person umläute; 10.03.2014
comment
У меня была такая же проблема, но я не сказал где закрепить шаблон, это предложение вводит в заблуждение. Да, шаблон должен быть привязан, но если вы не укажете где, он вообще не будет соответствовать. - person Jan Hudec; 10.03.2014
comment
Чтобы решить проблему в вопросе, шаблон должен быть привязан, но вам также нужно знать, с чем будет сопоставляться шаблон, потому что в противном случае он вообще не будет соответствовать, что вряд ли решение. Вы разместили пример, который не работает без дополнительных объяснений. Вот что я называю вводящим в заблуждение ответом. - person Jan Hudec; 10.03.2014