Вопрос

Как мне игнорировать файлы в 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

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) изначально вводила меня в заблуждение - я не был уверен, каково значение опций "Добавить рекурсивно", "Добавить *" и "Добавить " в меню игнорирования.Я надеюсь, что этот пост объясняет, как функция Игнорирования связана с функцией 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

https://github.com/github/gitignore

Поскольку, похоже, никто об этом не упоминал...

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

Что он делает:

  1. Получает файлы состояния из svn
  2. Сохраняет все файлы с помощью ? в файл "svnignore.txt"
  3. Получает уже проигнорированные файлы и добавляет их в файл "svnignore.txt"
  4. Указывает svn игнорировать файлы в "svnignore.txt"
  5. Удаляет файл

Кроме того, если вы используете Tortoise SVN, вы можете сделать это:

  1. В контекстном меню выберите "TortoiseSVN", затем "Свойства".
  2. В появившемся окне нажмите "Создать", затем "Дополнительно".
  3. В появившемся окне напротив "Имя свойства" выберите или введите "svn: игнорировать", напротив "Значение свойства" введите желаемое имя файла или папки или маску файла (в моем случае это было "*/target"), нажмите "Применить свойство рекурсивно".
  4. ОК.ОК.
  5. Зафиксировать

Более читаемая версия ответ бкбилли:

svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt

Что он делает:

  1. Получает файлы состояния из svn
  2. Сохраняет все файлы с помощью ? в файл "svnignore.txt"
  3. Получает уже проигнорированные файлы и добавляет их в файл "svnignore.txt"
  4. Указывает svn игнорировать файлы в "svnignore.txt"
  5. Удаляет файл
  1. cd ~/.подрывная деятельность
  2. открыть конфигурацию
  3. найдите строку типа "global-игнорирует".
  4. установите игнорировать тип файла следующим образом:глобальный-игнорирует = *.o *.lo *.la *.al .libs *.so .итак. [0-9] *.pyc *.pyo 88 *.rej ~ ## .#* .*.вывод node_modules из swp .DS_Store

Вы также можете установить глобальный шаблон игнорирования в файле конфигурации SVN.

svn status сообщит вам, каких файлов нет в SVN, а также что изменилось.

Посмотрите на Свойства SVN для свойства ignore.

Для всех вещей SVN, Красная книга требуется чтение.

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.

  1. если вы используете продукт JetBrains (т.е.Pycharm)
  2. затем нажмите кнопку "зафиксировать" на верхней панели инструментов или используйте сочетание клавиш "ctrl + k" панель инструментов screenshot_toolbar
  3. в интерфейсе фиксации переместите ненужные файлы в другой список изменений следующим образом.скриншот_commit_change
  4. в следующий раз вы сможете зафиксировать только список изменений по умолчанию.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top