Как игнорировать файлы в Subversion?

Как игнорировать файлы в Subversion?

Кроме того, как мне найти файлы, которые не находятся под контролем версий?

17.09.2008 18:15:55
Интересно видеть, как каждый простой вопрос (вероятно, от пользователя git) означает много слишком сложных ответов. Если это произойдет, это Subversion, детка.
Valerio Bozz 20.03.2020 14:30:20
18 ОТВЕТОВ
РЕШЕНИЕ

(Этот ответ был обновлен в соответствии с поведением SVN 1.8 и 1.9)

У вас есть 2 вопроса:

Пометка файлов как проигнорированных:

Под «игнорируемым файлом» я подразумеваю, что файл не будет отображаться в списках даже как «неверсированный»: ваш SVN-клиент сделает вид, что файл вообще не существует в файловой системе.

Проигнорированные файлы определяются "шаблоном файла". Синтаксис и формат шаблонов файлов объясняется в онлайн-документации SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html «Шаблоны файлов в Subversion».

Subversion, начиная с версии 1.8 (июнь 2013 г.) и более поздних, поддерживает 3 различных способа задания шаблонов файлов. Вот резюме с примерами:

1 - Область конфигурации времени выполнения - global-ignoresопция:

  • Это настройка только на стороне клиента , поэтому ваш global-ignoresсписок не будет доступен другим пользователям и применяется ко всем репозиториям, которые вы оформляете на своем компьютере.
  • Этот параметр определен в вашем файле области конфигурации времени выполнения:
    • Windows (на основе файлов) - C:\Users\{you}\AppData\Roaming\Subversion\config
    • Windows (на основе реестра) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignoresв обоих HKLMи HKCU.
    • Linux / Unix - ~/.subversion/config

2 - svn:ignoreСвойство, которое устанавливается для каталогов (не файлов):

  • Это хранится в репо, так что другие пользователи будут иметь те же файлы игнорирования. Похоже на то, как .gitignoreработает.
  • svn:ignoreприменяется к каталогам и не является рекурсивным или наследуется. Любой файл или непосредственный подкаталог родительского каталога, соответствующий шаблону файла, будет исключен.
  • В то время как SVN 1.8 добавляет концепцию «унаследованных свойств», само svn:ignoreсвойство игнорируется в каталогах, не являющихся непосредственными потомками:

    cd ~/myRepoRoot                             # Open an existing repo.
    echo "foo" > "ignoreThis.txt"                # Create a file called "ignoreThis.txt".
    
    svn status                                  # Check to see if the file is ignored or not.
    > ?    ./ignoreThis.txt
    > 1 unversioned file                        # ...it is NOT currently ignored.
    
    svn propset svn:ignore "ignoreThis.txt" .   # Apply the svn:ignore property to the "myRepoRoot" directory.
    svn status
    > 0 unversioned files                       # ...but now the file is ignored!
    
    cd subdirectory                             # now open a subdirectory.
    echo "foo" > "ignoreThis.txt"                # create another file named "ignoreThis.txt".
    
    svn status
    > ?    ./subdirectory/ignoreThis.txt        # ...and is is NOT ignored!
    > 1 unversioned file
    

    (Таким образом, файл ./subdirectory/ignoreThisне игнорируется, несмотря на то, что " ignoreThis.txt" применяется к .корню репо).

  • Поэтому для рекурсивного применения списка игнорирования вы должны использовать svn propset svn:ignore <filePattern> . --recursive.

    • Это создаст копию свойства в каждом подкаталоге.
    • Если <filePattern>значение в дочернем каталоге отличается, то дочернее значение полностью переопределяет родителей, поэтому «аддитивный» эффект отсутствует.
    • Поэтому, если вы измените значение <filePattern>в корневом каталоге ., вы должны изменить его на, --recursiveчтобы перезаписать его в дочерних и дочерних каталогах.
  • Я отмечаю, что синтаксис командной строки противоречит интуиции.

    • Я начал, предполагая, что вы проигнорируете файл в SVN, введя что-то вроде svn ignore pathToFileToIgnore.txtэтого, однако это не то, как работает функция игнорирования SVN.

3- svn:global-ignoresСобственность. Требуется SVN 1.8 (июнь 2013 г.):

  • Это похоже на то svn:ignore, что в SVN 1.8 используется функция «унаследованных свойств».
  • Сравните с svn:ignore, шаблон файла автоматически применяется в каждом каталоге-потомке (а не только в непосредственных дочерних элементах).
    • Это означает, что нет необходимости устанавливать svn:global-ignoresс --recursiveфлагом, поскольку унаследованные шаблоны игнорируемых файлов автоматически применяются по мере их наследования.
  • Выполнение того же набора команд, что и в предыдущем примере, но svn:global-ignoresвместо этого используется :

    cd ~/myRepoRoot                                    # Open an existing repo
    echo "foo" > "ignoreThis.txt"                       # Create a file called "ignoreThis.txt"
    svn status                                         # Check to see if the file is ignored or not
    > ?    ./ignoreThis.txt
    > 1 unversioned file                               # ...it is NOT currently ignored
    
    svn propset svn:global-ignores "ignoreThis.txt" .
    svn status
    > 0 unversioned files                              # ...but now the file is ignored!
    
    cd subdirectory                                    # now open a subdirectory
    echo "foo" > "ignoreThis.txt"                       # create another file named "ignoreThis.txt"
    svn status
    > 0 unversioned files                              # the file is ignored here too!
    

Для пользователей TortoiseSVN:

Вся эта договоренность меня смущала, потому что терминология TortoiseSVN (используемая в их системе меню Windows Explorer) поначалу вводила меня в заблуждение - я не был уверен, что значило в меню «Игнорировать» «Добавить рекурсивно», «Добавить *» и «Добавить» опции. Я надеюсь, что этот пост объясняет, как функция Ignore связана с функцией SVN Properties. Тем не менее, я предлагаю использовать командную строку для установки игнорируемых файлов, чтобы вы почувствовали, как это работает, вместо того, чтобы использовать графический интерфейс и использовать графический интерфейс для манипулирования свойствами только после того, как вы освоитесь с командной строкой.

Список файлов, которые игнорируются:

Команда svn statusбудет скрывать пропущенные файлы (то есть файлы, которые соответствуют global-ignoresшаблону RGA , или соответствуют шаблону непосредственного родительского каталога, svn:ignoreили шаблону любого предшествующего каталога) svn:global-ignores.

Используйте --no-ignoreопцию, чтобы увидеть эти файлы в списке. Проигнорированные файлы имеют статус I, затем передайте вывод, чтобы grepпоказать только строки, начинающиеся с «I».

Команда:

svn status --no-ignore | grep "^I"

Например:

svn status
> ? foo                             # An unversioned file
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore
> ? foo                             # An unversioned file
> I ignoreThis.txt                  # A file matching an svn:ignore pattern
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore | grep "^I"
> I ignoreThis.txt                  # A file matching an svn:ignore pattern

та-да!

738
13.04.2017 13:40:47
Чтобы найти пропущенные файлы: svn status -u -v --no-ignore | grep "^ I" | awk "{print \ $ 2}"
Christian Madsen 15.09.2010 10:32:42
если вы хотите игнорировать файл ./FolderA/FolderB/FileToIgnore, сделайте это из своего. папка: svn propset svn: игнорировать «FileToIgnore» FolderA / FolderB /
jnj 18.11.2012 23:51:55
если вы пользуетесь ssh svn propedit svn:ignore .и текстовый редактор не настроен, вы получите сообщение об ошибке svn: E205007: ни одна из переменных среды SVN_EDITOR, VISUAL или EDITOR не задана, а параметр конфигурации editor-cmd во время выполнения не был найдено вместо открытия редактора. Так что просто укажите --editor-cmd nano, как этоsvn propedit svn:ignore . --editor-cmd nano
Jonathan Morales Vélez 31.07.2013 23:01:32
Вы также можете игнорировать файлы с определенным именем файла во всех подпапках, используя аргумент «--recursive». то есть svn propset svn: игнорировать "* .jpg". --recursive
Templar 2.04.2014 19:20:50
Более простой альтернативой awk является grep:svn status | grep '^?'
Johnride 30.06.2014 21:48:29

svn status скажет вам, какие файлы отсутствуют в SVN, а также что изменилось.

Посмотрите на свойства SVN для свойства ignore.

Для всего SVN, Красная книга обязательна к прочтению.

3
15.04.2015 16:20:37

Вы также можете установить глобальный шаблон игнорирования в конфигурационном файле SVN.

3
17.09.2008 18:18:16
Можете ли вы установить шаблон игнорирования для определенного хранилища?
David Doria 27.02.2012 02:23:59

Используйте команду svn status в вашей рабочей копии, чтобы показать состояние файлов, рядом с которыми у файлов, которые еще не находятся под контролем версий (и не игнорируются), будет стоять вопросительный знак.

Что касается игнорирования файлов, вам необходимо отредактировать свойство svn: ignore, прочитайте главу «Игнорирование неверсионных элементов» в svnbook по адресу http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore. HTML . Книга также описывает больше об использовании статуса SVN.

2
17.09.2008 18:19:39

Если вы используете TortoiseSVN , щелкните правой кнопкой мыши файл и выберите TortoiseSVN / Add, чтобы игнорировать список . Это добавит файл / подстановочный знак к svn:ignoreсвойству.

svn:ignoreбудет проверяться при проверке файлов, а соответствующие файлы будут игнорироваться. У меня есть следующий список игнорирования для проекта Visual Studio .NET:

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

Вы можете найти этот список в контекстном меню в TortoiseSVN / Properties .

50
28.01.2014 16:56:51

При использовании propedit убедитесь, что у вас нет завершающих пробелов, так как это приведет к исключению файла из списка игнорирования.

Они вставляются автоматически, если вы используете tab-autocomplete в linux для создания файла:

svn propset svn:ignore 'file1
file2' .
10
1.03.2011 13:54:11
Это работает только для некоторых оболочек, таких как bash. Обратите внимание, что при повторном вводе команды propset предыдущий набор шаблонов перезаписывается.
J. A. Faucett 11.09.2012 22:21:48
Таким образом, file1 и file2 должны быть в отдельных строках?
IgorGanapolsky 12.08.2016 15:26:42

Кроме того, если вы используете Tortoise SVN, вы можете сделать это:

  1. В контекстном меню выберите «TortoiseSVN», затем «Свойства»
  2. В появившемся окне нажмите «Новый», затем «Дополнительно»
  3. В появившемся окне напротив «Имя свойства» выберите или введите «svn: ignore», напротив «Значение свойства» введите желаемое имя файла или имя папки или маску файла (в моем случае это было «* / target»), нажмите «Применить». свойство рекурсивно
  4. ОК. ОК.
  5. совершить
8
14.09.2017 17:32:45

Используйте следующую команду, чтобы создать список, не относящийся к файлам контроля версий.

svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt

Затем отредактируйте файл, чтобы оставить только те файлы, которые вы хотите игнорировать . Затем используйте этот, чтобы игнорировать файлы, перечисленные в файле:

svn propset svn:ignore -F ignoring.txt .

Обратите внимание на точку в конце линии. Он сообщает SVN, что свойство устанавливается в текущем каталоге.

Удалить файл:

rm ignoring.txt

Наконец-то совершить,

svn ci --message "ignoring some files"

Затем вы можете проверить, какие файлы игнорируются с помощью:

svn proplist -v
90
30.08.2017 13:39:27
Приятно. Незначительное улучшение есть svn status | awk "/^?/ {print \$2}" > ignoring.txt.
Dirk Eddelbuettel 22.08.2014 14:48:55
зачем удалять файл? держите его в репо, если вам нужно заново создать / добавить / удалить
tgkprog 14.03.2015 16:28:09
Обратите внимание, что это решение не будет игнорировать файлы в подкаталогах (даже если они отображаются в ignoring.txt).
shaneb 24.04.2017 20:02:15
Будет ли это держать существующие игнорирует? Если нет, то как это сделать с помощью одной команды (т.е. --no-ignore и сохранить также строки, предшествующие I)?
a1an 19.06.2017 13:49:08
Это перезапишет ваши текущие игнорирования, попробуйте: svn pg svn:ignore . >> ignore.txtпосле первой команды, чтобы добавить текущие игнорирования в файл.
ulitosCoder 22.06.2017 15:24:27

Я нашел статью .svnignore Пример для Java .

Пример: .svnignore для Ruby on Rails,

/log

/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif

*.*~

И после этого:

svn propset svn:ignore -F .svnignore .

Примеры для .gitignore. Вы можете использовать для вашего .svnignore

https://github.com/github/gitignore

22
15.04.2015 16:23:42
я сделал как ты сказал ... но когда я запускаю svn status. он по-прежнему показывает проигнорированные файлы с "?"
Harshit Gupta 27.03.2014 01:11:16
Я никогда не проверял статус svn, но с svn add * и после этого svn commit игнорирование файлов не фиксируется.
d.danailov 27.03.2014 07:48:53
если файл «a.txt» уже находится в управлении версиями, то игнорирование выполняется командой типа «svn propset svn: ignore -F .svnignore a.txt»? это правильно?
errakeshpd 30.12.2014 04:13:47
Если вы добавите «.txt» в ваш файл .svnignore, я не уверен, но команда должна быть правильной.
d.danailov 30.12.2014 06:55:55

.gitignore как подход

Вы можете игнорировать файл или каталог, как .gitignore. Просто создайте текстовый файл со списком каталогов / файлов, которые вы хотите игнорировать, и запустите приведенный ниже код:

svn propset svn:ignore -F ignorelist.txt .

ИЛИ, если вы не хотите использовать текстовый файл, вы можете сделать это следующим образом:

svn propset svn:ignore "first
 second
 third" .

Источник: Блог Карстена - Установите svn: ignore для нескольких файлов из командной строки

51
27.08.2019 04:36:39
Обратите внимание, что если вы позже измените свой файл игнорирования, вам необходимо повторно запустить svn:ignoreкоманду (см. Stackoverflow.com/a/58380306/189518 )
Sensei James 18.10.2019 20:02:54
3
5.03.2016 20:13:00

Другое решение:

svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt

или построчно

svn st | awk '/^?/{print $2}' > svnignore.txt 
svn propget svn:ignore >> svnignore.txt 
svn propset svn:ignore -F svnignore.txt . 
rm svnignore.txt

Что оно делает:

  1. Получает файлы состояния из SVN
  2. Сохраняет все файлы с ? в файл "svnignore.txt"
  3. Получает уже проигнорированные файлы и добавляет их в файл "svnignore.txt"
  4. Говорит svn игнорировать файлы в "svnignore.txt"
  5. Удаляет файл
8
1.12.2016 02:00:34

Более читаемая версия ответа bkbilly:

svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt

Что оно делает:

  1. Получает файлы состояния из SVN
  2. Сохраняет все файлы с ? в файл "svnignore.txt"
  3. Получает уже проигнорированные файлы и добавляет их в файл "svnignore.txt"
  4. Говорит svn игнорировать файлы в "svnignore.txt"
  5. Удаляет файл
5
14.09.2017 17:31:58
Мне нравится ответ bkbilly, но эта версия разбивает каждую строку, чтобы сделать его более читабельным, и удаляет символ &&, который в моих тестах ничего не делал, поскольку первая строка всегда создает временный файл, и этот же временный файл всегда попадает в список игнорирования.
LivingDust 1.12.2016 01:09:06
Предложение редактирования было бы более уместным в этом случае. Цените усилия!
Jim 1.12.2016 02:03:51
У меня еще не было достаточно репутации, чтобы предложить редактирование. но я не хочу портить хороший протокол. Существует ли простой README по руководящим принципам, когда лучше предлагать и редактировать, а не публиковать новый ответ и т. Д.?
LivingDust 12.12.2016 17:18:52
Если ваш ответ точно такой же, как и тот, который был опубликован полтора года назад, он довольно прост. Вы даже скопировали объяснение " Что это делает ".
Jim 12.12.2016 19:11:20
  1. CD ~ /. Subversion
  2. открыть конфиг
  3. найдите строку вроде «global-ignores»
  4. установить игнорировать тип файла следующим образом: global-ignores = * .o * .lo * .la * .al .libs * .so .so. [0-9] * .pyc * .pyo 88 * .rej ~ # #. # *. *. swp .DS_Store выходной файл node_modules
5
11.01.2017 09:54:37
Спасибо, ваш ответ - единственный, который упоминает configфайл.
Henrique de Sousa 25.05.2017 09:32:11
В этом ответе также упоминается @HenriquedeSousa stackoverflow.com/a/86052/7724, а также объясняется, что это локальный клиентский способ игнорирования файлов.
bzlm 14.09.2017 17:31:10

Как никто, кажется, не упомянул об этом ...

svn propedit svn:ignore .

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

25
26.07.2017 21:37:07
Этот ответ был полезен. В моем случае мне нужно было изменить "." в подкаталог файла, который я хотел игнорировать и просто указать шаблон файла. Кроме того, в первый раз мне нужно было запустить это (я на Mac): export SVN_EDITOR = "nano"
Elijah Lofgren 16.11.2017 04:31:27

SVN ignoreпрост в управлении в TortoiseSVN. Откройте TortoiseSVN и щелкните правой кнопкой мыши по меню файлов, затем выберите «Добавить», чтобы игнорировать список.

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

В проект Visual Studio мы добавили следующие файлы, чтобы игнорировать:

bin obj
*.exe
*.dll
*.pdb
*.suo

Мы успешно управляем исходным кодом на SVN Comparetrap, используя этот метод

2
6.01.2018 11:11:56
  1. Откройте вы используете продукт JetBrains (например, Pycharm)
  2. Затем нажмите на кнопку «фиксации» на верхней панели или использование клавиш «Ctrl + K» screenshot_toolbar
  3. в интерфейсе фиксации переместите ненужные файлы в другой список изменений следующим образом. screenshot_commit_change
  4. в следующий раз вы сможете зафиксировать только список изменений по умолчанию.
0
6.06.2018 06:00:35

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

Как игнорировать файлы в Subversion?
1. В проводнике файлов щелкните правой кнопкой мыши имя папки проекта
SVN
2. Нажмите «SVN Commit ...» 3. Появится окно «commit»
4. Щелкните правой кнопкой мыши папку / файл, который вы хотите игнорировать
5.Нажмите «Добавить, чтобы игнорировать список».
6. Выберите папку / файл.
7.Отправьте «изменение свойства» в SVN.

Кроме того, как мне найти файлы, которые не находятся под контролем версий?
После шага 3 выше, нажмите «Показать неверсионные файлы»

2
3.10.2019 10:38:35