Импортировать в один и тот же каталог хранилища Subversion несколько раз? - PullRequest
0 голосов
/ 24 января 2009

По ряду причин канонический источник некоторых моих файлов не может быть рабочей копией хранилища (сервер Subversion находится за недоступным межсетевым экраном, а данные не существуют в файловой системе изначально в моя любимая структура). Итак, я написал инструмент, который загружает данные, генерирует из них структуру каталогов, а затем использует SharpSvn для импорта результатов в хранилище. Это работает ... в первый раз. Во второй раз, конечно, каталог с таким именем уже существует в репозитории, и я не могу импортировать снова.

Вместо этого я мог бы:

  1. Удалить каталог, , затем import. Я не проверял это, но кроме глупого звучания, он, вероятно, также удаляет историю изменений соответствующих файлов, считая новые совершенно другими.
  2. Проверьте, существует ли каталог, проверьте его, удаленно удалите файлы, которых больше нет в каноническом источнике, затем замените остаток и подтвердите. Это, вероятно, сработает, но звучит чревато ошибками и излишне сложно.

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

Ответы [ 3 ]

2 голосов
/ 24 января 2009

Для 1), он не удалит историю изменений, но новые файлы будут рассматриваться как полностью не связанные со старыми. Вы все еще можете вернуть старые файлы.

Для 2) это было бы рекомендованным способом. Но после 'svn delete' существующих файлов и добавления новых, вы также должны 'svn добавить' эти новые файлы перед фиксацией.

Но, похоже, вам стоит подумать об использовании скрипта svn-load-dirs.pl. Вы можете прочитать об этом в книге Subversion, глава " Ветви поставщика ".

0 голосов
/ 24 января 2009

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

(cd <newdirectory> ; tar -cf - * ) | tar -xf -

Разумеется, вам нужна система Unix-y. Он должен работать с Cygwin , если только Windows не делает что-то особенно странное с перезаписью папок на системном уровне.

0 голосов
/ 24 января 2009

Subversion имеет слабую связь с файлами. Для файлов внутри папки вы можете легко получить / обновить, внести значительные изменения (включая удаление, замену или добавление файлов), а затем зафиксировать различия. Такое поведение на уровне файлов типично для Subversion.

Каталоги немного отличаются. Subversion хранит информацию о хранилище на уровне папок. Таким образом, если вы создадите новую папку, она не будет автоматически подключаться к Subversion. (Используя что-то вроде TortoiseSvn, он позаботится о многом за вас.)

Если вы собираетесь добавлять и удалять каталоги во время процесса генерации, у вас будут некоторые проблемы, отличные от самих файлов. Но вы все равно можете достичь своей цели с помощью командной строки, SharpSvn, TortoiseSvn или других подобных инструментов.

...