我们在公司内部有一个TFS内部服务器,它包含在100多个项目中。我们走在边缘!因此,公司决定将所有项目转移到Visual Studio团队服务(VSTS)。不幸的是,如果我们要一个接一个地移动项目,那要花费很多时间。
我也尝试过Git-TF或Git-TFS,但它并不成功,令人沮丧。我每次都遇到一些错误,然后我放弃了。
有没有办法将所有项目一次性移动到VSTS或至少通过VSTS导入它们? (例如,我直接从VSTS导入Github项目。但现在我们有一台计算机作为公司内部的服务器而不是Github)
我感谢任何建议或帮助。
答案 0 :(得分:1)
如果你想进行高保真数据库迁移,你应该查看@ DenverDev的回复,他在那里提供了正确的链接。
如果您只想将完整的Git存储库从TFS迁移到VSTS,您可以尝试this blog中的步骤:
使用其中的所有内容克隆Git回购:git clone [tfs git url] --mirror
添加新的遥控器:git remote add vsts [vsts git url]
推送所有更改:git push vsts --mirror
答案 1 :(得分:1)
这是一个综合脚本,用于使用powershell和TFS api将所有git仓库的克隆自动复制到Azure DevOps项目。我要从TFS 2018开始:
# get all repositories
$TfsUrl = "http://tfs-server:8080/tfs/DefaultCollection/myProject/_apis/git/repositories?api-version=4.1"
$repos = Invoke-RestMethod -Uri $TfsUrl -Method Get -ContentType "application/json" -UseDefaultCredentials
# set the auth header from a PAT
$myPAT = "aaaaaabbbbbbbbbbbbcccccccccccdddddddd111111123"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("aaduser@domain.com:$myPAT")))
$headers = @{Authorization=("Basic $base64AuthInfo")}
# get Azure DevOps project id
$adoPURL = "https://dev.azure.com/myOrganization/_apis/projects?api-version=4.1"
$adoProjectId = ((Invoke-RestMethod -Uri $adoPURL -Method Get -ContentType "application/json" -Headers $headers).value | where {$_.name -eq "myADOProject"}).id
# loop through each TFS repository, clone it, and push it to your Azure DevOps project
foreach ($repo in $repos.value) {
Write-Host "cloning $($repo.name)"
# set to the root folder, and mirror clone the repo
Set-Location C:\clone_repo
git clone --mirror http://tfs-server:8080/tfs/DefaultCollection/myProject/_git/$($repo.name)
# create the new remote git repo in your Azure DevOps project
$json = '{"name":"' + $($repo.name) + '","project":{"id":"' + $adoProjectId + '"}}'
$vUrl = "https://dev.azure.com/myOrganization/_apis/git/repositories?api-version=4.1"
Invoke-RestMethod -Uri "$vUrl" -Body $json -ContentType "application/json" -Method POST -Headers $headers
# push the morrored repo to the remote
Set-Location "$($repo.name).git"
git remote set-url --push origin https://dev.azure.com/myOrganization/myADOProject/_git/$($repo.name)
git push --mirror
}
答案 2 :(得分:0)