Как сохранить SVN от обновления каталога уже в хранилище - PullRequest
13 голосов
/ 03 февраля 2009

Я думаю, это не стандартный вопрос игнорирования SVN.

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

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

svn up
rm badDirectory

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

Спасибо!

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

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

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

Я могу проверить папку. Весь репозиторий 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

Ответы [ 13 ]

18 голосов
/ 16 февраля 2011

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

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

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

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

10 голосов
/ 03 февраля 2009

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

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

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

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 голосов
/ 03 февраля 2009

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

Примерно так:

#!/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
3 голосов
/ 03 февраля 2009

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

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

1 голос
/ 13 июня 2013

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

svn up `svn ls | grep -v badDirectory`
0 голосов
/ 15 июля 2014

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

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

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

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

0 голосов
/ 10 ноября 2011

Принимая во внимание решение для конкретного поставщика, в TortoiseSVN вы можете достичь его, следуя процедурам, описанным на странице руководства , после перечисления внутри раздела «Глубина проверки».

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

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

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

0 голосов
/ 25 февраля 2011

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

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 {} \;
0 голосов
/ 25 марта 2009

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

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

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

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

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

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

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

0 голосов
/ 19 февраля 2009

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

Вот моя существующая структура dir:

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

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

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

  ls | xargs svn up

Коротко, мило, просто и легко запомнить.

...