Импортировать в один и тот же каталог репозитория Subversion несколько раз?

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

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

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

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


person Sören Kuklau    schedule 24.01.2009    source источник


Ответы (3)


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

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

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

person Stefan    schedule 24.01.2009

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

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

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

person John Fisher    schedule 24.01.2009

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

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

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

person Otto    schedule 24.01.2009