Как игнорировать файлы в Subversion?
Как игнорировать файлы в Subversion?
Кроме того, как мне найти файлы, которые не находятся под контролем версий?
17 ответов
(Этот ответ был обновлен в соответствии с поведением 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 - The 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 Explorer) поначалу вводила меня в заблуждение - я не был уверен, что значило в меню "Игнорировать" "Добавить рекурсивно", "Добавить *" и "Добавить" опции. Я надеюсь, что этот пост объясняет, как функция Ignore связана с функцией SVN Properties. Тем не менее, я предлагаю использовать командную строку для установки игнорируемых файлов, чтобы вы почувствовали, как это работает, вместо того, чтобы использовать графический интерфейс и использовать графический интерфейс для манипулирования свойствами только после того, как вы освоитесь с командной строкой.
Список файлов, которые игнорируются:
Команда svn status
будет скрывать игнорируемые файлы (то есть файлы, которые соответствуют RGA global-ignores
шаблон или соответствует непосредственный родительский каталог svn:ignore
шаблон или сопоставить любой каталог предков svn:global-ignores
шаблон.
Использовать --no-ignore
возможность увидеть эти файлы в списке. Проигнорированные файлы имеют статус I
затем передайте вывод grep
показывать только строки, начинающиеся с "я".
Команда:
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 | 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
Вы можете игнорировать файл или каталог, как .gitignore. Просто создайте текстовый файл со списком каталогов / файлов, которые вы хотите игнорировать, и запустите приведенный ниже код:
svn propset svn:ignore -F ignorelist.txt .
ИЛИ, если вы не хотите использовать текстовый файл, вы можете сделать это так:
svn propset svn:ignore "first
second
third" .
Источник: Блог Карстена - Установите svn:ignore для нескольких файлов из командной строки
Если вы используете 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
Что оно делает:
- Получает файлы состояния из SVN
- Сохраняет все файлы с ? в файл "svnignore.txt"
- Получает уже проигнорированные файлы и добавляет их в файл "svnignore.txt"
- Говорит svn игнорировать файлы в "svnignore.txt"
- Удаляет файл
Кроме того, если вы используете Tortoise SVN, вы можете сделать это:
- В контекстном меню выберите "TortoiseSVN", затем "Свойства"
- В появившемся окне нажмите "Новый", затем "Дополнительно"
- В появившемся окне напротив "Имя свойства" выберите или введите "svn:ignore", напротив "Значение свойства" введите желаемое имя файла или имя папки или маску файла (в моем случае это было "*/target"), нажмите "Применить". свойство рекурсивно
- Хорошо. Хорошо.
- совершить
- CD ~/. Subversion
- открыть конфиг
- найдите строку вроде "global-ignores"
- установить игнорировать тип файла следующим образом: global-ignores = *.o *.lo *.la *.al.libs *.so .so. [0-9] *.pyc *.pyo 88 *.rej ~ ##. # *. *. swp.DS_Store выходной файл node_modules
Более читаемая версия ответа 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
- Сохраняет все файлы с ? в файл "svnignore.txt"
- Получает уже проигнорированные файлы и добавляет их в файл "svnignore.txt"
- Говорит svn игнорировать файлы в "svnignore.txt"
- Удаляет файл
Что сработало для меня (я использую TortoiseSVN v1.13.1):
Как игнорировать файлы в Subversion?
1. В проводнике щелкните правой кнопкой мыши имя папки проекта
SVN
2.Щелкните"SVN Commit..." 3. Появится окно "фиксация"
4.Щелкните правой кнопкой мыши папку / файл, который вы хотите игнорировать
5. Нажмите "Добавить в список игнорирования"
6. Выберите имя папки / файла, которое вы хотите игнорировать.
- Есть несколько вариантов (4 для меня), если вы выберете только имя папки / файла, оно будет добавлено в список svn:ignore
- если вы выберете имя папки / файла с помощью (рекурсивно), оно будет добавлено в svn:global-ignores. Это то, что я обычно выбираю, так как это изменение автоматически наследуется всеми подкаталогами.
7.Зафиксируйте"изменение свойства" в SVN.
Кроме того, как мне найти файлы, которые не находятся под контролем версий?
После шага 3 выше нажмите "Показать неверсированные файлы" следующим образом:
svn status
скажет вам, какие файлы не в SVN, а также что изменилось.
Посмотрите на свойства SVN для свойства ignore.
Для всего SVN, Красная книга обязательна к прочтению.
Вы также можете установить глобальный шаблон игнорирования в файле конфигурации SVN.
SVN ignore
в TortoiseSVN легко управлять Откройте TortoiseSVN и щелкните правой кнопкой мыши по меню файлов, затем выберите "Добавить", чтобы игнорировать список.
Это добавит файлы в svn:ignore
имущество. Когда мы проверяем файлы, то те файлы, которые соответствуют svn:ignore
это будет игнорироваться и не будет совершаться.
В проект Visual Studio мы добавили следующие файлы, чтобы игнорировать:
bin obj
*.exe
*.dll
*.pdb
*.suo
Мы успешно управляем исходным кодом на SVN Comparetrap, используя этот метод
Добавление каталога в 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.
- откройте вы используете продукт JetBrains (например, Pycharm)
- затем нажмите кнопку "Подтвердить" на верхней панели инструментов или используйте сочетание клавиш "Ctrl + K".
- в интерфейсе фиксации переместите ненужные файлы в другой список изменений следующим образом. screenshot_commit_change
- в следующий раз вы сможете зафиксировать только список изменений по умолчанию.