it-swarm.com.ru

Как мне игнорировать каталог с SVN?

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

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

745
Gilean

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

svn propset svn:ignore dirname .

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

svn propedit svn:ignore .
786
Jason Cohen

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

\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
404
craigb

Важно отметить:

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

svn add *

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

svn add --force .
130
binco

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

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

80
Kai

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

svn propedit svn:ignore path/to/dir

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

69
Greg

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

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

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

$ svn pe svn:ignore .

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

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

$ svn pg svn:ignore .

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

28
Frank Szczerba

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


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

После svn import и svn co файлов, что мы обычно делаем в первый раз.

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

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

  1. svn export чистая копия ваших папок (без скрытой папки .svn)
  2. svn del локальный и репозиторий,
  3. svn ci
  4. Скопируйте обратно папки
  5. Выполните svn st и подтвердите, что папки помечены как '?'
  6. Теперь мы можем сделать SVN PS в соответствии с решениями

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

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

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

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

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

runtime
cache
attachments
assets
20
Elliot Yap

Сначала удалите это ...

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

svn rm --keep-local foo

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

svn propset svn:ignore foo .
19
matt burns

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

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

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

12
DerMike

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

11
Michael Lang

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

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

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

6
James Stroud

У меня были проблемы с тем, чтобы игнорировать вложенные каталоги; верхний каталог, который я хотел игнорировать, не показывался бы с 'svn status', но все подкаталоги делали. Это, наверное, самоочевидно для всех остальных, но я решил поделиться этим:

ПРИМЕР:

/хобот

/ Багажник/кэш

/ Багажник/кэш/subdir1

/ Багажник/кэш/subdir2

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

"Спасибо" 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 игнорировать "старый".

4
Sam Watkins

Bash один вкладыш для нескольких игнорирует:

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

ДЕРЖАТЬ ДИРЕКТОРИИ, КОТОРЫЕ СВН БУДУТ ИГНОРИРОВАТЬ :

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

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

  1. затем установите, чтобы игнорировать каталог (и весь контент):

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

3
sheasie

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

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

3
The Digital Gabeg

Ответ Джейсона сделает свое дело. Однако вместо установки svn: ignore на "." в каталоге cache вы можете захотеть включить "cache" в свойство svn: ignore директории parent, если каталог кэша присутствует не всегда. Я делаю это на нескольких "одноразовых" папках.

3
harpo

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

2
Chris Marasti-Georg

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

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

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

1
Joe Skora

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

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

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

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

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

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

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

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

team-> добавить

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

1
Antonio Martin

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

1
cdmo

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

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

$ svn st? проект/ствол/цель? проект/багажник/myfile.x

1 - сначала настройте редактор, в mycase vim export SVN_EDITOR = vim

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

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

благодарю.

0
Bruno