Ответ 1
Как и в случае с subversion 1.8, теперь существует свойство svn:global-ignores
, которое работает как svn:ignore
, но рекурсивно (поэтому установите это в своем каталоге верхнего уровня)
Я не хочу, чтобы какой-либо каталог с именем build
или dist
попадал в мой SVN независимо от того, насколько глубоко он находится в дереве.
Возможно ли это? В git я просто положил
build
dist
в моем .gitignore
в корне и он рекурсивно игнорирует. Как это сделать с помощью svn? Пожалуйста, не говорите мне, чтобы я делал propset на каждом родительском каталоге...
Как и в случае с subversion 1.8, теперь существует свойство svn:global-ignores
, которое работает как svn:ignore
, но рекурсивно (поэтому установите это в своем каталоге верхнего уровня)
svn propset
принимает --recursive
в качестве опции, поэтому вы можете сделать это с двумя минусами:
svn:ignore
, когда вы добавляете новый каталогЭто невозможно сделать. В Subversion существует только два механизма игнорирования, svn:ignore
(который нерекурсивный) и global-ignores
(который не является специфичным для репозитория).
Это работает для меня:
svn propset --recursive svn:ignore *.zip <dir_tree_with_no_zips>
добавить в файл ~/.subversion/config или /etc/subversion/config:
[miscellany]
global-ignores = build dist
Можно игнорировать сборку и дистрибуцию, удаляя каталоги из контроля версий. Хитрость заключается в использовании опции -keep-local, чтобы оставить каталог в рабочей копии. Например:
svn rm dist --keep-local
svn ci -m'removed build directory from version control'
Каталог больше не будет отслеживаться подрывной деятельностью, но он все равно будет находиться в вашей рабочей копии для хранения вывода компилятора и т.д.
веселит, Джо
Чтобы игнорировать все такие файлы во всех репозиториях, вы можете добавить global-ignores
в свой конфигурационный файл для каждого пользователя.
В Unix-подобных системах эта область отображается как каталог с именем .subversion в доме пользователя каталог. В системах Win32, Subversion создает папку с именем Subversion, как правило, внутри Область данных приложения каталог профиля
К сожалению, для этого нет возможности для каждого репозитория. Это в основном для каждого пользователя или для каждого каталога, поэтому многократный svn:ignores
, вероятно, является тем способом, который так же раздражает, как это может быть.
Например, структура папки:
Project/
Project/dist/
cd Project
svn propset svn:ignore '*' dist/
svn ci -m "content of dist ignored"
Хорошо, чтобы сделать svn delete dist dist перед командой ignore, поэтому для ветвей dist будет пусто.
Работала для меня, протестирована сегодня. Вот страница, объясняющая это немного
Сначала вам нужно перейти в верхнюю папку рабочей копии и создать там файл (скажем .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/
Создайте файл и добавьте в него свои игнорирования
Игнорировать регистр-список:
file1
directory1
file2
etc...
затем примените следующую команду
for n in directory; do svn propset svn:ignore -F ignore-list $n; done
Каталог - это имя вашего каталога, вы можете также подразделять категорию и каталог/подкаталог. Или используйте *, чтобы отметить текущий каталог, в котором вы находитесь.
Предполагается, что вы используете bash в качестве оболочки
svn propset --recursive svn:ignore svn_ignore_rules .
где svn_ignore_rules - это файл, содержащий правила игнорирования - по одному на строку
Конечно, вы должны повторно запускать его каждый раз, когда вы добавляете новый каталог в свое репо
svn_ignore_rules также можно считать проверенным в репо, чтобы его можно было повторно использовать другими пользователями, имеющими доступ на запись к репо
В 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 .
Один из способов заключается в том, чтобы добавить какую-либо проверку либо к предварительному, либо к post-commit-крюку, но он заметит прямо, если вы не являетесь владельцем сервера репо.
Так как, похоже, нет решения для этой, вероятно, общей проблемы, я хотел бы поделиться нашим решением. Как уже выяснили другие, вы можете использовать свойство 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, поэтому, если кто-то знает, не могли бы вы поделиться им?
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'