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

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

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

Ответы

Ответ 1

(Этот ответ обновлен в соответствии с поведением 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 не будет использоваться другими пользователями, и он применим ко всем репозициям на вашем компьютере.
  • Этот параметр определен в вашем файле области конфигурации Runtime:
    • 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" применяется к корню repo .).

  • Поэтому, чтобы применить список игнорирования рекурсивно, вы должны использовать 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 "inherited properties".
  • Сравните с 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) изначально вводила меня в заблуждение - я не знал, какое значение имеет меню Игнорировать "Добавить рекурсивно", "Добавить *" и "Добавить". Надеюсь, что в этом сообщении объясняется, как функция Игнорировать связана с функцией SVN Properties. Тем не менее, я предлагаю использовать командную строку для установки игнорируемых файлов, чтобы вы могли понять, как это работает, вместо использования графического интерфейса, и только с помощью графического интерфейса для управления свойствами после удобного использования командной строки.

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

Команда svn status скроет проигнорированные файлы (то есть файлы, соответствующие шаблону RGA global-ignores), или сопоставляет шаблон исходного родительского каталога svn:ignore или соответствует любому шаблону anceor 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

та-да!

Ответ 2

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

svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt

Затем отредактируйте файл , оставив только те файлы, которые вы хотите проигнорировать. Затем используйте это, чтобы игнорировать файлы, перечисленные в файле:

svn propset svn:ignore -F ignoring.txt .

Обратите внимание на точку в конце строки. Он сообщает SVN, что свойство устанавливается в текущем каталоге.

Удалить файл:

rm ignoring.txt

Наконец, commit,

svn ci --message "ignoring some files"

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

svn proplist -v

Ответ 3

Если вы используете TortoiseSVN, щелкните правой кнопкой мыши файл и выберите TortoiseSVN/Добавить в список игнорирования. Это добавит файл/подстановочный знак в свойство svn:ignore.

svn:ignore будет проверяться при проверке файлов, и соответствующие файлы будут проигнорированы. У меня есть следующий список игнорирования для проекта Visual Studio.NET:

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

Этот список можно найти в контекстном меню TortoiseSVN/Свойства.

Ответ 4

.gitignore как подход

Вы можете игнорировать файл или каталог, как .gitignore. Просто создайте текстовый файл со списком каталогов/файлов, которые вы хотите игнорировать, и запустите приведенный ниже код:

svn propset svn:ignore -F ignorelist.txt .

ИЛИ, если вы не хотите использовать текстовый файл, вы можете сделать это следующим образом:

svn propset svn:ignore "first
 second
 third" .

Источник: Блог Karsten - Установите svn: ignore для нескольких файлов из командной строки

Ответ 5

Я нашел статью .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

Ответ 6

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

svn propedit svn:ignore .

Затем отредактируйте содержимое файла, чтобы указать шаблоны для игнорирования, выйти из редактора, и все готово.

Ответ 7

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

Они автоматически вставлены, если вы используете tab-autocomplete в linux для создания файла, чтобы начать с:

svn propset svn:ignore 'file1
file2' .

Ответ 8

Другое решение:

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

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

  • Получает файлы состояния из svn
  • Сохраняет все файлы с ? в файл "svnignore.txt"
  • Возвращает уже проигнорированные файлы и добавляет их в файл "svnignore.txt"
  • Сообщает svn игнорировать файлы в "svnignore.txt"
  • Удаляет файл

Ответ 9

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

  • В контекстном меню выберите "TortoiseSVN", затем "Свойства"
  • В появившемся окне нажмите "Создать", затем "Дополнительно"
  • В появившемся окне напротив "Имя свойства" выберите или введите "svn: ignore", напротив "Значение свойства" введите желаемое имя файла или имя папки или маску файла (в моем случае это было "*/target" ) нажмите "Применить свойство рекурсивно"
  • Ok. Хорошо.
  • Фиксировать

Ответ 10

Более читаемая версия bkbilly answer:

svn st | awk '/^?/{print $2}' > 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"
  • Удаляет файл

Ответ 11

  • cd ~/.subversion
  • открыть конфигурацию
  • найдите строку типа "global-ignores"
  • set игнорировать тип файла следующим образом: global-ignores = *.o *.lo *.la *.al.libs *.so.so. [0-9] *.pyc *.pyo 88 *.rej ~ ##. # *. *. Swp.DS_Store node_modules output

Ответ 12

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

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

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

Ответ 13

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

Ответ 15

Используйте команду svn status на рабочей копии, чтобы показать статус файлов, файлы, которые еще не находятся под управлением версиями (и не игнорируются), будут рядом с ними. p >

Что касается игнорирования файлов, вам необходимо отредактировать свойство svn: ignore, прочитайте главу "Игнорирование неверсированных элементов в svnbook" в http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html, В книге также описано больше об использовании статуса svn.

Ответ 16

SVN ignore прост в управлении в TortoiseSVN. Откройте TortoiseSVN, щелкните правой кнопкой мыши по меню файлов и выберите "Добавить", чтобы игнорировать список.

Это добавит файлы в свойство svn:ignore. Когда мы проверяем файлы, то те файлы, которые соответствуют svn:ignore, будут игнорироваться и не будут фиксироваться.

В проекте Visual Studio мы добавили следующие файлы для игнорирования:

bin obj
*.exe
*.dll
*.pdb
*.suo

Мы управляем исходным кодом в SVN Comparetrap, используя этот метод успешно

Ответ 17

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

Ответ 18

Что сработало для меня:

Как игнорировать файлы в Subversion?
1. В проводнике щелкните правой кнопкой мыши имя папки проекта SVN
. 2.Нажмите "SVN Commit..."
3. Появится окно "коммит"
4.Нажмите правой кнопкой мыши папку/файл, который вы хотите игнорировать
5.Нажмите Добавить, чтобы игнорировать список
. 6. Выберите папку/файл
7. Внесите "изменение свойства" в SVN

Кроме того, как мне найти файлы, которые не находятся под контролем версий?
После шага 3 выше нажмите "Показать неверсионные файлы"