[[r_git_tfs]]
==== TFS

(((TFS)))(((Importing, from TFS)))
如果你的团队正在将他们的源代码管理从 TFVC 转换为 Git，你们会想要最高程度的无损转换。
这意味着，虽然我们在之前的交互章节介绍了 git-tfs 与 git-tf 两种工具，但是我们在本部分只能介绍 git-tfs，因为 git-tfs 支持分支，而使用 git-tf 代价太大。

[NOTE]
====
这是一个单向转换。
这意味着 Git 仓库无法连接到原始的 TFVC 项目。
====

第一件事是映射用户名。
TFVC 对待变更集作者字段的内容相当宽容，但是 Git 需要人类可读的名字与邮箱地址。
可以通过 `tf` 命令行客户端来获取这个信息，像这样：

[source,powershell]
----
PS> tf history $/myproject -recursive > AUTHORS_TMP
----

这会将历史中的所有变更集抓取下来并放到 AUTHORS_TMP 文件中，然后我们将会将 `User` 列（第二个）取出来。
打开文件找到列开始与结束的字符并替换，在下面的命令行中，`cut` 命令的参数 `11-20` 就是我们找到的：

[source,powershell]
----
PS> cat AUTHORS_TMP | cut -b 11-20 | tail -n+3 | uniq | sort > AUTHORS
----

`cut` 命令只会保留每行中第 11 个到第 22 个字符。
`tail` 命令会跳过前两行，就是字段表头与 ASCII 风格的下划线。
所有这些的结果通过管道送到 `uniq` 来去除重复，然后保存到 `AUTOHRS` 文件中。
下一步是手动的；为了让 git-tfs 有效地使用这个文件，每一行必须是这种格式：

[source,text]
----
DOMAIN\username = User Name <email@address.com>
----

左边的部分是 TFVC 中的 “User” 字段，等号右边的部分是将被用作 Git 提交的用户名。

一旦有了这个文件，下一件事就是生成一个你需要的 TFVC 项目的完整克隆：

[source,powershell]
----
PS> git tfs clone --with-branches --authors=AUTHORS https://username.visualstudio.com/DefaultCollection $/project/Trunk project_git
----

接下来要从提交信息底部清理 `git-tfs-id` 区块。
下面的命令会完成这个任务：

[source,powershell]
----
PS> git filter-branch -f --msg-filter 'sed "s/^git-tfs-id:.*$//g"' -- --all
----

那会使用 Git 终端环境中的 `sed` 命令来将所有以 “git-tfs-id:” 开头的行替换为 Git 会忽略的空白。

全部完成后，你就已经准备好去增加一个新的远程仓库，推送你所有的分支上去，然后你的团队就可以开始用 Git 工作了。
