Как работают Git SVN ignore-paths (игнорируя ежедневные теги сборки)? - PullRequest
14 голосов
/ 04 августа 2011

Я пытаюсь клонировать svn-репозиторий, используя git svn. Хранилище помечено ежедневными сборками, которые я хочу игнорировать. Я пытаюсь использовать опцию «ignore-paths» для этого, но я все еще получаю ежедневные теги сборки в качестве веток в моем хранилище.

Очень недавний и похожий (но пока без ответа) вопрос здесь: Как git svn получать только ветки / теги с определенными шаблонами?

Расположение репозитория - https://test.kuali.org/svn/rice

Общая структура репозитория

  • филиалы
    • Филиал 1
  • Игнорировать каталог 1
  • Игнорировать каталог 1
  • теги
    • тег 1
    • Tag 2
    • старый
      • Старый тег 1
      • Старый тег 2
    • строит
      • Ежедневная сборка 1
      • Ежедневная сборка 2
  • багажник

Что я пробовал

Я не так хорош в регулярных выражениях, и они могут ошибаться, но вот что я пробовал:

Это была просто измененная версия того, что я нашел в документации git svn:

git svn clone -r15709:HEAD --prefix=svn/ --stdlayout --no-follow-parent --ignore-paths="^[^/]+/(?:tags/builds|tags/old|branches)" https://test.kuali.org/svn/rice

Это я пытался упростить:

git svn clone -r15709:HEAD --prefix=svn/ --stdlayout --no-follow-parent --ignore-paths="(old|builds)" https://test.kuali.org/svn/rice rice-full

Отчаяние ... (и добавление некоторых других путей, которые мне не нужны)

git svn clone -r15711:HEAD --prefix=svn/ --stdlayout --ignore-paths="^[^/]+/(?:builds|old)|inactive|rice-functional-tests|sandbox|tools" https://test.kuali.org/svn/rice

Затем я переключился на более новую версию, чтобы она заканчивалась раньше, и попытался игнорировать все ветви и теги для теста. Этот, казалось, не получил никаких веток и тегов, но он так и не закончился. Казалось, что он замерзает (по крайней мере, он работал дольше, чем я ожидал, чтобы получить только один или два дня истории):

git svn clone -r21846:HEAD --prefix=svn/ --stdlayout --ignore-paths="^tags*|^branches*" https://test.kuali.org/svn/rice

Последнее, что я попробовал, было:

git svn clone -r15711:HEAD --prefix=svn/ --stdlayout --ignore-paths="^tags/old*|^tags/builds*|^inactive*|^rice-functional-tests*|^sandbox*|^tools*" https://test.kuali.org/svn/rice

Общие мысли и вопросы

  1. Я не совсем уверен, с чем сопоставляется регулярное выражение ignore-paths. Это относительный путь к хранилищу svn (теги / сборки / ежедневная сборка 1)? Оценивается ли он для каждого файла в проекте (теги / сборки / ежедневная сборка 1 / файл 1, теги / сборки / ежедневная сборка 1 / файл 2) или только на уровне ветви / тега (теги / сборки / ежедневная сборка 1)? Включает ли он базовый URL хранилища (https://test.kuali.org/svn/rice/tags/builds/Daily build 1)?

  2. Есть ли что-то, что я должен делать, кроме --stdlayout (с указанием регулярного выражения для тегов, которые будут получать то, что я хочу)?

  3. Меня интересуют только транк и некоторые метки выпуска. Есть ли лучший способ получить их? Я попытался клонировать только с транком, затем добавив «fetch =» в конфигурацию, чтобы добавить только те теги, которые мне нужны, а затем получить ревизию, из которой были отмечены теги, но когда я смотрю на результат в git gui (визуализируйте все ветви ) эти два тега отображаются как плавающие с одним коммитом (не привязанным к транку или друг к другу).

Не уверен, что он релевантен, но я использую msysgit (git version 1.7.3.1.msysgit.0) на 64-битной машине с Windows 7.

Длинный вопрос, я знаю ... Я просто хотел быть тщательным.

1 Ответ

4 голосов
/ 04 августа 2011

Может быть проще просто клонировать транк и ничего больше (git svn clone -T <a href="http://path/to/trunk" rel="nofollow">http://path/to/trunk</a>), а затем добавить нужные теги и ветви, изменив файл конфигурации и выполнив git svn fetch es.

...