




(Этот ответ был обновлен, чтобы соответствовать поведению 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 различных способа указания шаблонов файлов. Вот краткое изложение с примерами:
global-ignores:global-ignores не будет передан другим пользователям, и он применяется ко всем репозиториям, которые вы оформляете на свой компьютер.C:\Users\{you}\AppData\Roaming\Subversion\configSoftware\Tigris.org\Subversion\Config\Miscellany\global-ignores как в HKLM, так и в HKCU.~/.subversion/configsvn: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 ignore pathToFileToIgnore.txt, однако функция игнорирования SVN работает не так.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 (используемая в их системе меню Windows Explorer) изначально вводила меня в заблуждение - я не был уверен, какое значение имеют пункты «Добавить рекурсивно», «Добавить *» и «Добавить» в меню Игнорировать. опции. Я надеюсь, что этот пост объясняет, как функция игнорирования связана с функцией свойств SVN. Тем не менее, я предлагаю использовать командную строку для установки игнорируемых файлов, чтобы вы могли почувствовать, как это работает, вместо использования графического интерфейса пользователя и использовать графический интерфейс для управления свойствами только после того, как вы освоитесь с командной строкой.
Команда svn status скроет игнорируемые файлы (то есть файлы, которые соответствуют шаблону RGA global-ignores, соответствуют шаблону 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
та-да!
Чтобы найти игнорируемые файлы: svn status -u -v --no-ignore | grep "^ I" | awk "{print \ $ 2}"
если вы хотите игнорировать файл ./FolderS/FolderB/FileToIgnore, сделайте это из вашего. папка: svn propset svn: ignore "File To Ignore" FolderS / FolderB /
Спасибо. Обратите внимание: если вы используете одинарные кавычки в своих awk-программах, вам не нужно избегать (обычно используемого) знака доллара. Просто гнида. :-D
если вы используете ssh'ing svn propedit svn:ignore . и текстовый редактор не настроен, вы получите сообщение об ошибке svn: E205007: ни одна из переменных среды SVN_EDITOR, VISUAL или EDITOR не установлена, и не было найдено ни одной опции конфигурации времени выполнения 'editor-cmd' вместо открытия редактора. Так что просто укажите --editor-cmd nano как этот svn propedit svn:ignore . --editor-cmd nano
Эта команда должна выполняться внутри папки, содержащей файлы, которые нужно игнорировать? Я имею в виду ... о ... . - это папка для установки?
@ Накилон да. Вы можете указать папку и. это текущая папка
Вы также можете игнорировать файлы с определенным именем во всех подпапках, используя аргумент «--recursive». то есть svn propset svn: игнорировать "* .jpg". - рекурсивный
Более простой альтернативой awk является grep: svn status | grep '^?'
Обратите внимание, что в Windows первая команда может завершиться ошибкой в зависимости от того, какие файлы находятся в текущем каталоге с (filename) is not under version control. В этом случае вы должны использовать вторую команду вместо редактирования вашего списка игнорирования. Вам может потребоваться сначала установить свой редактор, например, set SVN_EDITOR=notepad
EDITOR=vi svn propedit svn:ignore . решает любые сомнения
@Johnride, ты имеешь в виду -v, не так ли?
Возможно, стоит упомянуть, что svn propset переопределяет любой предыдущий svn propset.
Я добавил bindebugobj в svn:global-ignores, но после этого, когда я svn propget svn:global-ignores, он возвращает только obj (последний), как я могу игнорировать несколько файлов / папок?
Безусловно, лучший ответ.
отличный ответ :)
svn status сообщит вам, каких файлов нет в SVN, а также что изменилось.
Посмотрите на Свойства SVN для свойства игнорировать.
Для всего SVN требуется чтение Красная книга.
Вы также можете установить глобальный шаблон игнорирования в файле конфигурации SVN.
Можете ли вы установить шаблон игнорирования для определенного репозитория?
Используйте команду svn status в своей рабочей копии, чтобы показать статус файлов, файлы, которые еще не находятся под контролем версий (и не игнорируются), будут иметь знак вопроса рядом с ними.
Что касается игнорирования файлов, вам необходимо отредактировать свойство svn: ignore, прочтите главу Игнорирование неверсированных элементов в svnbook по адресу http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html. В книге также рассказывается больше об использовании svn status.
Если вы используете TortoiseSVN, щелкните файл правой кнопкой мыши и выберите TortoiseSVN / Добавить в список игнорирования. Это добавит файл / подстановочный знак к свойству svn:ignore.
svn:ignore будет проверяться, когда вы проверяете файлы, а соответствующие файлы игнорируются. У меня есть следующий список игнорирования для проекта Visual Studio .NET:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Вы можете найти этот список в контекстном меню по адресу TortoiseSVN / Свойства.
При использовании propedit убедитесь, что у него нет конечных пробелов, так как это приведет к исключению файла из списка игнорирования.
Они вставляются автоматически, если вы используете tab-autocomplete в Linux для создания файла, чтобы начать с:
svn propset svn:ignore 'file1
file2' .
Это работает только для некоторых оболочек, таких как bash. Обратите внимание, что повторное выполнение команды propset перезаписывает предыдущий набор шаблонов.
Значит, file1 и файл2 должны быть на разных строках?
Кроме того, если вы используете Tortoise SVN, вы можете сделать это:
Используйте следующую команду, чтобы создать список, не находящийся в файлах контроля версий.
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
Отлично. Незначительное улучшение - svn status | awk "/^?/ {print $2}" > ignoring.txt.
зачем удалять файл? сохраните его в репо, если вам нужно воссоздать / добавить / удалить
Обратите внимание, что это решение не будет игнорировать файлы в подкаталогах (даже если они отображаются в ignoring.txt).
Сохранит ли это существующие игнорирования? Если нет, как это сделать одной командой (т.е. --no-ignores и сохранить также строки, которым предшествует I)?
Это перезапишет ваши текущие игнорирования, попробуйте: svn pg svn:ignore . >> ignore.txt после первой команды, чтобы добавить текущие игнорирования в файл.
@tgkprog - это всего лишь одноразовое использование для загрузки файлов в свойства. Таким образом, не гарантируется, что файл будет содержать то же, что и в свойствах. Поэтому имеет смысл удалить его и заставить людей запускать svn proplist -v, чтобы проверить, какие файлы на самом деле игнорируются.
Нашел статью .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
Я сделал, как ты сказал ... но когда я запустил svn status. он по-прежнему показывает проигнорированные файлы с "?"
Я никогда не проверял svn status, но с svn add * и после этого svn commit игнорирование файлов не фиксируется.
если файл «a.txt» уже находится в системе контроля версий, то игнорирование выполняется командой типа «svn propset svn: ignore -F .svnignore a.txt»? это правильно?
Если вы добавите «a.txt» в свой файл .svnignore, я не уверен, но команда должна быть правильной.
Вы можете игнорировать файл или каталог, например .gitignore. Просто создайте текстовый файл со списком каталогов / файлов, которые вы хотите игнорировать, и запустите приведенный ниже код:
svn propset svn:ignore -F ignorelist.txt .
ИЛИ, если вы не хотите использовать текстовый файл, вы можете сделать это следующим образом:
svn propset svn:ignore "first
second
third" .
Источник: Блог Карстена - Установите svn: ignore для нескольких файлов из командной строки
Обратите внимание, что если вы позже измените файл игнорирования, вам нужно будет повторно запустить команду svn:ignore (см. stackoverflow.com/a/58380306/189518)
Добавление каталога в Subversion и игнорирование содержимого каталога
svn propset svn:ignore '\*.*' .
или же
svn propset svn:ignore '*' .
Другое решение:
svn st | awk '/^?/{print }' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt
или построчно
svn st | awk '/^?/{print }' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
Что оно делает:
Более читабельная версия Ответ bkbilly:
svn st | awk '/^?/{print }' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
Что оно делает:
Мне нравится ответ bkbilly, но эта версия разбивает каждую строку, чтобы сделать ее более читаемой, и удаляет &&, который в моих тестах ничего не сделал, поскольку первая строка всегда создает временный файл, и этот же временный файл всегда попадает в список игнорирования.
В этом случае предложение редактирования было бы более подходящим. Цените старания!
У меня еще не было достаточно репутации, чтобы предлагать правку. но я не хочу портить хороший протокол. Есть ли в README простые инструкции о том, когда лучше предлагать и редактировать, а не публиковать новый ответ и т. д.?
Если ваш ответ точно такой же, как тот, что был опубликован полтора года назад, это довольно просто. Вы даже скопировали объяснение "Что оно делает".
Спасибо, ваш ответ единственный, в котором упоминается файл config.
В этом ответе также упоминается @HenriquedeSousa stackoverflow.com/a/86052/7724, а также объясняется, что это локальный клиентский способ игнорирования файлов.
Поскольку, кажется, никто об этом не упомянул ...
svn propedit svn:ignore .
Затем отредактируйте содержимое файла, чтобы указать шаблоны, которые следует игнорировать, выйдите из редактора, и все готово.
Этот ответ был полезен. В моем случае мне нужно было изменить "." в подкаталог файла, который я хотел игнорировать, и просто указать шаблон файла. Кроме того, в первый раз мне нужно было запустить это (я на Mac): export SVN_EDITOR = "nano"
SVN ignore легко управлять в TortoiseSVN. Откройте TortoiseSVN и щелкните правой кнопкой мыши меню файла, затем выберите Добавить в список игнорирования.
Это добавит файлы в свойство svn:ignore.
Когда мы проверяем файлы, то те файлы, которые соответствуют svn:ignore, будут проигнорированы и не будут зафиксированы.
В проект Visual Studio мы добавили следующие файлы, которые нужно игнорировать:
bin obj
*.exe
*.dll
*.pdb
*.suo
Мы успешно управляем исходным кодом на SVN Ловушка сравнения, используя этот метод.
Что для меня работал (Я использую TortoiseSVN v1.13.1):
1. В проводнике щелкните правой кнопкой мыши SVN имя папки проекта
.
2. Нажмите "SVN Commit ..."
3. Появится окно "фиксация"
4.Щелкните правой кнопкой мыши в папке / файле, который вы хотите игнорировать.
5. Нажмите "Добавить в список игнорирования"
.
6. выберите имя папки / файла, которое вы хотите игнорировать.

7.Совершить "изменение свойства" на SVN
После шага 3 выше нажмите «Показать неверсированные файлы» следующим образом: 
Забавно видеть, как каждый простой вопрос (вероятно, от пользователя git) означает множество чрезмерно сложных ответов. Если это произойдет, это ребенок Subversion.