Кто-нибудь знает простой способ импортировать устаревший проект, чья «система контроля версий» представляет собой серию датированных папок, в SVN, чтобы сохранить историю изменений?
Унаследованный мною проект не находился под контролем версий, и в нем есть сотни папок, каждая из которых датирована следующим образом: 2006-11-26, 2006-11-27 и т. д. К счастью, похоже, что они проделали довольно хорошую работу по созданию папки, даже когда (неделями) ничего не менялось.
Мне бы очень понравился сценарий / инструмент, который создаст новый репозиторий с самой старой папкой, а затем последовательно и автоматически применяет все команды подрывной деятельности для преобразования каждой последующей папки в новую ревизию.
Я надеюсь, что в этом есть смысл. Старый скриптер оболочки во мне склонен попытаться разобраться с этим сам, но а) я уверен, что это больше работы, чем я изначально мог себе представить, б) это не лучшее использование моего времени (я не эксперт в написание сценариев оболочки) и c) Держу пари, что кто-то уже это сделал.
Дополнительная заслуга: пусть скрипт / инструмент также изменит свойства отметки времени на основе имен папок, чтобы история в Subversion была ближе к реальности.
Я надеюсь, что все имеет смысл.
Большое спасибо за любую помощь.
P.S. Я бы предпочел сделать все это под Linux, но если есть (ах!) Решение для Windows, нищие не могут выбирать, не так ли?
Я думаю, что решение сценария оболочки не было бы слишком сложным. Что-то вроде этого:
for d in 200*
do
cp -a $d/* svndir/
cd svndir
svn add *
svn commit
cd ..
done
Я знаю довольно наивный код, но я думаю, что что-то вроде этого подойдет (при условии, что репозиторий уже зарегистрирован в svndir). Предположительно, есть аргумент для svn commit, который пропускает требование вводить комментарии, иначе это было бы довольно утомительно.
cp -a сохранит временные метки, но, конечно, история svn покажет все, что было совершено в текущую дату. Возможно, вы могли бы использовать команду 'date', чтобы фактически устанавливать дату сервера в соответствии с именем каталога (значение $ d) каждый раз, когда вы копируете и фиксируете. Однако это может быть немного преувеличением.
Это не приведет к удалению удаленных файлов.
Спасибо всем. У меня есть каталоги, которые приходят и уходят, и я хотел бы удалить их по мере необходимости. Что касается сохранения метки времени, я подумал, что это можно использовать: (прокрутите вниз до красного кружка): svnbook.red-bean.com/en/1.5/svn-book.html#svn.tour.revs.date s
Для этого варианта использования был создан load-dirs.pl, он берет ваши каталоги и импортирует их в Subversion, а также может поддерживать историю версий для переименований и удалений. Хорошая документация доступна в репозитории Subversion (ссылка выше)
Большое спасибо, я его закружу. Цените помощь.
Вы можете передать --message "Commit version from $ d" --non-interactive to svn commit. Это добавляет сообщение о фиксации и предотвращает любые интерактивные вопросы.