Я только начал использовать SVN, и у меня есть каталог кеша, который мне не нужен под контролем исходного кода. Как я могу игнорировать весь каталог / папку с SVN?
Я только начал использовать SVN, и у меня есть каталог кеша, который мне не нужен под контролем исходного кода. Как я могу игнорировать весь каталог / папку с SVN?
Ответы:
Установите svn:ignoreсвойство родительского каталога:
svn propset svn:ignore dirname .
Если вам нужно игнорировать несколько вещей, разделите их символами новой строки в значении свойства. В этом случае проще изменить значение свойства с помощью внешнего редактора:
svn propedit svn:ignore .
svn rm --keep-local dirnameпервый. (Мой вывод статистики SVN был огромным, и я некоторое время врезался в это.)
svn propset svn:ignore -F file.txt .
svn:ignoreа не svn::ignoreкак я. Вы можете установить произвольные свойства, так что последнее будет установлено ОК, и вы сможете просматривать и редактировать свойство, но это не заставит SVN игнорировать список файлов, которые вы перечисляете.
Вот пример структуры каталогов:
\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
dirname. Например, при вводе svn propset svn:ignore dirname, если вы разрешите оболочке (bash) заполнить для вас dirname, он добавит этот косой черты, оставив вас с командой svn propset svn:ignore dirname/, которая не приведет к игнорированию папки. По крайней мере, это был мой опыт.
Важно отметить:
В командной строке вы не можете использовать
svn add *
Это также добавит игнорируемые файлы, потому что командная строка расширяется *и, следовательно, svn addсчитает, что вы хотите, чтобы все файлы были добавлены. Поэтому используйте это вместо:
svn add --force .
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 .
Если вы используете графический интерфейс, для этого должна быть опция меню.
svn ps svn:ignore . 'cachedir'результаты в cachedir is not under version control. менялся svn ps svn:ignore 'cachedir' .на работу
Спасибо за все вклады выше. Я просто хотел бы поделиться дополнительной информацией из моего опыта, игнорируя файлы.
Когда папки уже находятся под контролем версий
После svn import и svn co файлов, что мы обычно делаем в первый раз.
Весь кэш времени выполнения, папки вложений будут находиться под контролем версий. Итак, перед тем, как svn ps svn: ignore , нам нужно удалить его из хранилища.
С SVN версии 1.5 выше мы можем использовать svn del --keep-local your_folder, но для более ранней версии мое решение:
.svnскрытой папки)Когда нам нужно игнорировать более одной папки
svn:ignoresvn peвам нужно будет отредактировать текстовый файл, и вы можете использовать эту команду, если требуется, чтобы настроить ваш текстовый редактор с помощью vi :
export SVN_EDITOR=vi
Файл выглядит примерно так:
runtime
cache
attachments
assets
svn propset svn:ignore -F .ignorethesefiles ., который будет использовать содержимое файла. Мне нравится держать это, чтобы вы знали, что игнорируется. Редактирование требует последующей установки.
Если ваш каталог 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 propset svn:ignore -F .ignorethesefiles .позволит вам использовать файл. И, как уже упоминалось, у вас всегда есть propedit.
У меня были проблемы с тем, чтобы игнорировать вложенные каталоги; верхний каталог, который я хотел игнорировать, не показывался бы с 'svn status', но все подкаталоги делали. Это, наверное, очевидно для всех остальных, но я подумала, что поделюсь этим:
ПРИМЕР:
/хобот
/ Багажник / кэш
/ Багажник / кэш / subdir1
/ Багажник / кэш / subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
"Спасибо" svn за такой отвратительный, поддельный и трудный способ игнорировать файлы.
Поэтому я написал скрипт 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-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 delete --keep-local path / directory_to_keep / *
svn propset svn: игнорировать "*" путь / directory_to_keep
Если вы используете внешний интерфейс для SVN, такой как TortoiseSVN, или какая-то интеграция с IDE, в том же меню должна быть опция игнорирования, аналогичная операции фиксации / добавления.
Следите за своими косыми чертами. Я обнаружил, что в том числе images/*в моем файле настроек игнорирования не игнорировать ./images/. Когда я побежал, svn status -uон все еще показал ? images. Итак, я просто изменил настройку игнорирования на просто images, без косых черт. Запустил проверку статуса, и это очистило его.
Решено с Eclipse следующим образом:
Прежде всего, сделайте синхронизацию вашей папки с проектом:
команда -> синхронизировать
В следующем представлении, командном представлении, вы можете увидеть все ресурсы, которые вы можете зафиксировать на сервере SVN.
Итак, выберите папку ресурса, который вы хотите игнорировать, и затем вы можете игнорировать его, используя
команда -> добавить в
svn:ignore.
После этого в окне подтверждения выберите первый вариант: «игнорировать по имени».
Например, если я хочу игнорировать целевую папку и их ресурсы .class, я выполню синхронизацию, и в представлении синхронизации я выберу целевую папку. После этого я выберу
Team-> Добавить
до 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
Спасибо.