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

StackOverflow https://stackoverflow.com/questions/476233

  •  20-08-2019
  •  | 
  •  

Вопрос

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

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

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

    Это было полезно?

    Решение

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

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

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

    Другие советы

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

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top