Как игнорировать файлы в Subversion?



Как игнорировать файлы в Subversion?



кроме того, как найти файлы, которые не находятся под контролем версий?

1401   17  

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 свойство, которое устанавливается на папки (не файлы):

  • это хранится в репо, так другие пользователи будут иметь те же игнорировать файлы. Похоже на то, как .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-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. Тем не менее, я предлагаю использовать командную строку для установки игнорируемых файлов, чтобы вы почувствовали, как это работает, а не с помощью графического интерфейса, и только с помощью графического интерфейса для управления свойствами после того, как вы освоитесь с командной строкой.

список файлов, которые игнорируются:

команда 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

та-да!

используйте следующую команду, чтобы создать список не под файлов контроля версий.

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 .

примеры .gitignore. Вы можете использовать для вашего .свнигнор

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. ОК. Ладно.
  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 в игнор собственность.

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

  1. cd ~/.подрывная деятельность
  2. открыть config
  3. найти строку типа 'global-ignores'
  4. установите игнорировать тип файла следующим образом: global-ignores = *.о.* Ло *.Ла *.Аль .либы *.так .так.[0-9] *.pyc *.Пе 88 *.rej ~ ## .#* .*.СВП .DS_Store node_modules output

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. в следующий раз вы можете совершать только список изменений по умолчанию.

Comments

    Ничего не найдено.