Вопрос

Я только начал использовать SVN, и у меня есть каталог кеша, который мне не нужен под контролем исходного кода.Как я могу игнорировать весь каталог/папку с помощью SVN?

Я использую Версии и ТекстМейт в OS X и командной строке.

Это было полезно?

Решение

Установить svn:ignore свойство родительского каталога:

svn propset svn:ignore dirname .

Если вам нужно игнорировать несколько вещей, разделите их символами новой строки в значении свойства.В этом случае проще редактировать значение свойства с помощью внешнего редактора:

svn propedit svn:ignore .

Другие советы

Вот пример структуры каталогов:

\project
    \source
    \cache
    \other

Когда в project вы видите, что ваш каталог кеша не добавлен и отображается как таковой.

> svn st
M  source
?  cache

Чтобы установить свойство игнорирования, выполните

svn propset svn:игнорировать кеш.

где svn:ignore это имя свойства, которое вы устанавливаете, cache это стоимость имущества, а . — это каталог, в котором вы устанавливаете это свойство.Это должен быть родительский каталог cache каталог, которому требуется это свойство.

Чтобы проверить, какие свойства установлены:

> svn proplist
Properties on '.':
  svn:ignore

Чтобы увидеть ценность svn:ignore:

> svn propget svn:ignore
cache

Чтобы удалить ранее установленные свойства:

svn propdel svn:ignore

Важно упомянуть:

В командной строке вы не можете использовать

svn add *

Это также добавит игнорируемые файлы, поскольку командная строка расширяется. * и поэтому svn add считает, что вы хотите, чтобы все файлы были добавлены.Поэтому вместо этого используйте это:

svn add --force .

Поскольку я потратил некоторое время, пытаясь заставить это работать, следует отметить, что если файлы уже существуют в SVN, вам необходимо svn delete их, а затем отредактируйте svn:ignore свойство.

Я знаю, это кажется очевидным, но они продолжали появляться как ? в моем svn status list, когда я думал, что он просто проигнорирует их локально.

Чтобы немного расширить, если вы делаете это с помощью инструмента командной строки svn, вам нужно ввести:

svn propedit svn:ignore path/to/dir

который откроет выбранный вами текстовый редактор, затем введите «*», чтобы игнорировать все внутри него, и сохраните + выйти — это включит сам каталог в svn, но проигнорирует все файлы внутри него. Чтобы игнорировать каталог, используйте команду путь родительского файла, а затем введите имя каталога в файле.После сохранения запустите обновление («svn up»), а затем проверьте соответствующий путь.

Установить svn:ignore свойство в родительском каталоге:

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'

Это перезапишет любое текущее значение svn:ignore.Вы редактируете значение с помощью:

$ svn pe svn:ignore .

Откроется ваш редактор.Вы можете добавить несколько шаблонов, по одному на строку.

Вы можете просмотреть текущее значение с помощью:

$ svn pg svn:ignore .

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

Спасибо за все вышеперечисленные материалы.Я просто хотел бы поделиться дополнительной информацией из своего опыта игнорирования файлов.


Когда папки уже находятся под контролем версий

После импорт SVN и СВН Ко файлы, что мы обычно делаем в первый раз.

Весь кэш времени выполнения и папки вложений будут находиться под контролем версий.Итак, прежде чем svn PS svn: игнорировать, нам нужно удалить его из репозитория.

В SVN версии 1.5 выше мы можем использовать svn del --keep-local your_folder, но для более ранней версии мое решение:

  1. SVN-экспорт чистую копию ваших папок (без .svn скрытая папка)
  2. свн дель локальный и репозиторий,
  3. СВН CI
  4. Скопируйте обратно папки
  5. Делать свн ул и убедитесь, что папки помечены как '?'
  6. Теперь мы можем сделать свн пс по решениям

Когда нам нужно игнорировать более одной папки

  • В одном каталоге у меня есть две папки, которые нужно установить как svn:ignore
  • Если мы установим один, другой будет удален.
  • Тогда мы задаемся вопросом, нам нужно свн пе

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

export SVN_EDITOR=vi
  1. С помощью «о» вы можете открыть новую строку
  2. Введите все имена папок, которые вы хотите игнорировать.
  3. Нажмите клавишу «esc», чтобы выйти из режима редактирования.
  4. Введите «:wq» и нажмите Входить сохранить и выйти

Файл выглядит примерно так:

runtime
cache
attachments
assets

Сначала удали его...

Если ваш каталог foo уже находится под контролем версий, сначала удалите его с помощью:

svn rm --keep-local foo

...тогда игнорируйте:

svn propset svn:ignore foo .

... и если вы хотите игнорировать более одного каталога (скажем, build/ temp/ и *.tmp файлы), вы можете либо сделать это в два этапа (игнорируя первый и отредактировав свойства игнорирования (см. другие ответы здесь), либо можно написать что-то вроде

svn propset svn:ignore "build
temp
*.tmp" .

в командной строке.

Если вы используете конкретный клиент SVN ЧерепахаSVN, затем при фиксации у вас есть возможность щелкнуть правой кнопкой мыши по элементам и выбрать «Добавить в список игнорирования».

Команда игнорирования нескольких записей немного сложна и требует обратной косой черты.

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .

Эта команда будет игнорировать все, что названо cache, tmp, null, и and_so_on в текущем каталоге.

У меня были проблемы с игнорированием вложенных каталогов;верхний каталог, который я хотел игнорировать, не отображался с «статусом svn», но все подкаталоги отображались.Вероятно, это самоочевидно для всех остальных, но я решил поделиться этим:

ПРИМЕР:

/ствол

/транк/кэш

/trunk/cache/subdir1

/trunk/cache/subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci

"Спасибо" svn за такой отвратительный, фальшивый и трудный способ игнорировать файлы.

Итак, я написал сценарий SVN-игнорировать-все:

#!/bin/sh

# svn-ignore-all

# usage: 
#   1. run svn status to see what is going on at each step 
#   2. add or commit all files that you DO want to have in svn
#   3. remove any random files that you don't want to svn:ignore
#   4. run this script to svn:ignore everything marked '?' in output of `svn status`

svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Кроме того, чтобы игнорировать определенный список файлов/путей, мы можем использовать этот вариант SVN-игнорировать.Я думаю, что svn-ignore-all действительно должен быть похож на xargs svn-ignore.

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Еще кое-что:Я склонен засорять свои проверки SVN множеством случайных файлов.Когда приходит время коммитить, я перемещаю эти файлы в «старый» подкаталог и говорю svn игнорировать «старый».

Bash oneliner для многократного игнорирования:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"

Если каталог вашего проекта называется /Project, а каталог кэша — /Project/Cache, вам необходимо установить свойство subversion для /Project.Имя свойства должно быть «svn:ignore», а значение свойства должно быть «Cache».

Ссылаться на этот страницу в руководстве Subversion для получения дополнительной информации о свойствах.

Ответ Джейсона сделает свое дело.Однако вместо того, чтобы установить SVN: игнорировать «». В каталог кэша вы можете включить «кеш» в родитель свойство svn:ignore каталога, если каталог кэша не всегда присутствует.Я делаю это с несколькими «одноразовыми» папками.

ДЛЯ СОХРАНЕНИЯ КАТАЛОГОВ, КОТОРЫЕ SVN БУДЕТ ИГНОРИРОВАТЬ:

  1. это удалит файлы из репозитория, но сохранит каталог под контролем SVN:

svn delete --keep-local path/directory_to_keep/*

  1. затем установите игнорирование каталога (и всего содержимого):

svn propset svn: игнорировать "*" путь/directory_to_keep

Если вы используете интерфейс для SVN, такой как TortoiseSVN, или какую-либо интеграцию с IDE, в том же меню, что и операция фиксации/добавления, также должна быть опция игнорирования.

Установите SVN: игнорировать свойство.Большинство инструментов UI svn имеют способ сделать это, а также обсуждение командной строки в ссылке.

Поскольку вы используете версии, это на самом деле очень просто:

  • Просмотрите извлеченную копию
  • Нажмите на каталог, чтобы игнорировать
  • В поле «Игнорировать» справа нажмите «Изменить».
  • Введите *.*, чтобы игнорировать все файлы (или *.jpg, если только файлы jpg и т. д.).

Также следите за своими косыми чертами.Я обнаружил, что в том числе images/* в моем файле настроек игнорирования не игнорировалось ./images/.Когда я побежал svn status -u это все равно показало ? images.Итак, я просто изменил настройку игнорирования на просто images, никаких косых черт.Запустил проверку статуса и всё прояснилось.

Решено с помощью Затмение следующим образом:

Первым делом сделайте синхронизацию вашей папки с проектом:

команда -> синхронизировать

В следующем представлении, командном представлении, вы можете увидеть все ресурсы, которые вы можете передать на сервер SVN.

Итак, выберите папку ресурса, которую вы хотите игнорировать, а затем вы можете игнорировать его, используя

команда -> добавить в svn:ignore.

После этого в окне подтверждения выберите первый вариант:«игнорировать по имени».

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

команда->добавить

к svn:ignore а затем я подтвержу первый вариант в окне подтверждения.

Потратив кучу времени на поиски того, как выполнить это простое действие, я решил опубликовать, что найти достойное объяснение не составит труда.

Сначала пусть структура образца

$ svn st?Проект/Танч/Цель?проект/транк/myfile.x

1 - Сначала настроить редактор, в Mycase vim Export svn_editor = vim

2 – «svn propedit svn:ignore project/trunk/» откроет новый файл, и вы сможете добавить свои файлы и подкаталог в нашем случае, введите «target», сохраните и закройте файл, и все работает.

$ svn st?проект/транк/myfile.x

Спасибо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top