Как удалить файл/папку из репозитория SVN и добавить в список игнорирования

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

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

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

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

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

Ответ 1

Существует два способа с 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' .

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

EDIT: добавлено больше на основе комментария... dunno, как я пропустил эту часть оригинального вопроса!! Извините:)

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

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

  • Создайте запись глобального игнорирования или добавьте свойство svn: ignore в ваш репозиторий и зафиксируйте.
  • Для каждого файла, который вы хотите удалить из репозитория, выполните следующую команду: svn rm --keep-local filename
  • Как только вы выпустили команду svn rm для каждого файла, скопируйте свою рабочую копию.

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

Ответ 2

Я смог сделать это, используя инструмент TortoiseSVN. Они предоставляют графический интерфейс правой кнопкой мыши по имени: "Удалить и добавить в список игнорирования".

Ответ 4

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

например.

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

В любом случае просто мысль...

Ответ 5

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