SVN: Ігноруйте деякі каталоги рекурсивно


106

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

Чи можливо це? В git я щойно ставила

build
dist

в моєму .gitignoreкорені, і він рекурсивно ігнорує. Як це зробити за допомогою svn? Будь ласка, не кажіть мені робити примірник для кожного з батьків ...


Перевірте цю відповідь на вихідне рішення, якщо ви використовуєте Subversion 1.8.
Френк Кустерс

Відповіді:


57

Що стосується підриву 1.8, тепер існує svn:global-ignoresвластивість, яка працює як svn:ignoreрекурсивно (тому встановіть це у каталозі верхнього рівня)


3
Я заплутався - є global-ignoresу ~/.subversion/configфайлі, але також спадкове svn:global-ignores властивість, встановлене в каталозі у репортажі SVN, а також svn:ignore- чи можете ви надати короткий опис цих різних варіантів і як вони порівнюються? Як --recursiveпрапор впливає і на них?
Дай

2
Я зробив власні дослідження та опублікував свої висновки у цій відповіді щодо якості: stackoverflow.com/a/86052/159145
Дай

[Я намагався, але не вдалося, objпапка все-таки з’явилася] ( stackoverflow.com/questions/50960188/… ), чи можете ви допомогти мені подивитися?
Люк

Чи можу я сказати "build / *", щоб ігнорувати все, що внизу складається, у межах кожної папки збирання?
Йоханнес Шауб - ліб

45

svn propsetприймає --recursiveяк варіант, тож ви можете зробити це з двох недоліків:

  1. ви повинні перевірити весь сховище (або принаймні всі каталоги в ньому), і
  2. Ви повинні пам'ятати, щоб встановити svn:ignoreвластивість кожного разу, коли ви додавали новий каталог

42

Зробити це неможливо. У Subversion є лише два механізми ігнорування svn:ignore(який є нерекурсивним) та global-ignores(який не характерний для сховища).


7
svn propset --рекурсивний svn: ігноруйте svn_ignore_rules. де svn_ignore_rules - файл, що містить правила ігнорування - по одному на рядок
georg

3
'svn propset --рекурсивний svn: ігнорувати --файл svn_ignore_rules.' для мене зі svn-1.7.6, інакше ти рекурсивно ігноруєш файли під назвою 'svn_ignore_rules' [редагувати: відповідно до 'wytten' у коментарі нижче]
elbeardmorez

9
Коменторам: Як сказав запитуючий, "Будь ласка, не кажіть мені робити примірник для кожного з батьків ...".
Кевін Рейд

5
Тепер це можливо в Subversion 1.8
Білка

17

Це працює для мене:

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

2
Дякую за це, чудово працює ... До речі, єдиний спосіб, який я виявив ігнорувати і * .txt, і * .pdf, - це помістити ці шаблони у файл, а потім використати опцію 'svn propset --file'
wytten

13

додати до ~ / .subversion / config або / etc / subversion / config file:

[miscellany]
global-ignores = build dist

Я вважаю за краще робити це, якщо зможу
Пол Тарджан

1
Хм, не впевнений, чи існує простий спосіб зробити це заново, гачок, який попередньо здійснює, може відхилити певні шаблони, але це не повне рішення. svn: ігнорування роботи кожного з батьків працює, але не рекурсивно. ви можете замінити свій конфігураційний файл сценарієм під час роботи над різними репостами, але це додатковий крок.
jspcal

1
Що означає побудова dist ?
ІгорГанапольський

9

Можна ігнорувати збирання та видалення файлів, видаляючи каталоги з управління версіями. Трюк полягає у використанні --keep-local опції, щоб залишити каталог у робочій копії. Наприклад:

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

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

ура, Джо


7

Наприклад, структура папки:

Project/
Project/dist/

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

Добре зробити svn видалення вмісту dist перед командою ігнорування, тому для гілок dist буде порожнім.

Працював для мене, перевірений сьогодні. Ось сторінка, де це трохи пояснюється


6

Щоб ігнорувати всі подібні файли у всіх сховищах, ви можете додати global-ignoresсвій файл до конфігураційного файла для кожного користувача.

У системах, схожих на Unix, ця область відображається як каталог із назвою .subversion у домашньому каталозі користувача. У системах Win32 Subversion створює папку під назвою Subversion, як правило, всередині області Application Data в каталозі профілів користувача

Див. Параметри конфігурації

На жаль, для цього немає репозиторію. Це в основному на кожного користувача або на директорію, тому множина svn:ignores, мабуть, є таким самим дратівливим способом.


1
Я вважаю за краще робити це заново, якщо зможу
Пол Тарджан

О, тоді вам не пощастило. Як говорить @Kevin Reid - у вас є довідник або користувач.
Блер Конрад

6

Спочатку потрібно перейти до верхньої папки робочої копії та створити там файл (скажімо, .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/


Це було дуже корисно. Це найкращий спосіб, коли я знайшов поведінку ігнорування поведінки у svn. Дуже дякую.
Джонатан Вілсон

6

У підривній версії 1.8 вище можна встановити глобальні ігнори для поточного сховища.

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 .

працює бездоганно! просто запустіть першу команду на щойно перевіреному РЕПО.
gaurav

3

Створіть файл і додайте до нього свої ігнори

ingore-list:

file1 
directory1
file2
etc...

потім застосуйте таку команду

for n in directory; do svn propset svn:ignore -F ignore-list $n; done

Каталог - це ім'я вашого каталогу, ви можете підгрупувати також категорію каталогу / підкаталога. Або використовуйте *, щоб помітити поточний каталог, під яким ви перебуваєте.

Це за умови, що ви використовуєте bash як свою оболонку



1
@igor Ganapolsky - $ n є змінною циклу for. Він буде встановлений як індекс для послідовності, в яку ви циклічно входите; у цьому випадку каталог, як зазначено у "каталозі" у наведеному вище прикладі.
jncc99

3
svn propset --recursive svn:ignore svn_ignore_rules .

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

Звичайно, вам доведеться запускати його щоразу, коли ви додаєте новий каталог до репо-файлу

svn_ignore_rules також можна вважати зареєстрованим у репо, щоб їх повторно використовували інші користувачі, що мають доступ до запису до репо.


2
cd parent_dir # каталог, що містить папку, яку слід ігнорувати рекурсивно
svn propedit svn: ігнорувати. #will відкриє svn-prop.tmp
зарахувати папки
^ X
Y
фіксувати -м 'ігнорувати цільові режими'

допоміг мені, у мене була проблема з малюнком папки настройки, SVN була complianing цю папку НЕ репо, set EDITOR=notepad, svn propedit svn:ignore .працював добре ...
Betlista

1

Оскільки, мабуть, немає вирішення цієї, ймовірно, поширеної проблеми, я хотів би поділитися нашим рішенням. Як уже зрозуміли інші, ви можете використовувати svn:ignoreвластивість, це стосується однієї каталоги (а отже, не для нових), або ви використовуєте, global-ignoresщо стосується одного користувача (але не належить до репозиторію).

Щоб полегшити життя, я створив файл reg з назвою Settings.Svn.regта додав його до кореня сховища. Тепер кожен може двічі клацнути по цьому regfile один раз і має налаштування.

REGEDIT4

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

Я б дуже вдячний за рішення у сховищі SVN, тож якщо хтось знає, ви б хотіли поділитися ним?


0

Одним із способів було б додати певну перевірку до гака, що передує або після завершення, але це відмітка прямо, якщо у вас немає сервера репо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.