Подтвердить что ты не робот

В SVN, как мне копировать только подкаталоги каталога в другой каталог?

Через командную строку я обычно делаю это:

cp -rRp /path/to/a\_folder/. /path/to/another\_folder

Это копирует только содержимое под a_folder в another_folder. В SVN мне нужно сделать то же самое, но не могу понять. Я всегда получаю следующее:

/path/to/another\_folder/a\_folder

SVN срабатывает даже при попытке:

svn copy file:///path/to/a\_folder/* file:///path/to/another\_folder

Он говорит, что не существует.

EDIT:

Это, вероятно, поможет. Структура каталогов для моего проекта выглядит так:

my_project
  /branches
  /tags
  /trunk
  /vendor
    /1.1

Мне нужно получить содержимое 1.1 под поставщиком в багажник без фактического копирования папки 1.1.

4b9b3361

Ответ 1

Считаете ли вы использование svn merge?

Для такого репо:

trunk/a_folder/foo
trunk/a_folder/bar
trunk/new_folder/baz

используйте эти команды для объединения каталогов foo и bar:

cd trunk/new_folder
svn merge -r1:HEAD http://svn/repo/trunk/a_folder .

Ответ 2

Как вы, конечно же, обнаружили, копирование в целевой каталог, который уже существует, не будет работать:

svn cp svn://my_project/vendor/1.1 svn://my_project/trunk

потому что соединительная линия уже существует, поэтому вы получите:

svn://my_project/trunk/1.1

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

svn co svn://my_project/trunk trunk-wc
svn merge svn://my_project/trunk svn://my_project/vendor/1.1 trunk-wc

Лучший способ прочитать это слияние: сначала определите изменения, необходимые для того, чтобы сделать trunk идентичным vendor/1.1, а затем применить эти изменения к данной рабочей копии (также в случае сундука).

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

svn co svn://my_project/trunk trunk-wc
svn merge svn://my_project/vendor/1.0 svn://my_prjoect/vendor/1.1 trunk-wc

Если соединительная линия существует, но пуста, у вас есть два варианта: заменить соединительную линию или написать небольшой цикл оболочки:

Замена соединительной линии выглядит следующим образом:

svn rm svn://my_project/trunk
svn cp svn://my_project/vendor/1.1 svn://my_project/trunk

Использование оболочки (bash):

svn co svn://my_project/trunk trunk
svn co svn://my_project/vendor/1.1 1.1
( cd 1.1
  for x in * ; do
    svn cp $x ../trunk
  done 
)
svn ci trunk

Ответ 3

Эта ссылка объясняет обходной путь.

http://svn.haxx.se/users/archive-2004-12/1537.shtml

В основном это говорит о том, что если папка-получатель не существует в репо, вы получите настройки исходной папки в папке назначения.

См. ниже пример. Папка 07-03-2012 не существует в вашем репо. После выполнения команды ниже вы получите содержимое папки HEAD в 07-03-2012.

svn cp <URL>/HEAD/ <URL>/branches/07-03-2012 -m "test"

Ответ 4

Я думаю, что вы хотите, чтобы содержимое соединительной линии попало в папку /tags/version-1.0/, не имея там дополнительной папки /trunk. т.е. это плохо: /tags/version-1.0/trunk/stuff. Это хорошо: /tags/version-1.0/stuff.

Чтобы получить это, я делаю двухэтапный процесс:

svn copy http://localhost/MyProject/trunk    http://localhost/MyProject/tags/

# now I have /MyProject/tags/trunk

svn rename http://localhost/MyProject/tags/trunk  http://localhost/MyProject/tags/version-1.0

Ответ 5

Ты очень, очень близко:

svn copy -m"Copy Directory" file:///path/to/a_folder file:///path/to/another_folder

просто отпустите /* из первого аргумента.