Как игнорировать каталог с SVN?
Я только начал использовать SVN, и у меня есть каталог кеша, который мне не нужен при управлении источником. Как игнорировать весь каталог/папку с SVN?
Я использую Версии и TextMate на OS X и командная строка.
Ответы
Ответ 1
Задайте свойство svn:ignore
родительского каталога:
svn propset svn:ignore dirname .
Если у вас есть несколько вещей, которые нужно игнорировать, разделите их символами новой строки в значении свойства. В этом случае легче изменить значение свойства с помощью внешнего редактора:
svn propedit svn:ignore .
Ответ 2
Вот пример структуры каталогов:
\project
\source
\cache
\other
Когда в project
вы видите, что ваш каталог кеша не добавлен и отображается как таковой.
> svn st
M source
? cache
Чтобы установить свойство ignore, do
svn propset svn: игнорировать кеш.
где svn:ignore
- имя свойства, которое вы устанавливаете, cache
- это значение свойства, а .
- это каталог, в который вы устанавливаете это свойство. Он должен быть родительским каталогом каталога cache
, которому требуется свойство.
Чтобы проверить, какие свойства установлены:
> svn proplist
Properties on '.':
svn:ignore
Чтобы увидеть значение svn:ignore
:
> svn propget svn:ignore
cache
Чтобы удалить ранее установленные свойства:
svn propdel svn:ignore
Ответ 3
Важно отметить:
В командной строке вы не можете использовать
svn add *
Это также добавит игнорируемые файлы, потому что в командной строке будет расширяться *
, и поэтому svn add
считает, что вы хотите, чтобы все файлы были добавлены. Поэтому используйте это вместо:
svn add --force .
Ответ 4
Поскольку я потратил некоторое время, пытаясь заставить это работать, следует отметить, что если файлы уже существуют в SVN, вам нужно svn delete
их, а затем изменить свойство svn:ignore
.
Я знаю, что это кажется очевидным, но они продолжали отображаться как ?
в моем списке svn status
, когда я думал, что он просто игнорирует их локально.
Ответ 5
Чтобы немного развернуть, если вы делаете это с помощью инструмента командной строки svn, вы хотите ввести:
svn propedit svn:ignore path/to/dir
который откроет ваш текстовый редактор, а затем введите "*", чтобы игнорировать все внутри него и сохранять + закрыть - это будет включать сам каталог в svn, но игнорировать все файлы внутри него, чтобы игнорировать каталог, используйте путь родителя, а затем введите имя каталога в файле. После сохранения запустите обновление ('svn up'), а затем проверьте соответствующий путь.
Ответ 6
Задайте свойство svn:ignore
в родительском каталоге:
$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
Это перезапишет любое текущее значение svn:ignore
. Вы редактируете значение с помощью:
$ svn pe svn:ignore .
Что откроет ваш редактор. Вы можете добавить несколько шаблонов, по одному на строку.
Вы можете просмотреть текущее значение с помощью:
$ svn pg svn:ignore .
Если вы используете графический интерфейс, для этого должна быть опция меню.
Ответ 7
Спасибо за все вышеперечисленные вклады. Я просто хотел бы поделиться некоторой дополнительной информацией из моего опыта, игнорируя файлы.
Когда папки уже находятся под контролем версии
После svn import и svn co файлы, что мы обычно делаем в первый раз.
Все кеширование времени выполнения, вложенные папки будут находиться под контролем версий.
поэтому перед svn ps svn: ignore, нам нужно удалить его из репозитория.
С SVN версии 1.5 выше мы можем использовать svn del --keep-local your_folder
,
но для более ранней версии мое решение:
- svn экспортирует чистую копию ваших папок (без
.svn
скрытой папки)
- svn локальный и репозиторий,
- svn ci
- Скопировать назад папки
- Сделайте svn st и подтвердите, что папки отмечены как "?"
- Теперь мы можем сделать svn ps в соответствии с решениями
Если нам нужно игнорировать больше одной папки
- В одном каталоге у меня есть две папки, которые нужно установить как
svn:ignore
- Если мы установим один, другой будет удален.
- Тогда нам интересно, что нам нужно svn pe
svn pe
необходимо будет отредактировать текстовый файл, и вы можете использовать эту команду, если требуется, чтобы установить текстовый редактор, используя vi
export SVN_EDITOR=vi
- С помощью "o" вы можете открыть новую строку
- Введите все имена папок, которые вы хотите игнорировать.
- Нажмите клавишу "esc", чтобы выйти из режима редактирования.
- Введите ": wq", затем нажмите Enter, чтобы сохранить и выйти
Файл выглядит примерно так:
runtime
cache
attachments
assets
Ответ 8
Сначала удалите его...
Если ваш каталог foo
уже находится под управлением версией, сначала удалите его:
svn rm --keep-local foo
... затем игнорировать:
svn propset svn:ignore foo .
Ответ 9
... и если вы хотите игнорировать несколько каталогов (например, build/
temp/
и *.tmp
), вы можете сделать это в два этапа (игнорируя первый и редактировать свойства игнорирования (см. другие ответы здесь), или можно написать что-то вроде
svn propset svn:ignore "build
temp
*.tmp" .
в командной строке.
Ответ 10
Если вы используете конкретный клиент SVN TortoiseSVN, то при фиксации у вас есть возможность щелчка правой кнопкой мыши и выбор "Добавить в список игнорирования".
Ответ 11
Команда игнорировать несколько записей немного сложна и требует обратных косых черт.
svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
Эта команда будет игнорировать все, что называется cache
, tmp
, null
и and_so_on
в текущем каталоге.
Ответ 12
У меня возникли проблемы с игнорированием вложенных каталогов; верхний каталог, который я хотел игнорировать, не показывался бы с "svn status", но все поддиры. Вероятно, это очевидно для всех остальных, но я думал, что поделюсь им:
Пример:
/багажник
/багажник/кэш
/багажник/кэш/subdir1
/багажник/кэш/subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
Ответ 13
Bash oneliner для нескольких игнорирования:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
Ответ 14
Если ваш каталог проекта назван /Project, а ваш каталог кеша называется /Project/Cache, тогда вам нужно установить свойство subversion в /Project. Имя свойства должно быть "svn: ignore", а значение свойства должно быть "Cache".
Подробнее о свойствах см. в этой странице в руководстве Subversion.
Ответ 15
Ответ Джейсона сделает трюк. Однако вместо установки svn: ignore на "." в каталоге кэша вы можете включить "кеш" в родительский каталог svn: ignore, если каталог кэша не всегда присутствует. Я делаю это в нескольких "отброшенных" папках.
Ответ 16
"Спасибо" svn за такой отвратительный, фиктивный и трудный способ игнорировать файлы.
Итак, я написал script svn-ignore-all:
#!/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-ignore. Наверное, svn-ignore - все должно быть похоже на 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-checkout множеством случайных файлов. Когда это время для фиксации, я перемещаю эти файлы в "старый" подкаталог и говорю svn игнорировать "старый".
Ответ 17
СОХРАНИТЬ ДИРЕКТОРИИ, КОТОРЫЕ СВН БУДУТ ИГНОРИРОВАТЬ:
- это приведет к удалению файлов из репозитория, но сохраните каталог под управлением SVN:
svn delete --keep-local path/directory_to_keep/*
- затем установите для игнорирования каталога (и всего содержимого):
svn propset svn: ignore "*" path/directory_to_keep
Ответ 18
Если вы используете интерфейс SVN, например TortoiseSVN, или некоторую интеграцию IDE, в этом же меню должна быть опция игнорирования, как операция фиксации/добавления.
Ответ 19
Установите свойство svn: ignore . У большинства инструментов UI svn есть способ сделать это, а также обсуждение командной строки в ссылке.
Ответ 20
Поскольку вы используете Версии, это действительно очень просто:
- Просмотрите распечатанную копию
- Щелкните по каталогу, чтобы игнорировать
- В поле "Игнорировать" справа нажмите "Изменить"
- Введите *. *, чтобы игнорировать все файлы (или *.jpg только для файлов jpg и т.д.).
Ответ 21
Следите за своими косыми чертами тоже. Я обнаружил, что включение images/*
в мой файл настроек игнорирования не игнорирует ./images/
. Когда я бежал svn status -u
, он все еще показывал ? images
. Итак, я просто изменил параметр игнорирования на images
, без косых черт. Отправил проверку статуса и это очистило.
Ответ 22
Решено Eclipse следующим образом:
Прежде всего, выполните синхронизацию вашей папки с проектом:
команда → синхронизировать
В следующем представлении команды, вы можете увидеть все ресурсы, которые вы можете зафиксировать на сервере SVN.
Итак, выберите папку ресурсов ресурса, которую вы хотите игнорировать, а затем вы можете игнорировать ее с помощью
Команда - > добавить к svn:ignore
.
После этого в окне подтверждения выберите первый вариант: "игнорировать по имени".
Например, если я хочу игнорировать целевую папку и их ресурсы .class, я буду выполнять синхронизацию, и в представлении синхронизации я выберу целевую папку. После этого я выберу
Team- > добавить
до svn:ignore
, а затем я подтвержу первый вариант в окне подтверждения.
Ответ 23
Потеряв много времени, чтобы узнать, как сделать эту простую деятельность, я решил опубликовать ее, было не сложно найти достойное объяснение.
Сначала пусть структура образца
$svn st
? проект/багажник/цель
? проект/багажник/myfile.x
1 - сначала настройте редактор, в моем случае vim
экспорт SVN_EDITOR = vim
2 - "svn propedit svn: ignore project/trunk/" откроет новый файл, и вы можете добавить свои файлы и подкаталог в нашем случае "target" сохранить и закрыть файл и работать
$svn st
? проект/багажник/myfile.x
спасибо.