Как игнорировать каталог с SVN?
Я только начал использовать SVN, и у меня есть каталог кэша, который мне не нужен под контролем источника. Как я могу игнорировать весь каталог / папку с SVN?
Я использую версии и текст. сообщ на OS X и командной строке.
23 ответов
установить svn:ignore
свойство родительского каталога:
svn propset svn:ignore dirname .
Если у вас есть несколько вещей, которые нужно игнорировать, разделите новыми строками в значении свойства. В этом случае проще редактировать значение свойства с помощью внешнего редактора:
svn propedit svn:ignore .
вот пример структуры каталогов:
\project
\source
\cache
\other
, когда в project
вы видите, что ваш каталог кэша не добавляется и отображается как таковой.
> svn st
M source
? cache
чтобы задать свойство ignore, выполните
в SVN репозиторием. в 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
список, когда я думал, что он просто проигнорирует их локально.
чтобы немного расширить, если вы делаете это с помощью инструмента командной строки 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 .
если вы используете GUI, для этого должна быть опция меню.
Спасибо за все взносы выше. Я просто хотел бы поделиться дополнительной информацией из моего опыта, игнорируя файлы.
когда папки уже находятся под контролем ревизии
после импорт svn и svn co файлы, что мы обычно делаем в первый раз.
весь кэш времени выполнения, папки вложений будут находиться под контролем версий. итак, до svn ps svn: игнорировать, нам нужно удалить его из репозитория.
С SVN версии 1.5 выше, мы можем использовать svn del --keep-local your_folder
,
но для более ранней версии, мое решение:
-
экспорт svn чистая копия ваших папок (без
.svn
скрытая папка) - СВН-дель - локальный и репозиторий,
- svn ci
- скопировать обратно папки
- Do svn st и подтвердите, что папки помечены как '?'
- теперь мы можем сделать svn ps согласно решения
когда нам нужно, чтобы более одной папки игнорировались
- в одном каталоге у меня есть две папки, которые нужно установить как
svn:ignore
- если мы установим один, другой будет удален.
- тогда мы удивляемся, что нам нужно svn pe
svn pe
нужно отредактируйте текстовый файл, и вы можете использовать эту команду, если необходимо, чтобы установить текстовый редактор с помощью vi:
export SVN_EDITOR=vi
- С помощью "o" вы можете открыть новую строку
- введите все имена папок, которые вы хотите игнорировать
- нажмите клавишу "esc", чтобы выйти из режима редактирования
- введите": wq " затем нажмите Enter сохранить и выйти
файл выглядит примерно так:
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 в TortoiseSVN, затем при фиксации у вас есть возможность щелкнуть правой кнопкой мыши элементы и выбрать "Добавить в список игнорирования".
команда игнорировать несколько записей немного сложнее и требует обратных косых черт.
svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
эта команда будет игнорировать все, что им cache
, tmp
, null
и and_so_on
в текущем каталоге.
У меня были проблемы с тем, чтобы игнорировать вложенные каталоги; верхний каталог, который я хотел игнорировать, не будет отображаться с "статусом svn", но все субдиры. Это, вероятно, самоочевидно для всех остальных, но я думал, что поделюсь этим:
пример:
/ trunk
/ trunk / cache
/ trunk/cache / subdir1
/ trunk/cache / subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
Bash oneliner для нескольких игнорирует:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
Если каталог проекта имеет имя / Project, а каталог кэша - /Project / Cache, то необходимо задать свойство subversion в /Project. Имя свойства должно быть "svn: ignore", а значение свойства - "Cache".
смотрите этой страница в руководстве подрывной дополнительные свойства.
ответ Джейсона сделает трюк. Однако вместо установки svn: ignore в "."в каталоге кэша вы можете включить "кэш" в родитель svn каталога:игнорировать свойство, если каталог кэша не всегда присутствует. Я делаю это на нескольких "одноразовых" папках.
"спасибо" 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-все должно быть похоже на 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 игнорировать "старый".
ЧТОБЫ СОХРАНИТЬ КАТАЛОГИ, КОТОРЫЕ SVN БУДЕТ ИГНОРИРОВАТЬ:
- это удалит файлы из репозитория, но сохранит каталог под контролем SVN:
svn delete --keep-локальный путь / directory_to_keep/*
- затем установите игнорировать каталог (и все содержимое):
в SVN репозиторием. в SVN:игнорировать "*" путь/directory_to_keep
Если вы используете интерфейс для SVN, как TortoiseSVN, или какую-то интеграцию IDE, также должна быть опция игнорировать в том же меню, что и операция фиксации/добавления.
установить svn: ignore свойства. Большинство инструментов UI svn имеют способ сделать это, а также обсуждение командной строки в ссылке.
поскольку вы используете версии это на самом деле очень просто:
- просмотр извлеченной копии
- щелкните каталог, чтобы игнорировать
- в поле "игнорировать" щелкните правой кнопкой мыши изменить
- тип *.* игнорировать все файлы (или *.jpg для файлов jpg и т. д.)
посмотреть ваш трейлинг тоже слеши. Я нашел, что в том числе images/*
в моем файле настроек игнорирования не игнорировал ./images/
. Когда я бежал svn status -u
но ? images
. Итак, я просто изменил параметр ignore на just images
, никаких косых черт. Проверил состояние, и все прояснилось.
потеряв много времени в поисках того, как сделать эту простую деятельность, я решил опубликовать, что нетрудно найти достойное объяснение.
сначала пусть структура образца
$ СВН ? проект / магистраль / цель ? проект / Транк / myfile.x1-сначала настройте редактор в mycase vim экспорт SVN_EDITOR=vim
2 - "svn propedit svn: ignore project/trunk/" откроет новый файл, и вы можете добавить свои файлы и подкаталоги в тип дела США "цель" сохранить и закрыть файл и работает
$ СВН ? проект / Транк / myfile.xспасибо.