tfs迁移代码到git_从TFS迁移到Git

本文介绍了如何将现有的TFS存储库迁移到Git,包括使用gittf工具导出历史记录,清理不需要的TFS标签,以及调整提交者名称。通过这些步骤,您可以保留项目的历史记录并顺利过渡到Git工作流程。
摘要由CSDN通过智能技术生成

tfs迁移代码到git

您是否正在使用TFS,并想切换到像Git这样的分布式VCS? 那么,本文可能会有所帮助。 我Swift写下了将现有TFS存储库导出到Git所需的步骤和一些提示。

实际上,几年前,当我们在工作中切换到Git(与Gitlab一起使用)时,我实际上写了本文的注释。 尽管如此,我仍然时不时地将驻留在TFS上的旧项目迁移到Git上,并且鉴于Microsoft最近也在内部(至少对于他们的OSS项目)也迁移到了Git,所以本文可能是相关的:)。
我不想概述的是为什么我们进行切换的细节。 它与GitLab提供的更现代的基于Web的界面有关,该社区基本上与Git一起生活在GitHub上,并且可以进行简单,快速(和本地)分支和合并。

您可能感兴趣的其他与Git相关的帖子:

因此,在迁移时,您可以简单地复制文件并创建一个全新的Git存储库(使用git init )。 但这通常是您不想执行的操作。 特别是在大型项目中,您肯定要保留存储库历史记录。 因此,您需要正确导出TFS存储库。 这就是gittf发挥作用的地方。

Gittf项目

gittf是Codeplex上的一个项目,似乎由Microsoft本身(至少由Microsoft员工)驱动。

Git-TF是一组跨平台的命令行工具,可促进Microsoft Team Foundation Server,Visual Studio Online和Git之间的更改共享。 […]这些工具使从TFS克隆源,从TFS获取更新以及使用在Git中本地提交的更改更新TFS变得容易。

尽管人们认为可以在基于TFS的中央存储库中使用git,但我从未以这种方式使用过。 尝试了几次,但是这种“混合”情况的想法对我来说太可怕了。 该工具有用的地方是针对我们从TFS迁移到git的用例。

您可以按照gittf codeplex页面上的说明进行安装 ,也可以直接下载最新版本,解压缩所有内容并直接从该目录中执行命令。 只要确保您的系统满足最低要求,例如安装Java等即可。

出口

第一步是找到您的TFS服务器的url和项目的相应位置。 那应该不太困难。 只需在Visual Studio源代码管理资源管理器插件中查找即可。

注意:我从Git Bash测试了所有这些命令,这是Windows上的首选命令行,尤其是与Git交互时。

获得URL后,打开一个控制台,在其中可以访问git-tf并执行以下命令(显然是在调整位置):

$ git tf clone http://yourtfsserver:8080/tfs/colletionname $/TeamProjectA/Main --deep

您也可以在Codeplex文档上找到此命令。 注意,请记住包括–deep来提取整个版本历史记录。 否则,将仅获取最新的变更集,而在完全导出的情况下,您将不需要这些变更集。

打扫干净

git-tf为每个TFS变更集创建一个git标签。 这对于从Git内部跳转到特定的TFS提交可能很有用。 导出仓库时,通常不需要它们。 因此,要删除所有它们在本地git存储库中,请执行

$ git tag -l | xargs git tag -d

如果您不小心将它们推送到了远程Git存储库,那么此命令可能会有所帮助

$ git ls-remote --tags origin | awk '/^(.*)(\s+)(.*[0-9])$/ {print ":" $2}' | xargs git push origin

如果您已经碰巧有其他标签,则可以调整前面显示的命令以仅捕获TFS标签:

$ git ls-remote --tags origin | awk '/^(.*)(\s+)(.*TFS.*[0-9])$/ {print ":" $2}' | xargs git push origin

调整提交者名称

您可能会遇到的另一种情况是, 提交者名称在TFS上而不是在Git上不同 。 Git通常通过其配置的电子邮件地址来识别提交者,而TFS通常使用您的Windows身份。 结果,在Git存储库中,同一个人可能由两个不同的“提交者”代表。 通过TFS用户名(由于导入)和真正的git用户(用于在Git存储库上进行的新提交)。 当然...是关于化妆品的,但仍然...

幸运的是,在Google上进行的快速搜索将我带到了这个Stackoverflow帖子中 ,其中显示了filter-branch命令。

Git bash中,使用以下命令:

git filter-branch -f --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "<old TFS user>" ];
        then
                GIT_COMMITTER_NAME="<new name>";
                GIT_AUTHOR_NAME="<new name>";
                GIT_COMMITTER_EMAIL="<new - email>";
                GIT_AUTHOR_EMAIL="<new - email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

在Windows命令提示符下,使用以下命令:

git filter-branch -f --commit-filter "
        if [ "$GIT_COMMITTER_NAME" = "<old TFS user>" ];
        then
                GIT_COMMITTER_NAME="<new name>";
                GIT_AUTHOR_NAME="<new name>";
                GIT_COMMITTER_EMAIL="<new - email>";
                GIT_AUTHOR_EMAIL="<new - email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi" HEAD

结论

就是这样,使用这些命令,迁移非常容易。 导出和调整提交者名称可能只花费一些时间。 显然,这取决于导出的存储库的大小。

来自Microsoft的Alex Rukhlin的荣誉,在调试和解决gittf导出过程中遇到的一些讨厌的异常(和错误)方面提供了很大的帮助。 谢啦!

翻译自: https://www.javacodegeeks.com/2015/03/migrate-from-tfs-to-git.html

tfs迁移代码到git

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值