Как сохранить 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"
Надеюсь, что это поможет!