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

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.

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

https://github.com/github/gitignore


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

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

принцип действия:

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

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

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

более читаемая версия bkbilly это:

svn st | awk '/^?/{print }' > 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. удаляет файл

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


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

посмотреть свойства SVN для свойства ignore.

для всех вещей SVN,Красная Книга обязательно для прочтения.



  1. команда CD ~/.подрывной
  2. открыть config
  3. найдите строку типа 'global-ignores'
  4. установить игнорировать тип файла следующим образом: 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 статус.


  1. открыть вы используете продукт JetBrains (т. е. Pycharm)
  2. затем нажмите кнопку "фиксация" на верхней панели инструментов или используйте сочетание клавиш "ctrl + k" screenshot_toolbar
  3. в интерфейсе фиксации переместите ненужные файлы в другой список изменений следующим образом. screenshot_commit_change
  4. в следующий раз вы можете совершать только список изменений по умолчанию.