如果你的团队正在将他们的源代码管理从 TFVC 转换为 Git,你们会想要最高程度的无损转换。 这意味着,虽然我们在之前的交互章节介绍了 git-tfs 与 git-tf 两种工具,但是我们在本部分只能介绍 git-tfs,因为 git-tfs 支持分支,而使用 git-tf 代价太大。
Note
|
这是一个单向转换。 这意味着 Git 仓库无法连接到原始的 TFVC 项目。 |
第一件事是映射用户名。
TFVC 对待变更集作者字段的内容相当宽容,但是 Git 需要人类可读的名字与邮箱地址。
可以通过 tf
命令行客户端来获取这个信息,像这样:
PS> tf history $/myproject -recursive > AUTHORS_TMP
这会将历史中的所有变更集抓取下来并放到 AUTHORS_TMP 文件中,然后我们将会将 User
列(第二个)取出来。
打开文件找到列开始与结束的字符并替换,在下面的命令行中,cut
命令的参数 11-20
就是我们找到的:
PS> cat AUTHORS_TMP | cut -b 11-20 | tail -n+3 | uniq | sort > AUTHORS
cut
命令只会保留每行中第 11 个到第 22 个字符。
tail
命令会跳过前两行,就是字段表头与 ASCII 风格的下划线。
所有这些的结果通过管道送到 uniq
来去除重复,然后保存到 AUTOHRS
文件中。
下一步是手动的;为了让 git-tfs 有效地使用这个文件,每一行必须是这种格式:
DOMAIN\username = User Name <[email protected]>
左边的部分是 TFVC 中的 “User” 字段,等号右边的部分是将被用作 Git 提交的用户名。
一旦有了这个文件,下一件事就是生成一个你需要的 TFVC 项目的完整克隆:
PS> git tfs clone --with-branches --authors=AUTHORS https://username.visualstudio.com/DefaultCollection $/project/Trunk project_git
接下来要从提交信息底部清理 git-tfs-id
区块。
下面的命令会完成这个任务:
PS> git filter-branch -f --msg-filter 'sed "s/^git-tfs-id:.*$//g"' -- --all
那会使用 Git 终端环境中的 sed
命令来将所有以 “git-tfs-id:” 开头的行替换为 Git 会忽略的空白。
全部完成后,你就已经准备好去增加一个新的远程仓库,推送你所有的分支上去,然后你的团队就可以开始用 Git 工作了。