Подтвердить что ты не робот

Использование svn: игнорировать, чтобы игнорировать все, кроме определенных файлов

С свойством svn: ignore, есть ли способ указать, что я хочу игнорировать, на основе шаблонов, которые я не хочу игнорировать? Другими словами, я хочу игнорировать все, кроме файлов, заканчивающихся на .xyz. Как я буду делать это (если это возможно)?

Один из вариантов, который я изучил, - это то, что я хочу, чтобы он был версией, и установил свойство svn: ignore в каталоге как '*', что означает отсутствие других файлов, но то, что я уже сделал, будет версией. Это лучшее, что я могу придумать, но он чувствует себя грязным, если мне когда-либо понадобится добавить другой файл для версии, мне придется сделать несколько коммитов... один, чтобы удалить свойство svn: ignore, другое для добавления/фиксации нового файла (ов), а затем третьего для изменения svn: ignore back to '*'.

Ваши мысли?

4b9b3361

Ответ 1

Нет, нет эксклюзивного соответствия, как вы описали. В этой статье перечислены возможности для сопоставления с образцом. Это ограничено:

  • ? - Соответствует любому отдельному символу
  • * - соответствует любой строке символов, включая пустую строку
  • [ - Начинает определение класса символов, оканчивающееся на ], используется для сопоставления подмножества символов

Подобный вопрос был задан уже здесь.

Ответ 2

Посмотрите http://www.thoughtspark.org/node/38. Очевидно, вы можете использовать "!" в группах персонажей, чтобы отрицать его значение. Поэтому, если вы хотите игнорировать все, кроме файлов, заканчивающихся на .java, установите следующий шаблон в svn: ignore:

*[!j][!a][!v][!a]
*.java?*

Ответ 3

Это единственное решение, о котором я знаю. Вы можете явно добавлять файлы, даже если они игнорируются.

Вам нужно будет добавить этот параметр во все подкаталоги.

# Create a repository with property ignore *

[[email protected] ~] cd /tmp
[[email protected] /tmp] svnadmin create foo
[[email protected] /tmp] svn co file:///tmp/foo co
Checked out revision 0.
[[email protected] /tmp] cd co
[[email protected] co] svn propset svn:ignore \* .
property 'svn:ignore' set on '.'

# Create 3 files

[[email protected] co] touch a
[[email protected] co] touch b
[[email protected] co] touch c

# We can add all 3 of these files in one transaction

[[email protected] co] svn status
M     .
[[email protected] co] svn add a
A         a
[[email protected] co] svn add b
A         b
[[email protected] co] svn status
M     .
A      a
A      b
[[email protected] co] svn add c
A         c
[[email protected] co] svn ci
Sending        .
Adding         a
Adding         b
Adding         c
Transmitting file data ...
Committed revision 1.

Ответ 4

Это то, что я установил в папке bin для свойства svn:ignore, чтобы соответствовать всем, кроме файлов apk:

*[!a][!p][!k]
*a[!p][!k]
*ap[!k]

Если бы была полная поддержка RegExp, вы могли бы использовать отрицательный lookbehind, но это редко выполнялось в любом случае (например, не в JavaScript) и неэффективно.

Ответ 5

Следующее работает для меня и избавляется от нескольких причуд других предложений.

*.?
*.??
*.???
*.[!j]???
*.?[!a]??
*.??[!v]?
*.???[!a]
*.?????*

Ниже приведено объяснение по строке:

  • игнорировать все, что имеет однобуквенное расширение
  • игнорировать все, что имеет двухбуквенное расширение
  • игнорировать все, что имеет трехбуквенное расширение
  • игнорировать все, что имеет четырехбуквенное расширение, где первая буква расширения не j
  • игнорировать все, что имеет четырехбуквенное расширение, где вторая буква расширения не является
  • игнорировать все, что имеет четырехбуквенное расширение, где третье письмо расширения не является v
  • игнорировать все, что имеет четырехбуквенное расширение, где четвертая буква расширения не является
  • игнорировать все, что имеет пятибуквенное расширение или более

Ограничения:

  • Это также блокирует каталоги, которые заканчиваются на .java
  • К сожалению, я не смог игнорировать файлы без расширения, так как это также блокировало каталоги.

Ответ 6

Ну, я не знаю, пропустил ли я что-то, но вы можете использовать любой шаблон, который вы хотите:

svn propset svn:ignore "*~" .

Вы можете проверить:

svn propget svn:ignore .

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

Лучшее решение, которое я нахожу для себя, - полностью отделить дерево версий исходных файлов от дерева сборки. Таким образом, вы не генерируете вещи в своем дереве версий из каталога. Затем вы можете использовать svn:ignore для игнорирования простых артефактов, созданных текстовыми редакторами, например.

EDIT:

Извините мою ошибку за первое решение, я неправильно прочитал ваш пост. Два других способа кажутся уместными, даже если не совсем то, что вы хотите...