Импорт Git/GitHub из SourceAnywhere

В настоящее время мы используем SourceAnywhere Hosted в качестве нашего сервера контроля версий. Я собираюсь перейти на GitHub и очень хотел бы сохранить нашу 8-летнюю историю.

Кто-нибудь еще успешно завершил эту миграцию и хочет поделиться своими инструментами / процессом?

Теперь, предполагая, что это не было сделано раньше, я полагаю, я смотрю на написание мерзавца fast-import сценарий с использованием SourceAnywhere SDK или клиента командной строки. Будучи новичком в git, есть ли какие-либо сценарии или ресурсы, на которые вы могли бы направить меня в качестве отправной точки?

3 ответа

Решение

Наконец-то я очистил свой проект и добавил его в GitHub. Вы можете найти его здесь: SAWHtoGit.

Он неплохо справляется с экспортом истории в логические наборы изменений с небольшими ограничениями:

  • Любой файл, который был удален в SourceAnywhere, вообще не будет импортирован в историю из-за ограничений в API SourceAnywhere.
  • Любые файлы, которые были "перемещены", могут быть импортированы, если вы предоставите отображение для старых / новых каталогов.

Помимо этого, он хорошо работал для наших целей, и мы смогли успешно перенести наш код и историю на GitHub. Надеюсь, это будет полезно и другим!

Импортная часть проста:
После того, как вы извлекли согласованный набор файлов из вашего первоначального репо, вы можете добавить его в репозиторий git, который будет обнаруживать любые изменения / добавления / удаления.

"Связный" = набор файлов, который представляет стабильное состояние, например, "который компилируется": эти моменты времени обычно представлены меткой, особенно в репозитории, работающем на уровне файлов, таком как SAW (в отличие от git, который работает на уровне репозитория, каждая ревизия представляет содержание полного репо)

Добавить набор файлов в git так же просто, как:

git --work-tree=/path/to/extracted/file --git-dir=/path/to/git/repo/.git add -A
git --work-tree=/path/to/extracted/file --git-dir=/path/to/git/repo/.git commit -m "new revision from SAW import"

Сложность состоит в том, чтобы определить, что импортировать.
Я бы порекомендовал перечислить все ярлыки и использовать их, чтобы получить все проекты, как в GetProject -label (используя SAW CLI)

Обратите внимание, что каждый проект должен быть в своем собственном репозитории Git: это позволит избежать большого раздутого репо, которое будет трудно клонировать, в отличие от централизованной модели с SAW, где вы можете поместить все свои проекты в одну референцию.


Dan комментирует:

Я смог использовать SourceAnywhere COM SDK, чтобы написать небольшую утилиту для извлечения моей истории (настолько, насколько позволяет SDK) и написать скрипт быстрого импорта для загрузки всего этого в git.
Хотя не все промежуточные изменения обязательно являются "связными", конечный результат соответствует нашему текущему состоянию, и мы сохранили основную часть нашей истории.

Вы можете посмотреть, как работают другие реализации git-over-XYZ. Например, вот код для git-svn, а вот код для git-cvsimport (оба на Perl).

Другие вопросы по тегам