如何在 TFS 中使用 Git

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 TFS 中使用 Git相关的知识,希望对你有一定的参考价值。

1. 下载 Visual Studio 扩展
  没有安装扩展之前,团队资源管理器中只显示 TFS。

  选择 “工具” -> “扩展更新”,进入如下界面。
在输入框中输入“git”

  安装完成后,重启 Visual Studio,会发现团队资源管理器界面多了 Git 的栏目。

  2. 新建项目
  选择控制台应用程序,同时勾选 “添加到源代码管理”。

  第一次进入项目的时候,会请你选择想要的源代码管理系统,这里我们选择 “Git”。

  当选择完源代码管理系统后,Visual Studio 会对 Git 进行初始设置。
该项目的 Repository 已经创建成功

  这时候,我们查看解决方案资源管理器,可以看到在每个项目前都多了个源代码控制的状态图标。
“+” 代表该文件是新添加的

  右键单击每一项,会发现在上下文菜单中多了三个新东东: Undo、View History、Commit。这些是源代码控制的快捷菜单。

  3. 配置 Git 源代码管理工具
  打开 “团队资源管理器”,显示如下:
“提示安装第三方命令行工具”,目前用不到,暂时忽略

  点击 “Changes”

  此时团队资源管理器会切换到 “Changes” 界面,该界面会列出所有本次修改过的代码。

  在我们正式签入代码之前,还需要对 Git 进行一次配置,否则 “Commit” 按键将一直显示灰色,无法点击。
  点击 “Config” 就可以进入到配置界面,在此输入用户名、邮箱,用以在源代码管理器的历史记录中显示某次签入的人员信息。填写完毕后,点击 “Update”。

  用户名、邮箱并不作为登录TFS的凭据,只是用于标识某次签入人的代号,可以任意填写。上述配置可以在后期进行修改。

  4. 项目签入
  再回到 “Changes” 界面, 填写本次签入的描述信息后点击 “Commit” 进行签入。

  我们还未连接过任何源代码托管服务器,所以现在的 “签入” 只是签入到本地代码库中。因此你会发现签入的速度极快,签入成功后,显示如下信息。
Commit XXX created locally. Sync to share your changes with the server.

  点击 “Commit 77a04762”,查看本次签入的详细情况。

  回到解决方案资源管理器,会发现原先的 “+” 号变成了一把小锁,这表示该文件已经签入成功了。

  5. 修改代码
  修改Program.cs中的代码,会发现小锁变成了一个 “勾子”,这表示该文件已经在本地进行了修改。

  右键单击解决方案资源管理器中的 “Program.cs” ,选择 “Source Control” -> “Compare with Umodified” 比较一下当前版本和上一个版本的区别。
选择 “Compare with Umodified”

“比较” 面板

  签入本次改动后,查看历史记录。
“历史记录” 面板

  截止目前为止,我们对代码的版本管理操作都只是基于本地的代码库,并没有连接到网络上的服务器。这对于个人开发者来说是个绝妙的事情。

  6. 同步到云端的 TFS 服务器
  6.1 使用 Visual Studio Online 建立服务器[6]
  对于小于5个人的小型开发团队而言,可以使用 Visual Studio Online 来免费维护自己的代码。

  在浏览器中输入 “https://app.vssps.visualstudio.com/” 连接到 Visual Studio Online,一个微软账户只能创建一个 Visual Studio Online 账户。

  创建一个代码库,选择将使用的源代码管理工具。
创建新代码库

创建成功

  点击左上角的 “Code” 选项,进入 “Code” 页面。第一次进入该页面,会提示如何连接到此代码库。复制代码库地址。

  6.2 代码同步到新创建的代码库中
  回到 Visual Studio, 选择 “Unsynced Commits”,将上面复制的地址粘贴到对就的位置。
Unsynced Commits 界面

将地址粘贴到输入框

  点击 “Publish”,便开始将本地代码库中的数据同步到服务器。
点击 “Publish”

提成成功

  7. 在服务器端查看代码
  当数据同步成功后,我们可以进入服务器查看代码状态。

  还是进入 “Code” 页面,此时已经能正常看到刚才提交过的代码了。

  查看历史记录,可以看到所有本地的历史版本都已经被正确同步到了服务器端。

  上面,我只是演示了如何将新建的项目添加到云端的TFS。你完全可以将已有的项目添加到源代码管理控制系统
参考技术A 1,首先找一个代码托管网址,像gitcafe,注册一个用户名yourname。 2,在gitcafe上新建一个空的项目,写好名称,比如Clang。 3,在本地安装好git,linux上的话很简单,基本上默认安装了。win上面推荐用cygwin模拟linux环境

使用 git-tfs 迁移 TFS 到 Git:迁移后如何完全断开 Git 与 TFS 的连接?

【中文标题】使用 git-tfs 迁移 TFS 到 Git:迁移后如何完全断开 Git 与 TFS 的连接?【英文标题】:TFS to Git migration with git-tfs: how to completely disconnect Git from TFS after migration? 【发布时间】:2021-06-09 17:33:15 【问题描述】:

我成功克隆了一个 TFS 存储库,但 git log 仍然显示 HEAD 指向 master 和 tfs/default,如下所示:

(HEAD -> master, tfs/default)

我已经尝试了 filter-branch 命令,并从configfile 中删除了[tfs][git-tfs] 部分并运行以下命令:

git reflog expire --all
git gc --aggressive --prune
git tfs cleanup
git tfs cleanup-workspace

但它仍然存在。唯一可行的方法是删除.git 文件夹,然后运行git init,但这当然会丢失所有历史记录。我还检查了git config --list --show-all,但那里没有远程 TFS 存储库。

问题是否可以在使用 git-tfs 后完全断开 TFS 与 git 存储库的连接而不会丢失历史记录,如果可以,如何操作?


编辑接受的答案有效且具有启发性,但请参阅this answer on SuperUser,了解我理解的“更安全”的方法。

【问题讨论】:

没有“TFS”存储库之类的东西。你说的是 TFVC 吗? 【参考方案1】:

是否可以在使用 git-tfs 后完全断开 TFS 与 git repo 的连接而不会丢失历史记录

您的 git 存储库未“连接”到 TFS 服务器。它只包含一些允许 git-tfs 能够与 TFVC 源代码控制交互的数据。

您看到的tfs/default 是一个伪 git 远程分支,用于跟踪检索到的最后一个变更集。

如果是,怎么做?

因为它是作为 git remote 存储的,所以更容易删除文件:

.git/refs/remotes/tfs/default

注意:如果找不到这个文件,这是因为 ref 有可能被打包在文件.git/packed-refs 中。如果有,删除refs/remotes/tfs/default对应的行

【讨论】:

它在打包的参考文献中,但里面有 5 行:refs/heads/master, refs/notes/commits, refs/original/refs/heads/master, refs/original/refs/remotes/tfs/default, refs/remotes/tfs/default。您能否在答案中指定我应该删除哪些而不破坏某些东西? @evilmandarine 你的问题的答案已经在我之前的答案中了。您应该删除refs/remotes/tfs/default。其他refs/original/* 是在您执行“过滤器分支”或类似操作时创建的,并且很可能也可以删除。但它很容易为您测试。备份文件并删除要尝试的部分。查看效果,如果它适合您,那没关系,否则撤消更改。这就是我们学习一切的方式...... @evilmandarine 看我之前的评论(我忘了提到你,所以你可能没有收到通知) 您的回答有效,谢谢。我只是想了解我在做什么,而不是仅仅尝试看看它是否有效。寻找什么是打包的参考我找到了this answer on SuperUser并最终做了git show-ref default,然后是git update-ref -d refs/original/refs/remotes/tfs/defaultgit update-ref -d refs/remotes/tfs/default

以上是关于如何在 TFS 中使用 Git的主要内容,如果未能解决你的问题,请参考以下文章

TFS 2015:如何排除某些文件夹触发使用 Git 构建

使用 git-tfs 迁移 TFS 到 Git:迁移后如何完全断开 Git 与 TFS 的连接?

如何在 TFS 中仅删除一个 Git 存储库?

Git-TFS - 如何在拉取请求被批准之前确保分支是最新的?

如何在mac里面,把xcode代码同步到 tfs 的 git库

如何自动创建类似于 TFS 的 Git repo 和 checkout 文件