Как игнорировать файлы в 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 различных способа задания шаблонов файлов. Вот резюме с примерами:
global-ignores
опция:global-ignores
список не будет доступен другим пользователям и применяется ко всем репозиториям, которые вы оформляете на своем компьютере.C:\Users\{you}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
в обоих HKLM
и HKCU
.~/.subversion/config
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 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) поначалу вводила меня в заблуждение - я не был уверен, каково значение меню Ignore «Добавить рекурсивно», «Добавить *» и «Добавить» опции. Я надеюсь, что этот пост объясняет, как функция 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
та-да!
svn propedit svn:ignore .
и текстовый редактор не настроен, вы получите сообщение об ошибке svn: E205007: ни одна из переменных окружения SVN_EDITOR, VISUAL или EDITOR не задана, и параметр конфигурации editor-cmd во время выполнения не был найдено вместо открытия редактора. Так что просто укажите --editor-cmd nano, как этоsvn propedit svn:ignore . --editor-cmd nano
svn status | grep '^?'
Используйте следующую команду, чтобы создать список, не относящийся к файлам контроля версий.
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
.
svn pg svn:ignore . >> ignore.txt
после первой команды, чтобы добавить текущие игнорирования в файл.
Вы можете игнорировать файл или каталог, как .gitignore. Просто создайте текстовый файл со списком каталогов / файлов, которые вы хотите игнорировать, и запустите приведенный ниже код:
svn propset svn:ignore -F ignorelist.txt .
ИЛИ, если вы не хотите использовать текстовый файл, вы можете сделать это так:
svn propset svn:ignore "first
second
third" .
Источник: Блог Карстена - Установите svn: ignore для нескольких файлов из командной строки
svn:ignore
команду (см. Stackoverflow.com/a/58380306/189518 )
Если вы используете TortoiseSVN , щелкните правой кнопкой мыши файл и выберите TortoiseSVN / Add, чтобы игнорировать список . Это добавит файл / подстановочный знак к svn:ignore
свойству.
svn:ignore
будет проверяться при проверке файлов, а соответствующие файлы будут игнорироваться. У меня есть следующий список игнорирования для проекта Visual Studio .NET:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Вы можете найти этот список в контекстном меню в TortoiseSVN / Properties .
Как никто, кажется, не упомянул об этом ...
svn propedit svn:ignore .
Затем отредактируйте содержимое файла, чтобы указать шаблоны для игнорирования, выйдите из редактора, и все готово.
Я нашел статью .svnignore Пример для Java .
Пример: .svnignore для Ruby on Rails,
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
И после этого:
svn propset svn:ignore -F .svnignore .
Примеры для .gitignore. Вы можете использовать для вашего .svnignore
При использовании propedit убедитесь, что у вас нет завершающих пробелов, так как это приведет к исключению файла из списка игнорирования.
Они вставляются автоматически, если вы используете tab-autocomplete в 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
Что оно делает:
Кроме того, если вы используете Tortoise SVN, вы можете сделать это:
config
файл.
Более читаемая версия ответа bkbilly:
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
Что оно делает:
Вы также можете установить глобальный шаблон игнорирования в конфигурационном файле SVN.
svn status
скажет вам, какие файлы отсутствуют в SVN, а также что изменилось.
Посмотрите на свойства SVN для свойства ignore.
Для всего SVN, Красная книга обязательна к прочтению.
Добавление каталога в Subversion и игнорирование содержимого каталога
svn propset svn:ignore '\*.*' .
или
svn propset svn:ignore '*' .
Используйте команду svn status в вашей рабочей копии, чтобы показать состояние файлов, рядом с которыми у файлов, которые еще не находятся под контролем версий (и не проигнорированы), будет знак вопроса.
Что касается игнорирования файлов, вам необходимо отредактировать свойство svn: ignore, прочитайте главу «Игнорирование неверсионных элементов» в svnbook по адресу http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore. HTML . Книга также описывает больше об использовании статуса SVN.
SVN ignore
прост в управлении в TortoiseSVN. Откройте TortoiseSVN и щелкните правой кнопкой мыши по меню файлов, затем выберите «Добавить», чтобы игнорировать список.
Это добавит файлы в svn:ignore
собственность. Когда мы проверяем файлы, то те файлы, которые соответствуютsvn:ignore
этим, будут игнорироваться и не будут фиксироваться.
В проект Visual Studio мы добавили следующие файлы, чтобы игнорировать:
bin obj
*.exe
*.dll
*.pdb
*.suo
Мы успешно управляем исходным кодом на SVN Comparetrap, используя этот метод
Что сработало для меня:
Как игнорировать файлы в Subversion?
1. В проводнике щелкните правой кнопкой мыши имя папки проекта
SVN
2. Нажмите «SVN Commit ...» 3. Появится окно «commit»
4. Щелкните правой кнопкой мыши папку / файл, который вы хотите игнорировать
5.Нажмите «Добавить, чтобы игнорировать список».
6. Выберите папку / файл.
7.Отправьте «изменение свойства» в SVN.
Кроме того, как мне найти файлы, которые не находятся под контролем версий?
После шага 3 выше нажмите «Показать неверсионные файлы»