Как удалить файл / папку из репозитория SVN и добавить в список игнорируемых - PullRequest
31 голосов
/ 06 января 2009

Для меня это звучит как вопрос о поиске в руководстве, но я не могу его найти. Предположим, у нас есть репозиторий с файлами и каталогами, который не должен находиться под контролем версий, а должен находиться в списке игнорирования (например, файлы Eclipse .settings, .project, сгенерированные файлы документации - вещи, которые никогда не должны были быть добавлено и совершено в первую очередь). Каков наилучший способ удаления этих файлов из хранилища и перемещения их прямо в список игнорирования?

Обновление: В принятом ответе ниже подробно описан хороший способ настройки локальных репозиториев Subversion, чтобы избежать проблемы, описанной выше. Однако, если вам все еще нужно решить эту проблему, кажется, что вам нужно выполнить ручное переключение, чтобы вывести файлы / папки из хранилища и в список игнорирования.

Например, для папки .settings сначала добавьте ее в глобальный список игнорируемых объектов, а затем выполните следующую команду:

$REMOVE=".settings"
cp -r "$REMOVE" /tmp/ && \
svn rm "$REMOVE" && \
svn commit -m "Moving to ignore list" "$REMOVE" && \ 
mv "/tmp/$REMOVE" .

Это копирует файл / папку во временную папку, а затем удаляет его из SVN и фиксирует удаление - в конце концов файл / папка копируется обратно, но, поскольку он теперь находится в списке игнорирования, он будет игнорироваться SVN.

Ответы [ 5 ]

30 голосов
/ 06 января 2009

Существует два способа использования subversion: один специфичен для пользователя, а другой фактически поддерживается в хранилище и поэтому влияет на всех.

Чтобы получить список глобально игнорируемых файлов (эксклюзивно для каждого пользователя / машины), вам необходимо отредактировать файл конфигурации Subversion и изменить директиву global-ignores в разделе разное, Файл конфигурации задокументирован, а синтаксис очень прост. Например:

global-ignores = *.o

В системе UNIX файл конфигурации находится по адресу ~/.subversion/config. В системе Windows файл конфигурации находится по адресу %APPDATA%\Subversion\config или в реестре под HKCU\Software\Tigris.org\Subversion\Config.

После того, как вы это настроите, вы никогда не будете случайно добавлять эти файлы в свой репозиторий, и при этом эти файлы не будут отображаться как ? в ваших командах svn stat. Если в вашем хранилище уже есть эти файлы, вероятно, не помешает оставить их там, как они есть, но изменения и модификации файлов будут игнорироваться в будущем.

Чтобы настроить это отдельно для каждого проекта (что повлияет на каждого, кто проверяет проект), вы должны добавить свойство svn: ignore в каталоги проекта, где файлы, вероятно, будут храниться. Например, чтобы исключить каталог с именем build из верхнего уровня вашего проекта, вы должны сделать что-то вроде этого:

svn propset svn:ignore 'build' .
svn commit -m 'project ignores build directory' .

Отныне каталог сборки в вашем проекте будет игнорироваться subversion. Подробнее об этом см. Документацию по http://subversion.tigris.org/ или введите команду svn help для получения дополнительной информации.

РЕДАКТИРОВАТЬ: Добавлено больше на основе комментариев ... не знаю, как я пропустил эту часть исходного вопроса! Извините:)

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

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

  1. Создайте запись global-ignores или добавьте свойство svn: ignore в свой репозиторий и выполните коммит.
  2. Для каждого файла, который вы хотите удалить из хранилища, введите следующую команду: svn rm --keep-local <strong>filename</strong>
  3. Как только вы введете команду svn rm для каждого файла, зафиксируйте свою рабочую копию.

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

6 голосов
/ 30 марта 2011

Мне удалось сделать это с помощью инструмента TortoiseSVN . Они предоставляют возможность щелчка правой кнопкой мыши в графическом интерфейсе с именем: «Удалить и добавить в список игнорируемых».

4 голосов
/ 06 января 2009
svn remove filename

Игнорирование:

svn propset svn:ignore filename|pattern

См. Также Как ... Заставить Subversion игнорировать файлы и папки .

0 голосов
/ 19 октября 2010

Спасибо за этот ответ именно то, что мне было нужно. Одна мысль о последнем сценарии, описанном выше, не лучше ли в вашем сценарии выполнить экспорт SVN вместо cp -R? Таким образом, вы получите чистые папки без каких-либо папок .svn.

например.

$REMOVE=".settings"
svn export "$REMOVE" /tmp/ && \
svn rm "$REMOVE" && \
svn commit -m "Moving to ignore list" "$REMOVE" && \ 
mv "/tmp/$REMOVE" .

Во всяком случае, просто мысль ...

0 голосов
/ 06 января 2009

Если вы хотите, чтобы они исчезли навсегда (или пока вы сами не добавите их обратно), вы svn rm, добавьте их в комманду и добавьте их к .svnignore.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...