Использование svn: игнорировать, чтобы игнорировать все, кроме определенных файлов
С свойством svn: ignore, есть ли способ указать, что я хочу игнорировать, на основе шаблонов, которые я не хочу игнорировать? Другими словами, я хочу игнорировать все, кроме файлов, заканчивающихся на .xyz. Как я буду делать это (если это возможно)?
Один из вариантов, который я изучил, - это то, что я хочу, чтобы он был версией, и установил свойство svn: ignore в каталоге как '*', что означает отсутствие других файлов, но то, что я уже сделал, будет версией. Это лучшее, что я могу придумать, но он чувствует себя грязным, если мне когда-либо понадобится добавить другой файл для версии, мне придется сделать несколько коммитов... один, чтобы удалить свойство svn: ignore, другое для добавления/фиксации нового файла (ов), а затем третьего для изменения svn: ignore back to '*'.
Ваши мысли?
Ответы
Ответ 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:
Извините мою ошибку за первое решение, я неправильно прочитал ваш пост. Два других способа кажутся уместными, даже если не совсем то, что вы хотите...