Использование svn: ignore для игнорирования всего, кроме определенных файлов - PullRequest
30 голосов
/ 16 июля 2009

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

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

Ваши мысли?

Ответы [ 6 ]

17 голосов
/ 20 октября 2010

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

*[!j][!a][!v][!a]
*.java?*
12 голосов
/ 16 июля 2009

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

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

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

7 голосов
/ 16 июля 2009

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

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

# Create a repository with property ignore *

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

# Create 3 files

[wlynch@orange co] touch a
[wlynch@orange co] touch b
[wlynch@orange co] touch c

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

[wlynch@orange co] svn status
M     .
[wlynch@orange co] svn add a
A         a
[wlynch@orange co] svn add b
A         b
[wlynch@orange co] svn status
M     .
A      a
A      b
[wlynch@orange co] svn add c
A         c
[wlynch@orange co] svn ci
Sending        .
Adding         a
Adding         b
Adding         c
Transmitting file data ...
Committed revision 1.
5 голосов
/ 16 декабря 2012

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

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

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

4 голосов
/ 31 января 2014

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

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

Последующее построчное объяснение:

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

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

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

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

svn propset svn:ignore "*~" .

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

svn propget svn:ignore .

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

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

EDIT:

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

...