【问题标题】:Git to TFS Source Control MigrationGit 到 TFS 源代码控制迁移
【发布时间】:2009-12-31 00:13:55
【问题描述】:

我想看看 TFS 如何为我的命令工作。所以我想将我们当前的 GIT 存储库移动到 TFS 数据库。我们已经使用 GIT 来支持它流行的分支,所以我想使用 TFS 2010 来解决这个问题。

现在的问题是。如何将我们的 GIT 存储库导出到 TFS。显然这是某种脚本。有没有人这样做过?有什么建议吗?

谢谢。

【问题讨论】:

  • 为什么会有人从 git 迁移到 tfs?
  • 两个字:更好的工具。我知道 git 有很多炒作。 Torwalds 先生自己写了一批,但与这个东西互动很糟糕。我已经使用它 19 个月了,我已经将它介绍给团队,我不认为它是灵丹妙药。所有的 UI 工具都是蹩脚的。命令行界面很冗长。我有一套脚本来支持我的工作流程,但这不是我引以为豪的解决方案。此外,TFS 不仅仅是源代码控制。这是一个复杂的解决方案:错误跟踪器、构建系统、VS 集成、非开发人员观看过程和提交错误的 SP 站点等。
  • Git 扩展 code.google.com/p/gitextensions 正在迅速使 Artem 的评论过时。比捆绑的 UI 更好的 UI。
  • 如果我可以在 Git、SVN 和 TFS 之间进行选择,我的偏好是:1. SVN、2. TFS、3. Git

标签: git version-control tfs tfs-migration


【解决方案1】:

微软现在已经发布了他们自己的 GIT GIT 的 TFS 扩展:GIT-TF

这允许从 TFS 拉取新的 GIT 存储库或配置为允许 GIT 到 TFS 推送,这是您想要做的:

(来自文档)

对于使用现有 Git 存储库的团队,开发人员共享 使用 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 to TFS 2008 one way migration (with history) 的回答中进行了描述

【讨论】:

  • 这个解决方案只能在没有分支的情况下工作。如果你有分支,更好的解决方案是使用 TFS2013(Git)
【解决方案2】:

我创建了一个快速批处理文件,但您的路径中需要有 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 工作区...(请务必将 {TtsInstance} 替换为您的 TFS URI。
  3. 然后它会在工作区中创建一个临时文件夹。
  4. 然后它遍历提交文件中的每一行,从 git 签出,使用 TFPT 签入当前文件(再次确保将 {AuthorName} 替换为您的作者姓名)注释将包括来自 git 的时间戳(不幸的是,如果不更改 TFS 服务器的时间,您就无法更改签入时间,我建议不要这样做)和原作者的姓名。

这工作正常,但不会保留分支。我没有花时间弄清楚分支,因为当时它对于这项工作来说还不够大。

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

【讨论】:

  • 我将 Thumbs.db 添加到 tfpt 排除列表。我从 git 历史记录中删除了它,因为它是在我包含 .gitignore 文件之前意外添加的,并且在我运行 .bat 文件时收到错误。
【解决方案3】:

设置一个SVNBridge 到 TFS,然后使用 git-svn 克隆。

【讨论】:

  • 这是 git svn update 但你是对的。我已经完成了这件事。
  • 我在Git docs 中看不到命令​​git svn update,尽管我确实找到了git svn dcommit,其中“将当前分支的每个差异提交[s] 直接到SVN 存储库,然后 rebase[s] 或 reset[s] (取决于 SVN 和 head 之间是否存在差异)。这将为 git 中的每个提交在 SVN 中创建一个修订。那么如果这应该是同一件事呢?
【解决方案4】:

您可以将 git 导出到 svn,并使用 CS Converter 从 svn 转到 TFVS。注意 - CS Converter 已停产,但看起来您仍然可以下载它。

【讨论】:

    【解决方案5】:

    这是一个老问题了,也许没有人再找这个了,但现在容易多了。

    1. 使用 Git 作为源代码控制在 TFS 中创建团队项目

    2. 获取项目的 Git url。它看起来像...... https://YOURPROJECTS.visualstudio.com/DefaultCollection/_git/PROJECTNAME

    3. 进入命令喜欢并执行。

      git 远程添加源https://YOURPROJECTS.visualstudio.com/DefaultCollection/_git/PROJECTNAME

      git push -u origin --all

    应该是你所需要的。

    【讨论】:

    • 没有真正的帮助,因为在使用 TFS 托管的 GIT 时,您无法像使用完整的 TFS 托管项目那样获得完整的控制。跨度>
    猜你喜欢
    • 2016-12-13
    • 2014-11-05
    • 2011-02-21
    • 2019-08-11
    • 2016-04-20
    • 1970-01-01
    • 2016-04-13
    • 2012-01-20
    • 2019-05-22
    相关资源
    最近更新 更多