Миграция с TFS
Версия TFS
Данный механизм миграции гарантировано работает с версией TFS 2012 года
Данный вид миграции осуществляется при помощи взаимодействия с GitFlic CLI, которая поставляется в одном архиве с GitFlic.
Предварительные условия
Перед осуществлением миграции необходимо убедиться в том что:
1. CLI запускается пользователем, который имеет права:
- на чтение базы данных TFS
- на запись статических директорий (
/var/gitflic/) и базы данных GitFlic
2. Подготовлена пустая база данных для переноса данных из TFS. Миграция осуществляется только на чистую базу данных.
3. Установлена утилита git tfs.
4. Подготовлен файл содержащий преобразование tfs пользователей в git пользователей в следующем виде:
{tfsServerName}\{tfsUserName} = {gitUserName} <{gitUserEmail}}>
Пример содержания файла:
WIN-SERVER\admin = admin <admin@test.local>
WIN-SERVER\user = user <user@test.local>
5. Для корректного переноса ветки рекомендуется для папок, соответствующих веткам, открыть «Source Control Explorer», а затем выбрать «Branching and Merging» -> «Convert to Branch».
Запуск GitFlic CLI
1. Распакуйте архив с ПО GitFlic в любую удобную директорию
unzip gitflic_4.6.0_free_onpremise.zip
2. Перейдите в директорию CLI внутри распакованного архива
cd /path/to/archive/cli
3. Сделайте скрипт gitflic-cli.sh исполняемым
chmod +x ./gitflic-cli.sh
4. Для запуска GitFlic CLI воспользуйтесь следующей командой, добавив в качестве опции путь до конфигурационного файла вашего инстанса GitFlic:
./gitflic-cli.sh /путь/до/application.properties
Осуществление миграции
Процесс миграции происходит в два этапа - экспорт и импорт. Такой подход позволяет осуществить миграцию на другой хост, в том числе с другой операционной системой.
Экспорт данных из TFS
Для выполнения экспорта данных из TFS необходимо выполнить следующую команду:
export-tfs \
--sql-server <Название сервера SQL> \
--sql-database <Имя коллекции в БД> \
--sql-username <Имя пользователя SQL> \
--sql-password <Пароль пользователя SQL> \
--tfs-base-url <BaseURL TFS коллекции> \
--tfs-username <Имя пользователя TFS> \
--tfs-password <Пароль пользователя TFS> \
--project-name <Имя TFS проекта> \
--owner-email <Email владельца коллекции> \
--authors-filepath <Путь к файлу с tfs-git преобразованием пользователей> \
--branches <Стратегия переноса веток (auto/all/none)>
| Параметры | Описание |
|---|---|
sql-server |
Название SQL сервера с базой данных |
sql-database |
Название базы данных, в которой лежит коллекция |
sql-username |
Имя пользователя для подключение к базе данных (с доступом к данным) |
sql-password |
Пароль пользователя для подключение к базе данных |
tfs-base-url |
URL для доступа к tfs коллекции |
tfs-username |
Имя пользователя для подключения к интерфейсу TFS (с правами на скачивание файлов) |
tfs-password |
Пароль пользователя для подключения к интерфейсу TFS |
project-name |
Название целевого проекта |
owner-email |
Email пользователя GitFlic, которому будет принадлежать компания (созданная на основе коллекции). Пользователь с таким email должен либо существовать в GitFlic, либо быть в файле по пути из опции authors-filepath |
authors-filepath |
Путь до файла с преобразованием tfs в git пользователей. К файлу должен быть доступ из папки, где запускается CLI. |
branches |
Стратегия управления ветвями: all (по умолчанию и рекомендовано для использования): управлять объединёнными наборами изменений и инициализировать все ветки во время клонирования. none - игнорировать ветви и объединять наборы изменений, извлекая только путь клона TFS. auto - управлять объединёнными наборами изменений и инициализировать объединённые ветки |
Пример команды
export-tfs \
--sql-server tfs.example \
--sql-database Tfs-test-collection \
--sql-username testname \
--sql-password testpassword \
--tfs-base-url https://tfs.example:8080/tfs/test-collection \
--tfs-username test \
--tfs-password test \
--project-name test-project \
--owner-email test@test.ru \
--authors-filepath C:\\test\\test\\authors.txt
--branches all
Результатом выполнения экспорта является архив gitflic-tfs-migration-{epoch-seconds}.zip, которая понадобится для дальнейшего импорта данных.
Импорт данных в GitFlic
Для выполнения импорта данных в GitFlic необходимо выполнить следующую команду:
tfs-import \
--archive-path <Путь к файлу с результатом экспорта> \
--owner-email <Email владельца коллекции>
| Параметры | Описание |
|---|---|
archive-path |
Путь к архиву с данными экспорта из TFS |
owner-email |
Email пользователя GitFlic, которому будет принадлежать компания (созданная на основе коллекции). Пользователь с таким email должен либо существовать в GitFlic, либо быть в файле по пути из опции authors-filepath |
Пример команды
tfs-import \
--archive-path ./gitflic-tfs-migration-700000000.zip \
--owner-email test@test.ru
Результат миграции
После осуществления миграции в базе данных GitFlic будут созданы:
- Пользователи, указанные в файле из опции
authors-filepath. Всем пользователям, которые будут мигрированы в GitFlic, будет установлен временный пароль. В директории, в которой находится GitFlic CLI, будет создан файлgenerated-password.txtсодержащий временные пароли. Сразу после авторизации по временному паролю, всем пользователем необходимо сменить пароль на постоянный. - Компания, соответствующая коллекции с владельцем, email которого указан в опции
owner-email. - Проект в компании с git репозиторием и проблемами, соответствующими рабочим элементам (work items). Файлы из рабочих элементов прикрепляются к проблемам. В описание проблемы будет добавлена информация о названии области рабочего элемента (area) и список ссылок на связанные коммиты (change sets). Проблемы будут созданы в статусах, на основании статусов рабочих элементов.
Отношение статусов TFS и GitFlic
| Статус в TFS | Статус в GitFlic |
|---|---|
| New | Новая |
| To Do | Новая |
| Design | Новая |
| In Progress | В работе |
| Approved | В работе |
| Committed | В работе |
| Active | В работе |
| Closed | Отменена |
| Removed | Отменена |
| Ready | Завершена |
| Done | Завершена |
Возможные ошибки
- При возникновении ошибки, связанной с устаревшим TLS соединением необходимо в настройках
java.securityубрать заперт на использованиеTLSv1,TLSv1.1.