SVN: игнорировать некоторые каталоги рекурсивно

Я не хочу, чтобы какой-либо каталог с именем build или dist попадал в мой SVN независимо от того, насколько глубоко он находится в дереве.

Возможно ли это? В git я просто положил

build
dist

в моем .gitignore в корне и он рекурсивно игнорирует. Как это сделать с помощью svn? Пожалуйста, не говорите мне, чтобы я делал propset на каждом родительском каталоге...

Ответ 1

Как и в случае с subversion 1.8, теперь существует свойство svn:global-ignores, которое работает как svn:ignore, но рекурсивно (поэтому установите это в своем каталоге верхнего уровня)

Ответ 2

svn propset принимает --recursive в качестве опции, поэтому вы можете сделать это с двумя минусами:

  • вам нужно проверить весь репозиторий (или, по крайней мере, все его каталоги) и
  • вам нужно запомнить свойство svn:ignore, когда вы добавляете новый каталог

Ответ 3

Это невозможно сделать. В Subversion существует только два механизма игнорирования, svn:ignore (который нерекурсивный) и global-ignores (который не является специфичным для репозитория).

Ответ 4

Это работает для меня:

 svn propset --recursive svn:ignore *.zip <dir_tree_with_no_zips>

Ответ 5

добавить в файл ~/.subversion/config или /etc/subversion/config:

[miscellany]
global-ignores = build dist

Ответ 6

Можно игнорировать сборку и дистрибуцию, удаляя каталоги из контроля версий. Хитрость заключается в использовании опции -keep-local, чтобы оставить каталог в рабочей копии. Например:

svn rm dist --keep-local
svn ci -m'removed build directory from version control'

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

веселит, Джо

Ответ 7

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

В Unix-подобных системах эта область отображается как каталог с именем .subversion в доме пользователя каталог. В системах Win32, Subversion создает папку с именем Subversion, как правило, внутри Область данных приложения каталог профиля

См. Параметры конфигурации

К сожалению, для этого нет возможности для каждого репозитория. Это в основном для каждого пользователя или для каждого каталога, поэтому многократный svn:ignores, вероятно, является тем способом, который так же раздражает, как это может быть.

Ответ 8

Например, структура папки:

Project/
Project/dist/

cd Project
svn propset svn:ignore '*' dist/
svn ci -m "content of dist ignored"

Хорошо, чтобы сделать svn delete dist dist перед командой ignore, поэтому для ветвей dist будет пусто.

Работала для меня, протестирована сегодня. Вот страница, объясняющая это немного

Ответ 9

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

bin
gen
proguard
.classpath
.project
local.properties
Thumbs.db
*.apk
*.ap_
*.class
*.dex

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

svn propset svn:ignore -R -F .svnignore .

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

svn rm --keep-local <path>

Получил все это из этой замечательной статьи, которая объясняет все это: http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/

Ответ 10

Создайте файл и добавьте в него свои игнорирования

Игнорировать регистр-список:

file1 
directory1
file2
etc...

затем примените следующую команду

for n in directory; do svn propset svn:ignore -F ignore-list $n; done
Каталог

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

Предполагается, что вы используете bash в качестве оболочки

Ответ 11

svn propset --recursive svn:ignore svn_ignore_rules .

где svn_ignore_rules - это файл, содержащий правила игнорирования - по одному на строку

Конечно, вы должны повторно запускать его каждый раз, когда вы добавляете новый каталог в свое репо

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

Ответ 12

В subversion 1.8 over, можно установить глобальные игнорирования для текущего репозитория.

svn propset svn:global-ignores build .
svn propset svn:global-ignores dist .

Также вы можете создать папку с именем .svnignore и условия записи.

build
dist

помните одно условие в строке, установка build/* или dist/debug напрасно. Затем выполните команду:

svn propset svn:global-ignores -F .svnignore .

Ответ 13

Один из способов заключается в том, чтобы добавить какую-либо проверку либо к предварительному, либо к post-commit-крюку, но он заметит прямо, если вы не являетесь владельцем сервера репо.

Ответ 14

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

Чтобы облегчить жизнь, я создал реестр с именем Settings.Svn.reg и добавил его в корень репозитория. Теперь каждый может дважды щелкнуть этот regfile один раз и выполнить настройки.

REGEDIT4

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany]
"global-ignores"="obj *.suo *.bak *.pdb *.user *.Cache*"

Я был бы очень признателен за решение в репозитории SVN, поэтому, если кто-то знает, не могли бы вы поделиться им?

Ответ 15

cd parent_dir #the directory containing folder to be ignored recursively
svn propedit svn:ignore . #will open up svn-prop.tmp
enlist folder(s)
^X
Y
commit -m 'ignore targeted direcoty'