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

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

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

Команда svn status будет скрывать игнорируемые файлы (то есть файлы, которые соответствуют RGA global-ignores шаблон или соответствует непосредственный родительский каталог svn:ignore шаблон или сопоставить любой каталог предков svn:global-ignores шаблон.

Использовать --no-ignore возможность увидеть эти файлы в списке. Проигнорированные файлы имеют статус Iзатем передайте вывод grep показывать только строки, начинающиеся с "я".

Команда:

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

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

svn propset svn:ignore -F ignorelist.txt .

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

svn propset svn:ignore "first
 second
 third" .

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

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

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

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

Вы можете найти этот список в контекстном меню в TortoiseSVN / Properties.

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

svn propedit svn:ignore .

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

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

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

Они вставляются автоматически, если вы используете tab-autocomplete в 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:ignore", напротив "Значение свойства" введите желаемое имя файла или имя папки или маску файла (в моем случае это было "*/target"), нажмите "Применить". свойство рекурсивно
  4. Хорошо. Хорошо.
  5. совершить
  1. CD ~/. Subversion
  2. открыть конфиг
  3. найдите строку вроде "global-ignores"
  4. установить игнорировать тип файла следующим образом: global-ignores = *.o *.lo *.la *.al.libs *.so .so. [0-9] *.pyc *.pyo 88 *.rej ~ ##. # *. *. swp.DS_Store выходной файл node_modules

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

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. Удаляет файл

Что сработало для меня (я использую TortoiseSVN v1.13.1):

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

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

  • Есть несколько вариантов (4 для меня), если вы выберете только имя папки / файла, оно будет добавлено в список svn:ignore
  • если вы выберете имя папки / файла с помощью (рекурсивно), оно будет добавлено в svn:global-ignores. Это то, что я обычно выбираю, так как это изменение автоматически наследуется всеми подкаталогами.

7.Зафиксируйте"изменение свойства" в SVN.

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

После шага 3 выше нажмите "Показать неверсированные файлы" следующим образом:

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

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

Для всего SVN, Красная книга обязательна к прочтению.

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

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

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

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

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

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

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

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

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