【问题标题】:Remote TFS 2015 to Azure Devops (private cloud) Migration远程 TFS 2015 到 Azure Devops(私有云)迁移
【发布时间】:2019-08-26 12:29:50
【问题描述】:

我当前的组织需要将源代码 + 历史链接从位于远程站点的供应商 TFS 2015 迁移到我们的 Azure Devops(Repos)。我面临的挑战是,由于源 TFS 在远程站点中并且没有通过我们的 AD 连接,因此找不到链接它的方法。目前我们正在使用显式登录到他们的 tfs 并获取代码。是否有任何可能的方法来迁移相同的内容并每天进行同步,持续几个月并拔下对远程的依赖。

任何帮助将不胜感激..

【问题讨论】:

    标签: tfs azure-devops migration cloud azure-repos


    【解决方案1】:

    不确定您提到的 Azure DevOps(Repos) 是 Azure DevOps Service (prior VSTS) 还是 Azure DevOps Server 2019(prior TFS) 在您的情况下,您似乎只想在 TFS2015 与 Azure DevOps 服务之间执行源代码同步或 Azure DevOps 服务器。

    对于 Azure DevOps 服务:当您决定从 Azure DevOps 服务器迁移到 Azure DevOps 服务时,有many approaches 这样做,这在数据传输的保真度和流程的复杂性方面各不相同。

    • 选项 1:手动复制最重要的资产
    • 选项 2:高保真数据库迁移
    • 选项 3:使用基于 API 的公共工具进行更高保真度的迁移

    只有选项 2 会在迁移过程中包含源代码控制历史记录。但它也有一些限制,例如导入工具支持的版本。目前仅支持导入以下版本的 Azure DevOps Server: Azure DevOps Server 2019 和 Azure DevOps Server 2019.0.1

    在您的场景中,您可以使用 TFS2015 中的 CI 构建来自动同步 Azure DevOps 存储库。这里最大的挑战是 TFS 和 Azure DevOps 服务的身份验证。正如您提到的那样,使用显式登录和 powershell 脚本应该可以完成这项工作。

    供您参考的样本:

    1。在 TFS 2015 中创建 CI 构建

    在托管 git repo 的 TFS 2015 项目中 -> 使用 TFS 2015 git repo 作为存储库创建构建定义 -> 启用包含所有分支的 CI。

    2。添加 PowerShell 任务以将 TFS2015 git repo 同步到 Azure DevOps 服务在构建定义中使用以下脚本添加 PowerShell 任务:

    if ( $(git remote) -contains 'vsts' )
    {
        git remote rm vsts 2>&1|Write-Host
        echo 'VSTS Account removed'
    }
    
    
    git remote add vsts https://Personal%20Access%20Token:{PAT}@{account}.visualstudio.com/{project}/_git/{repo}
    
    git checkout ${env:BUILD_SOURCEBRANCHNAME} 2>&1|Write-Host
    git reset --hard origin/master 2>&1|Write-Host
    echo 'update local branch with remote successfully'
    git push  vsts ${env:BUILD_SOURCEBRANCHNAME} -f 2>&1|Write-Host
    

    注意: vsts 遥控器应添加凭据。它在 Azure DevOps Service git repo URL 中使用 PAT 进行身份验证。而你只需要替换URLhttps://Personal%20Access%20Token:{PAT}@marinaliu.visualstudio.com/{project}/_git/{repo}中真实的PAT、accountname、projectname和reponame即可。

    保存构建定义,现在当任何分支在 TFS 2015 git repo 中更新时,VSTS git repo 将自动同步到相应的分支。

    【讨论】:

    • 感谢帕特里克的意见。抱歉,它的 Azure Devops 服务,我们在私有云上。挑战在于,由于安全原因,我们无法建立相互信任的连接。所以现在我正在考虑使用显式登录将源代码从远程站点拉到本地构建服务器,并将下载的代码推送到 Azure 存储库,两者都使用 Azure 管道。虽然它有点间接且效率不高,并且需要更多的 powershell 脚本
    • 仁济,误会了。已更新我的回复。在您的情况下,您可以使用 TFS2015 中的 CI 构建来自动同步 Azure DevOps 存储库。但此操作不会在 TFS 中保留任何历史记录。这里最大的挑战是 TFS 和 Azure DevOps 服务的身份验证。正如您提到的那样,使用显式登录和 powershell 脚本应该可以完成这项工作。
    • 谢谢帕特里克。不幸的是,远程供应商 tfs 源位于 TFVC 而不是 git。有什么办法可以在相同的vc格式中进行一对一的映射。
    • @Renji 不幸的是,该功能在 TFVC 上不可用,但最新版本的 TFS 可以通过快速的一次性过程将带有历史记录的主分支导入 Git。从那里开始进行技术转换(相对而言)并不需要很多工作。一个技巧是在 TFS 端将您的主分支导入 Git,然后使用镜像指南将您的 repo 克隆到 VSTS,而无需将 onprem 服务器导入 VSTS。在这里看看这个类似的问题:stackoverflow.com/questions/48116442/…
    • @Renji 对于 TFS 2015,您可以使用一些 3rd-party 桥接器,例如 git-tfs。如果您不想隐蔽到 GIT 并继续在 TFVC 中工作。您可能已经使用客户端 API 创建工作空间并从 TFS 下载更改。复制并创建一个新工作区,然后建立与远程 VSTS 的映射。签入待处理的更改。这有点复杂,但也能做到这一点,并且通过谷歌在一些博客中有很好的记录。
    猜你喜欢
    • 2020-01-06
    • 2020-07-21
    • 2019-05-06
    • 2021-08-16
    • 1970-01-01
    • 2019-04-17
    • 2019-06-05
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多