Как мне игнорировать файлы в Subversion?
Вопрос
Как мне игнорировать файлы в Subversion?
Кроме того, как мне найти файлы, которые не находятся под контролем версий?
Решение
(Этот ответ был обновлен, чтобы соответствовать поведению 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
- Windows (на основе файлов) -
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 работает не так.
- Я начал с предположения, что вы проигнорируете файл в 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) изначально вводила меня в заблуждение - я не был уверен, каково значение опций "Добавить рекурсивно", "Добавить *" и "Добавить " в меню игнорирования.Я надеюсь, что этот пост объясняет, как функция Игнорирования связана с функцией SVN Properties.Тем не менее, я предлагаю использовать командную строку для установки игнорируемых файлов, чтобы вы поняли, как это работает, вместо использования GUI, и использовать GUI для манипулирования свойствами только после того, как вы освоитесь с командной строкой.
Список игнорируемых файлов:
Команда 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
ta-da!
Другие советы
Используйте следующую команду для создания списка, не относящегося к файлам контроля версий.
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
Если вы используете TortoiseSVN, щелкните правой кнопкой мыши на файле и затем выберите TortoiseSVN / Добавить в список игнорируемых.Это добавит файл / подстановочный знак в svn:ignore
собственность.
svn:ignore
будет проверяться при возврате файлов, и соответствующие файлы будут проигнорированы.У меня есть следующий список игнорирования для Visual Studio.NET project:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Вы можете найти этот список в контекстном меню по адресу TortoiseSVN / Свойства.
Вы можете игнорировать файл или каталог, например .гитиньоре.Просто создайте текстовый файл со списком каталогов / файлов, которые вы хотите игнорировать, и запустите приведенный ниже код:
svn propset svn:ignore -F ignorelist.txt .
ИЛИ, если вы не хотите использовать текстовый файл, вы можете сделать это следующим образом:
svn propset svn:ignore "first
second
third" .
Источник:Блог Карстена - Установите svn: игнорировать для нескольких файлов из командной строки
Я нашел эту статью .пример svnignore для Java.
Пример:.svnignore для Ruby on Rails,
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
И после этого:
svn propset svn:ignore -F .svnignore .
Примеры для .gitignore.Вы можете использовать для своего файла .svnignore
Поскольку, похоже, никто об этом не упоминал...
svn propedit svn:ignore .
Затем отредактируйте содержимое файла, чтобы указать шаблоны, которые следует игнорировать, выйдите из редактора, и все готово.
При использовании propedit убедитесь, что в конце нет пробелов, так как это приведет к исключению файла из списка игнорирования.
Они вставляются автоматически, если вы используете tab-автозаполнение в Linux для создания файла для начала:
svn propset svn:ignore 'file1
file2' .
Другим решением является:
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
Что он делает:
- Получает файлы состояния из svn
- Сохраняет все файлы с помощью ? в файл "svnignore.txt"
- Получает уже проигнорированные файлы и добавляет их в файл "svnignore.txt"
- Указывает svn игнорировать файлы в "svnignore.txt"
- Удаляет файл
Кроме того, если вы используете Tortoise SVN, вы можете сделать это:
- В контекстном меню выберите "TortoiseSVN", затем "Свойства".
- В появившемся окне нажмите "Создать", затем "Дополнительно".
- В появившемся окне напротив "Имя свойства" выберите или введите "svn: игнорировать", напротив "Значение свойства" введите желаемое имя файла или папки или маску файла (в моем случае это было "*/target"), нажмите "Применить свойство рекурсивно".
- ОК.ОК.
- Зафиксировать
Более читаемая версия ответ бкбилли:
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
Что он делает:
- Получает файлы состояния из svn
- Сохраняет все файлы с помощью ? в файл "svnignore.txt"
- Получает уже проигнорированные файлы и добавляет их в файл "svnignore.txt"
- Указывает svn игнорировать файлы в "svnignore.txt"
- Удаляет файл
- cd ~/.подрывная деятельность
- открыть конфигурацию
- найдите строку типа "global-игнорирует".
- установите игнорировать тип файла следующим образом:глобальный-игнорирует = *.o *.lo *.la *.al .libs *.so .итак. [0-9] *.pyc *.pyo 88 *.rej ~ ## .#* .*.вывод node_modules из swp .DS_Store
Вы также можете установить глобальный шаблон игнорирования в файле конфигурации SVN.
svn status
сообщит вам, каких файлов нет в SVN, а также что изменилось.
Посмотрите на Свойства SVN для свойства ignore.
Для всех вещей SVN, Красная книга требуется чтение.
Добавление каталога в subversion и игнорирование содержимого каталога
svn propset svn:ignore '\*.*' .
или
svn propset svn:ignore '*' .
SVN ignore
легко управляется в TortoiseSVN.Откройте TortoiseSVN и щелкните правой кнопкой мыши в меню файл, затем выберите Добавить в список игнорируемых.
Это добавит файлы в svn:ignore
собственность.Когда мы проверяем файлы, то те файлы, которые сопоставляются с svn:ignore
это будет проигнорировано и не будет зафиксировано.
В проекте Visual Studio мы добавили следующие файлы для игнорирования:
bin obj
*.exe
*.dll
*.pdb
*.suo
Мы управляем исходным кодом на SVN of Сравнительная Ловушка успешное использование этого метода
Используйте команду статус svn на вашей рабочей копии, чтобы показать статус файлов, файлы, которые еще не находятся под контролем версий (и не игнорируются), будут иметь знак вопроса рядом с ними.
Что касается игнорирования файлов, вам нужно отредактировать свойство svn:ignore, прочитайте главу Игнорирование неверсионных элементов в svnbook по адресу http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html.В книге также подробнее описывается использование svn status.
- если вы используете продукт JetBrains (т.е.Pycharm)
- затем нажмите кнопку "зафиксировать" на верхней панели инструментов или используйте сочетание клавиш "ctrl + k" панель инструментов screenshot_toolbar
- в интерфейсе фиксации переместите ненужные файлы в другой список изменений следующим образом.скриншот_commit_change
- в следующий раз вы сможете зафиксировать только список изменений по умолчанию.