Git到TFS源代码控制迁移。

16
我想看看TFS如何适用于我的指挥。因此,我想将我们当前的GIT存储库移动到TFS数据库中。我们使用GIT是因为它具有流行的分支支持,因此我想使用TFS 2010来解决这个问题。
现在的问题是,如何将我们的GIT Repo导出到TFS。显然这是某种脚本。是否有人完成了这项任务?有什么建议吗?
谢谢。

20
有人为什么要从Git转移到TFS? - hasen
15
两个词:更好的工具。我知道git有很多炒作,而且Torwalds先生亲自写了一大堆代码,但与这个东西交互很糟糕。我已经使用它19个月了,我向团队介绍过它,但我不认为它是万能药。所有的UI工具都很差。命令行界面很冗长。我有一套脚本来支持我的工作流程,但这不是一个我引以为傲的解决方案。此外,TFS不仅仅是源代码控制。它是一个复杂的解决方案:bug跟踪器、构建系统、VS集成、SP网站供非开发人员观看流程并提交错误等等。 - Artem Tikhomirov
Git扩展https://code.google.com/p/gitextensions/正在迅速使Artem的评论过时。比捆绑UI更好的用户界面。 - Tim Abell
2
如果我可以在Git、SVN和TFS之间进行选择,我的首选是:1. SVN,2. TFS,3. Git。 - hfrmobile
5个回答

11

微软现已推出他们自己的GIT <--> TFS扩展: GIT-TF

这使得可以从TFS拉取新的GIT存储库或配置以允许GIT向TFS进行推送,这正是你想要做的:

(来自文档)

对于一个正在使用现有Git repo的团队,使用Git-TF将变更共享到TFS的开发人员将使用以下工作流程。

# Configure the existing repo's relationship with TFS
git tf configure http://myserver:8080/tfs $/TeamProjectA/Main

# Fetch the latest changes from TFS and merge those 
# changes with the local changes.
# Note, merging is important when working in a team configuration. 
# See "Rebase vs. Merge" below.
git tf pull

git commit -a -m "merge commit"

# Check in the merge commit as a single TFS changeset
git tf checkin

# Push the merge commit to the origin
git push

此外,可以使用现有的开源GIT-TFS解决方案(仅限Windows,Microsoft的解决方案使用Java且跨平台),在Git到TFS 2008单向迁移(带有历史记录)的答案中有描述。


这个解决方案只适用于没有分支的情况。如果你有分支,更好的解决方案是使用TFS2013(Git)。 - Philippe

5
我创建了一个快速批处理文件,但您需要将Team Foundation Power Tools(tfpt.exe)添加到您的路径中,并使用“For”(一个命令行循环命令)。 将Visual Studio命令行导航到您想要的Git文件夹并运行以下命令。
git log --pretty="'%%H',%%ci - %%s" --reverse > commits

tf workspace temp /new /s:http://{TfsInstance} /i
tf workfold /map %2 . /workspace:temp

FOR /F "tokens=1* delims=','" %%a IN (commits) DO git checkout %%a && tfpt online /recursive /exclude:.git*,commits,*.obj,*.exe,_ReSharper*,obj,debug,*.user,*.suo,Bin /adds /deletes /i && tf checkin /author:"{AuthorName}" /comment:"%%b" /i

tf workspace temp /delete /i
  1. 首先创建一个提交文件,按照相反的顺序(最早的在前)包含所有提交信息。
  2. 然后创建一个Team Foundation工作区... (请确保用您的TFS URI替换{TtsInstance}).
  3. 接着在工作区中创建一个临时文件夹。
  4. 然后循环遍历提交文件中的每一行,从git中检出,使用TFPT检入当前文件(再次确保用您的作者名替换{AuthorName}),注释将包括来自git的时间戳(不幸的是,您无法更改检入时间而不更改TFS服务器的时间,我建议不要这样做)和原作者的姓名。

这个方法可以正常工作,但是分支将无法被保存。因为当时这不是重要的因素,所以我没有花时间去解决分支问题。

希望这可以为某些人节省一些时间!


我将 Thumbs.db 添加到了 tfpt 的排除列表中。我已经从 git 历史记录中删除了它,因为在我包含 .gitignore 文件之前,它是被意外添加的,并且在运行 .bat 文件时会收到错误提示。 - E-rich

2

安装SVNBridge到TFS,然后使用git-svn克隆。


2
这是 git svn update,但你说得对。我确实做了这件事。 - Artem Tikhomirov
我在Git文档中再也找不到git svn update命令了,但我发现了git svn dcommit,它会“将当前分支的每个差异直接提交到SVN存储库,然后重新基于或重置(取决于SVN和head之间是否存在差异)。这将为git中的每个提交在SVN中创建一个修订。”所以这两者是同一件事吗? - user456814

0

你可以尝试将Git导出到SVN,然后使用CS Converter从SVN转换到TFVS。注意 - CS Converter已经停止维护,但似乎仍然可以下载。


-1

并不是真正有用的,因为当使用TFS托管的GIT时,您无法像完全由TFS管理的项目那样获得全部可用的控件。 - Larry G. Wapnitsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接