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

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

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

507
17 сент. '08 в 21:15
источник поделиться
15 ответов

(Этот ответ обновлен в соответствии с поведением 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

та-да!

610
17 сент. '08 в 21:16
источник

Связанные вопросы


Похожие вопросы

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

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
64
25 окт. '13 в 18:20
источник

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

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

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

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

43
17 сент. '08 в 21:35
источник

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

svn propset svn:ignore -F ignorelist.txt .

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

svn propset svn:ignore "first
 second
 third" .

Источник: блог Karsten - установите svn: проигнорируйте несколько файлов из командной строки

30
26 авг. '14 в 12:15
источник

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

15
25 марта '14 в 23:06
источник

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

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

svn propset svn:ignore 'file1
file2' .
9
01 марта '11 в 16:54
источник

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

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"
  • Удаляет файл
7
29 мая '15 в 14:54
источник

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

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

Более читаемая версия 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"
  • Удаляет файл
3
01 дек. '16 в 4:07
источник

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

svn propedit svn:ignore .

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

3
27 июля '17 в 0:37
источник
3
10 марта '15 в 18:54
источник

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

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

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

3
17 сент. '08 в 21:17
источник

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

2
17 сент. '08 в 21:18
источник

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

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

2
17 сент. '08 в 21:19
источник
  • 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
1
11 янв. '17 в 12:49
источник

Посмотрите другие вопросы по меткам или Задайте вопрос