Миграция SVN в git не переносит теги в DevOps
Я перенесу репозитории с собственного сервера subversion в git-репозиторий Azure DevOps. Для этого я использую следующие команды:
# Cloning
git svn clone --stdlayout --authors-file=autors.txt "http://www.subversion.com/svn/<repoName>" <repoName>
Set-Location <repoName>
# Creation of the repository using the REST APIs of DevOps by a .NET application
# Pushing
git remote add origin "https://organisation@dev.azure.com/organisation/repoName/_git/repoName";
git push -u origin --all;
git push origin --tags;
# Pushing each branch
[string[]]$svnBranches = svn ls "http://www.subversion.com/svn/<repoName>/branches/";
$svnBranches | ForEach-Object {
[string]$name = $_.TrimEnd("/");
Write-Host $name;
git checkout $name;
git push;
}
Проблема в том, что теги не отправляются в DevOps. Я искал везде и нашел git push origin --tags
но это не работает
Я создал обходной путь для веток, чтобы они оставались в хранилище DevOps, иначе они тоже будут удалены.
Этот обходной путь я не могу использовать для тегов, потому что git tag -l
не дает результатов и svn ls "http://www.subversion.com/svn/<repoName>/tags/"
эта ошибка:
svn: E170013:
Невозможно подключиться к хранилищу по URLhttp://www.subversion.com/svn/<repoName>/tags/
svn: E175003:
Сервер наhttp://www.subversion.com/svn/<repoName>/tags/
не поддерживает протокол HTTP/DAV
Что еще можно сделать, чтобы перенести теги в git-репозиторий Azure DevOps?
1 ответ
Полученный из этого поста, вот что мы используем (не используя DevOps, но работали на GitLab и GitHub):
git svn clone https://.......
# Create repo on hosting service
cd <the-repo.git>
git for-each-ref --format='%(refname)' refs/remotes/origin/tags | cut -d/ -f5 | while read ref; do
git tag -a "$ref" -m "$(git log --pretty=oneline refs/remotes/origin/tags/$ref | head -n1 | cut -d' ' -f2-)" "refs/remotes/origin/tags/$ref"
git update-ref -d "refs/remotes/origin/tags/$ref"
done
git remote add origin .............
git push origin 'refs/remotes/origin/*:refs/heads/*'
git push origin --tags
Я считаю, что для отправки данных в DevOps вам следует выполнить следующую команду:
git push -u --all --follow-tags origin
С помощью этой команды все должно быть отправлено в источник, включая теги.
Кстати, есть еще один инструмент, позволяющий переводить данные из SVN в Git, его имя - SubGit:
Это позволяет импортировать более сложные репозитории, возможно, это может быть полезно в том, что вы делаете.