Интересно видеть, как каждый простой вопрос (вероятно, от пользователя git) означает много слишком сложных ответов. Если это произойдет, это Subversion, детка.
Валерио Бозз
Ответы:
738
(Этот ответ был обновлен в соответствии с поведением SVN 1.8 и 1.9)
У вас есть 2 вопроса:
Пометка файлов как проигнорированных:
Под «игнорируемым файлом» я подразумеваю, что файл не будет отображаться в списках даже как «неверсированный»: ваш SVN-клиент сделает вид, что файл вообще не существует в файловой системе.
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 «Добавить рекурсивно», «Добавить *» и «Добавить» опции. Я надеюсь, что этот пост объясняет, как функция 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 status -u -v --no-ignore | grep "^ I" | awk "{print \ $ 2}"
Кристиан Мадсен,
3
если вы хотите игнорировать файл ./FolderA/FolderB/FileToIgnore, сделайте это из своего. папка: svn propset svn: игнорировать «FileToIgnore» FolderA / FolderB /
jnj
8
если вы используете ssh svn propedit svn:ignore .и текстовый редактор не настроен, вы получите сообщение об ошибке svn: E205007: ни одна из переменных окружения SVN_EDITOR, VISUAL или EDITOR не задана, и параметр конфигурации editor-cmd во время выполнения не был найдено вместо открытия редактора. Так что просто укажите --editor-cmd nano, как этоsvn propedit svn:ignore . --editor-cmd nano
Джонатан Моралес Велес
12
Вы также можете игнорировать файлы с определенным именем файла во всех подпапках, используя аргумент «--recursive». то есть svn propset svn: игнорировать "* .jpg". --recursive
Templar
2
Более простой альтернативой awk является grep:svn status | grep '^?'
Johnride
91
Используйте следующую команду, чтобы создать список, не относящийся к файлам контроля версий.
Затем отредактируйте файл, чтобы оставить только те файлы, которые вы хотите игнорировать . Затем используйте этот, чтобы игнорировать файлы, перечисленные в файле:
svn propset svn:ignore -F ignoring.txt .
Обратите внимание на точку в конце линии. Он сообщает SVN, что свойство устанавливается в текущем каталоге.
Удалить файл:
rm ignoring.txt
Наконец-то совершить,
svn ci --message "ignoring some files"
Затем вы можете проверить, какие файлы игнорируются с помощью:
Ницца. Незначительное улучшение есть svn status | awk "/^?/ {print \$2}" > ignoring.txt.
Дирк Эддельбюттель
4
зачем удалять файл? держите его в репо, если вам нужно заново создать / добавить / удалить
tgkprog
Обратите внимание, что это решение не будет игнорировать файлы в подкаталогах (даже если они отображаются в ignoring.txt).
shaneb
Будет ли это держать существующие игнорирует? Если нет, то как это сделать в одной команде (т.е. --no-ignore и сохранить также строки, предшествующие I)?
A1An
Это перезапишет ваши текущие игнорирования, попробуйте: svn pg svn:ignore . >> ignore.txtпосле первой команды, чтобы добавить текущие игнорирования в файл.
ulitosCoder
55
.gitignore как подход
Вы можете игнорировать файл или каталог, как .gitignore. Просто создайте текстовый файл со списком каталогов / файлов, которые вы хотите игнорировать, и запустите приведенный ниже код:
svn propset svn:ignore -F ignorelist.txt .
ИЛИ, если вы не хотите использовать текстовый файл, вы можете сделать это так:
Обратите внимание, что если вы позже измените свой файл игнорирования, вам нужно будет повторно запустить svn:ignoreкоманду (см. Stackoverflow.com/a/58380306/189518 )
Сенсей Джеймс
50
Если вы используете TortoiseSVN , щелкните правой кнопкой мыши файл и выберите TortoiseSVN / Add, чтобы игнорировать список . Это добавит файл / подстановочный знак к svn:ignoreсвойству.
svn:ignoreбудет проверяться при проверке файлов, а соответствующие файлы будут игнорироваться. У меня есть следующий список игнорирования для проекта Visual Studio .NET:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Вы можете найти этот список в контекстном меню в TortoiseSVN / Properties .
Этот ответ был полезен. В моем случае мне нужно было изменить "." в подкаталог файла, который я хотел игнорировать и просто указать шаблон файла. Кроме того, в первый раз мне нужно было запустить это (я на Mac): export SVN_EDITOR = "nano"
я сделал, как ты сказал ... но когда я запускаю статус SVN. он по-прежнему показывает проигнорированные файлы с "?"
Харшит Гупта
Я никогда не проверял статус svn, но с помощью svn add * и после этого svn commit игнорирование файлов не фиксируется.
д.данаилов
если файл «a.txt» уже находится в управлении версиями, то игнорирование выполняется командой вроде «svn propset svn: ignore -F .svnignore a.txt»? это правильно?
errakeshpd
Если вы добавите «.txt» в ваш файл .svnignore, я не уверен, но команда должна быть правильной.
д.данаилов
10
При использовании propedit убедитесь, что у вас нет завершающих пробелов, так как это приведет к исключению файла из списка игнорирования.
Они вставляются автоматически, если вы используете tab-autocomplete в linux для создания файла:
Это работает только для некоторых оболочек, таких как bash. Обратите внимание, что при повторном вводе команды propset предыдущий набор шаблонов перезаписывается.
JA Faucett
Таким образом, file1 и file2 должны быть в отдельных строках?
Кроме того, если вы используете Tortoise SVN, вы можете сделать это:
В контекстном меню выберите «TortoiseSVN», затем «Свойства»
В появившемся окне нажмите «Новый», затем «Дополнительно»
В появившемся окне напротив «Имя свойства» выберите или введите «svn: ignore», напротив «Значение свойства» введите желаемое имя файла или имя папки или маску файла (в моем случае это было «* / target»), нажмите «Применить». свойство рекурсивно
Спасибо, ваш ответ - единственный, который упоминает configфайл.
Энрике де Соуза
В этом ответе также упоминается @HenriquedeSousa stackoverflow.com/a/86052/7724, а также объясняется, что это способ игнорирования файлов только для локального клиента.
Мне нравится ответ bkbilly, но эта версия разбивает каждую строку, чтобы сделать его более читабельным, и удаляет символ &&, который в моих тестах ничего не делал, поскольку первая строка всегда создает временный файл, и этот же временный файл всегда попадает в список игнорирования.
LivingDust
Предложение по редактированию было бы более уместным в этом случае. Цените усилия!
Джим
У меня еще не было достаточно репутации, чтобы предложить редактирование. но я не хочу портить хороший протокол. Существует ли простой README по руководящим принципам, когда лучше предлагать и редактировать, а не публиковать новый ответ и т. Д.?
LivingDust
1
Если ваш ответ точно такой же, как и тот, который был опубликован полтора года назад, он довольно прост. Вы даже скопировали объяснение « что он делает ».
Джим
3
Вы также можете установить глобальный шаблон игнорирования в конфигурационном файле SVN.
Используйте команду 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 выше нажмите «Показать неверсионные файлы»
Ответы:
(Этот ответ был обновлен в соответствии с поведением 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
список не будет доступен другим пользователям и применяется ко всем репозиториям, которые вы оформляете на своем компьютере.C:\Users\{you}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
в обоихHKLM
иHKCU
.~/.subversion/config
2 -
svn:ignore
Свойство, которое устанавливается для каталогов (не файлов):.gitignore
работает.svn:ignore
применяется к каталогам и не является рекурсивным или наследуется. Любой файл или непосредственный подкаталог родительского каталога, соответствующий шаблону файла, будет исключен.В то время как SVN 1.8 добавляет концепцию «унаследованных свойств», само
svn:ignore
свойство игнорируется в каталогах, не являющихся непосредственными:(Таким образом, файл
./subdirectory/ignoreThis
не игнорируется, даже если «ignoreThis.txt
» применен к.
корню репо).Поэтому, чтобы применить список игнорирования рекурсивно, вы должны использовать
svn propset svn:ignore <filePattern> . --recursive
.<filePattern>
значение в дочернем каталоге отличается, то дочернее значение полностью переопределяет родителей, поэтому «аддитивный» эффект отсутствует.<filePattern>
в корневом каталоге.
, вы должны изменить его,--recursive
чтобы перезаписать его в дочерних и дочерних каталогах.Я отмечаю, что синтаксис командной строки противоречит интуиции.
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
вместо этого используется :Для пользователей TortoiseSVN:
Вся эта договоренность меня смущала, потому что терминология TortoiseSVN (используемая в их системе меню Windows Explorer) поначалу вводила меня в заблуждение - я не был уверен, каково значение меню Ignore «Добавить рекурсивно», «Добавить *» и «Добавить» опции. Я надеюсь, что этот пост объясняет, как функция Ignore связана с функцией SVN Properties. Тем не менее, я предлагаю использовать командную строку для установки игнорируемых файлов, чтобы вы почувствовали, как это работает, вместо того, чтобы использовать графический интерфейс и использовать графический интерфейс для манипулирования свойствами только после того, как вы освоитесь с командной строкой.
Список файлов, которые игнорируются:
Команда
svn status
будет скрывать пропущенные файлы (то есть файлы, которые соответствуютglobal-ignores
шаблону RGA или соответствуют шаблону непосредственного родительского каталогаsvn:ignore
или шаблону любого исходного каталога)svn:global-ignores
.Используйте
--no-ignore
опцию, чтобы увидеть эти файлы в списке. Проигнорированные файлы имеют статусI
, затем передайте вывод, чтобыgrep
показать только строки, начинающиеся с «I».Команда:
Например:
та-да!
источник
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, что свойство устанавливается в текущем каталоге.
Удалить файл:
Наконец-то совершить,
Затем вы можете проверить, какие файлы игнорируются с помощью:
источник
svn status | awk "/^?/ {print \$2}" > ignoring.txt
.svn pg svn:ignore . >> ignore.txt
после первой команды, чтобы добавить текущие игнорирования в файл..gitignore как подход
Вы можете игнорировать файл или каталог, как .gitignore. Просто создайте текстовый файл со списком каталогов / файлов, которые вы хотите игнорировать, и запустите приведенный ниже код:
ИЛИ, если вы не хотите использовать текстовый файл, вы можете сделать это так:
Источник: Блог Карстена - Установите svn: ignore для нескольких файлов из командной строки
источник
svn:ignore
команду (см. Stackoverflow.com/a/58380306/189518 )Если вы используете TortoiseSVN , щелкните правой кнопкой мыши файл и выберите TortoiseSVN / Add, чтобы игнорировать список . Это добавит файл / подстановочный знак к
svn:ignore
свойству.svn:ignore
будет проверяться при проверке файлов, а соответствующие файлы будут игнорироваться. У меня есть следующий список игнорирования для проекта Visual Studio .NET:Вы можете найти этот список в контекстном меню в TortoiseSVN / Properties .
источник
Как никто, кажется, не упомянул об этом ...
Затем отредактируйте содержимое файла, чтобы указать шаблоны для игнорирования, выйдите из редактора, и все готово.
источник
Я нашел статью .svnignore Пример для Java .
Пример: .svnignore для Ruby on Rails,
И после этого:
Примеры для .gitignore. Вы можете использовать для вашего .svnignore
https://github.com/github/gitignore
источник
При использовании propedit убедитесь, что у вас нет завершающих пробелов, так как это приведет к исключению файла из списка игнорирования.
Они вставляются автоматически, если вы используете tab-autocomplete в linux для создания файла:
источник
Другое решение:
или построчно
Что оно делает:
источник
Кроме того, если вы используете Tortoise SVN, вы можете сделать это:
источник
источник
config
файл.Более читаемая версия ответа bkbilly:
Что оно делает:
источник
Вы также можете установить глобальный шаблон игнорирования в конфигурационном файле SVN.
источник
svn status
скажет вам, какие файлы отсутствуют в SVN, а также что изменилось.Посмотрите на свойства SVN для свойства ignore.
Для всего SVN, Красная книга обязательна к прочтению.
источник
Добавление каталога в Subversion и игнорирование содержимого каталога
или
источник
Используйте команду 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 мы добавили следующие файлы, чтобы игнорировать:
Мы успешно управляем исходным кодом на SVN Comparetrap, используя этот метод
источник
Что сработало для меня:
Как игнорировать файлы в Subversion?
1. В проводнике щелкните правой кнопкой мыши имя папки проекта
SVN
2. Нажмите «SVN Commit ...» 3. Появится окно «commit»
4. Щелкните правой кнопкой мыши папку / файл, который вы хотите игнорировать
5.Нажмите «Добавить, чтобы игнорировать список».
6. Выберите папку / файл.
7.Отправьте «изменение свойства» в SVN.
Кроме того, как мне найти файлы, которые не находятся под контролем версий?
После шага 3 выше нажмите «Показать неверсионные файлы»
источник
источник