Как сохранить SVN от обновления каталога, уже находящегося в репозитории

Это не, я не думаю, стандартный вопрос svn ignore.

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

Что я делаю...

svn up
rm badDirectory

а затем будущий svn до его загрузки. Я хочу это предотвратить.

Спасибо!

edit: ОК. Я надеялся, что SVN имеет встроенный вариант, который я просто еще не заметил. Я надеялся избежать "взломать" недостатки подрывной деятельности, но варианты ниже выглядят как приемлемые альтернативы.

отредактируйте еще раз, чтобы задать пару комментариев:

Есть ли особая причина, по которой вы не может проверить эту папку и сохранить Это? нет дискового пространства (возможно, нет вы можете проверить его)? безопасность причина?

Я могу проверить папку. Весь репозиторий svn составляет около 291 мегабайт. 290 из них находится в этом "плохом" каталоге. В принципе, некоторые другие люди, которые контролируют репозиторий (и поэтому решаются, что там там), помещают туда каталог, который действительно не должен был быть там. Я не имел в виду, что это вопрос о политике и "правильных и правильных" способах использования svn. Мне просто интересно, есть ли техническое решение.

Можете ли вы дать лучшее описание древовидная структура репозитория? Существуют ли файлы на том же уровне, что и плохой каталог или только другие каталоги? -

Основная структура:

repository root
 - good dir 1
    - plenty of subdirs in all of these directories
 - good dir 2
 - good dir X
 - bad dir 1
 - bad dir 2
 - bad dir X 
 - good file 1
 - good file 2
 - good file X

Ответы

Ответ 1

Итак, я просто придумал, что я думаю о самом быстром ответе на вопрос. Поскольку SVN не имеет возможности для автоигнорированных каталогов, которые я не хочу обновлять...

Здесь моя существующая структура:

корень  - > goodDir 1  - > goodDir 2 и т.д.

Я удалил неправильные каталоги из своей проверки. Я не могу сделать "svn up" из корневого каталога, потому что он пытается перепроверить неправильные каталоги.

Но, следующая команда работает красиво:

  ls | xargs svn up

Короткий, сладкий, простой и запоминающийся.

Ответ 2

Я пошел с редким маршрутом проверки, подобным тому, что упомянул Стефан. Разница заключается в том, что я исключил целую директорию.

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

$ rm -rf unwanted-directory
$ svn checkout url/to/repo/unwanted-directory unwanted-directory --depth empty
$ cd root/of/my/tree
$ svn update
< - нежелательная директория не получена из репозитория

Для справки, у нас есть каталог 'prototype' в нашем дереве с кучей экспериментального кода. Поскольку я не работаю в этой области, я не заинтересован в том, чтобы иметь 1G источников в нескольких деревьях разработки.

Ответ 3

Вы можете сделать редкую проверку:

svn co url/to/repo mywc --depth=files

который даст вам wc с только файлами в нем, без подпапок. Теперь вы можете получить все нужные папки с помощью

svn up url/to/repo/subfolder1 --set-depth infinity 
svn up url/to/repo/subfolder2 --set-depth infinity 
svn up url/to/repo/subfolder3 --set-depth infinity 
...

Ответ 4

Вы можете использовать script для svn update --non-recursive текущий каталог, а затем индивидуально обновлять оставшиеся подкаталоги. С помощью bash script вы можете перебрать все подкаталоги и просто пропустить оскорбительный.

Что-то вроде этого:

#!/bin/bash

BADDIR="bad"
FILELIST="*"

svn update --non-recursive

for file in $FILELIST
do
if [ -d $file ]
then
   if [ $file != $BADDIR ] 
   then
     svn update $file
   fi
fi
done

Ответ 5

Если вы переименуете каталог .svn в плохую папку и затем запустите обновление, svn пропустит каталог и скажет, что он был удален, хотя он все еще там.

Вам нужно будет вернуть его, если вы хотите зафиксировать, по крайней мере, на верхнем уровне, который содержит плохой каталог.

Ответ 6

Обновить все текущие данные местоположения, кроме некорректного каталога:

svn up `svn ls | grep -v badDirectory`

Ответ 7

Вы можете указать --non-recursive или -N, чтобы подавить его от получения всех поддисков

и явно обновить те, которые вы хотите.

Небольшой пакетный файл упростит его выполнение

\ 0

Ответ 8

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

например

projet - non-essential folder 
       \ essential folder

и вам нужно будет только обновить (выгрузить) "основную папку", а остальные будут также необходимо обновить (выгрузить) "несущественную папку".

Ответ 9

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

Ответ 10

Решение Kirby чистое, за исключением того, что он не обновляет текущий каталог.

Если у вас есть такая структура:

root -
     |-subdir1
     |-subdir2
     |-fileA
     |-fileB

Решение Kirby не будет обновлять файлA, fileB и любые другие файлы, которые позднее добавляются в корневой каталог.

Вам нужно добавить "svn up -N". Вы можете сделать это с помощью псевдонима и точки с запятой:

alias myup='ls | args svn up; svn up -N'

(Этот синтаксис bash alias. Если вы используете другую оболочку, измените ее по необходимости)

Ответ 11

Используйте следующую команду

find -maxdepth 1 ! -name . ! -name .svn ! -name badDirectory -exec svn up {} \;

Храните все каталоги до тех пор, пока не найдете -exec! -name имя_каталога

find -maxdepth 1 ! -name . ! -name .svn ! -name badDirectory ! -name badDirectory2 ! -name badDirectory3 -exec svn up {} \;

Ответ 12

В то время, когда вы рассматриваете решение для конкретного поставщика, в TortoiseSVN вы можете достичь этого, выполнив процедуры, описанные в страница руководства, после перечисления внутри раздела "Checkout Depth".

Если вы проверите небольшую рабочую копию (то есть, выбрав что-то другое, кроме полностью рекурсивного для глубины проверки), вы можете получить дополнительные подпапки позже, используя браузер репозитория (раздел "Браузер репозитория" ) или диалог проверки изменений (раздел "Локальное и удаленное состояние" ).

В проводнике Windows щелкните правой кнопкой мыши по извлеченной папке, затем используйте TortoiseSVN → Repo-Browser, чтобы открыть браузер хранилища. Найдите подпапку, которую вы хотите добавить в свою рабочую копию, затем используйте контекстное меню → Обновить элемент до версии....

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

Ответ 13

Я вижу, что вопрос был задан довольно давно, но если вас все еще интересует, я наткнулся на хороший блог, в котором объясняются разные способы использования "svn: ignore"

Вот ссылка: http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/

Как поясняется в блоге, возможно, вы можете создать список "плохих папок" в файле и использовать "svn propset svn: ignore -R-F bad_folder_list_file"

Надеюсь, что это поможет!