Как игнорировать файлы в 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
список не будет использоваться другими пользователями, и он применяется ко всем репо, которые вы оформляете на свой компьютер. - этот параметр определен в файле области конфигурации среды выполнения:
- 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
свойство, которое устанавливается в каталогах (а не в файлах):
- это хранится в репо, так другие пользователи будут иметь те же файлы ignore. Похожие на how
.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>
значение отличается в дочернем каталоге, тогда значение ребенка полностью переопределяет родителей, поэтому нет "аддитивного" эффекта. - так что если вы измените the
<filePattern>
корень.
, то вы должны изменить его с--recursive
перезаписать его в дочерних и дочерних каталогах.
-
я отмечаю, что синтаксис командной строки противоречит интуиции.
- я начал предполагать, что вы проигнорируете файл в SVN, введя что-то вроде
svn ignore pathToFileToIgnore.txt
однако это не так, как работает функция игнорирования SVN.
- я начал предполагать, что вы проигнорируете файл в SVN, введя что-то вроде
3-The 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. Тем не менее, я предлагаю использовать командную строку для установки игнорируемых файлов, чтобы вы почувствовали, как она работает, вместо использования GUI, и только с помощью GUI манипулировать свойствами после того, как вам удобно с командной строкой.
список файлов, которые игнорируются:
команда svn status
скроет игнорируемые файлы (то есть файлы, соответствующие RGA global-ignores
pattern, или соответствовать непосредственный родительский каталог svn:ignore
шаблон или соответствовать любой ancesor каталога 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 | 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:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
вы можете найти этот список в контекстном меню в TortoiseSVN / Свойства.
вы можете игнорировать файл или каталог, как .gitignore
. Просто создайте текстовый файл списка каталогов / файлов, которые вы хотите игнорировать, и запустите код ниже:
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 .
примеры .гитюдного. Вы можете использовать для вашего .svnignore
как никто, кажется, не упоминал об этом...
svn propedit svn:ignore .
затем отредактируйте содержимое файла, чтобы указать шаблоны для игнорирования, выйдите из редактора, и все готово.
при использовании propedit убедитесь, что нет конечных пробелов, так как это приведет к исключению файла из списка игнорирования.
они вставляются автоматически, если вы используете tab-autocomplete в linux для создания файла для начала:
svn propset svn:ignore 'file1
file2' .
другое решение-это:
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
принцип действия:
- получает файлы состояния из svn
- сохраняет все файлы с ? в файл " svnignore.txt"
- получает уже проигнорированные файлы и добавляет их в файл "svnignore.txt"
- говорит svn игнорировать файлы в " svnignore.txt"
- удаляет файл
кроме того, если вы используете Tortoise SVN, вы можете сделать это:
- в контекстном меню выберите "TortoiseSVN", затем"Свойства"
- в появившемся окне нажмите "Создать", затем"дополнительно"
- в появившемся окне напротив "имя Свойства" выберите или введите "svn: ignore", напротив" значение свойства "введите желаемое имя файла или имя папки или маску файла (в моем случае это было" */target"), нажмите"Применить свойство рекурсивно"
- Ok. Ладно.
- Commit
более читаемая версия bkbilly это:
svn st | awk '/^?/{print }' > 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"
- удаляет файл
svn status
скажет вам, какие файлы не находятся в SVN, а также что изменилось.
посмотреть свойства SVN для свойства ignore.
для всех вещей SVN,Красная Книга обязательно для прочтения.
добавление каталога в subversion и игнорирование содержимого каталога
svn propset svn:ignore '\*.*' .
или
svn propset svn:ignore '*' .
- команда CD ~/.подрывной
- открыть config
- найдите строку типа 'global-ignores'
- установить игнорировать тип файла следующим образом: global-ignores = *.о.* Ло *.la *.ал .либы *.так .так.[0-9] *.пыць *.Пе 88 *.Редж ~ ## .#* .*.swp .DS_Store выходной папки node_modules
SVN ignore
легко управлять в TortoiseSVN. Откройте TortoiseSVN и щелкните правой кнопкой мыши на меню Файл, затем выберите Добавить в список игнорировать.
добавить файлы в svn:ignore
собственность.
Когда мы проверяем файлы, то те файлы, которые соответствуют svn:ignore
это будет проигнорировано и не будет зафиксировано.
в проекте Visual Studio мы добавили следующие файлы для игнорирования:
bin obj
*.exe
*.dll
*.pdb
*.suo
мы управляем исходным кодом на SVN Comparetrap использование этого метода успешно
используйте команду статус svn на вашей рабочей копии, чтобы показать состояние файлов, файлы, которые еще не находятся под контролем версий (и не игнорируются), будут иметь знак вопроса рядом с ними.
Что касается игнорирования файлов, вам нужно отредактировать свойство svn: ignore, прочитайте главу игнорирование Неверсионных элементов в svnbook по адресуhttp://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html. В книге также описано больше об использовании svn статус.
- открыть вы используете продукт JetBrains (т. е. Pycharm)
- затем нажмите кнопку "фиксация" на верхней панели инструментов или используйте сочетание клавиш "ctrl + k" screenshot_toolbar
- в интерфейсе фиксации переместите ненужные файлы в другой список изменений следующим образом. screenshot_commit_change
- в следующий раз вы можете совершать только список изменений по умолчанию.