【问题标题】:Using both local Git and (remote) TFS with Visual Studio 2013在 Visual Studio 2013 中使用本地 Git 和(远程)TFS
【发布时间】:2015-03-25 03:04:34
【问题描述】:

我开始在本地处理一些代码并使用 Git(Git Gui 和命令行)来管理它。我现在被要求将项目放入“公司”的 TFS 中。我可以使用 VPN 连接远程访问 TFS。

对于 VS,代码是具有多个项目的单一解决方案。我使用VS成功将解决方案添加到TFS,它似乎找到了所有项目并将它们的.csproj文件和所有代码添加到TFS源代码管理中。

后来,当没有连接到 TFS(VPN 关闭)时,我做了一个简单的更改并将其提交到我的本地 Git 存储库。我在尝试(连接到 VPN 并)尝试将更改提交到 TFS 时感到沮丧。

  • 我启动 Visual Studio。
  • 有一个“团队资源管理器 - 主页”选项卡,其中显示“主页 | 离线”。
  • 我检查了工具/选项/源代码控制,TFS 是当前的版本控制提供程序。

到目前为止一切顺利。

  • 我单击团队资源管理器工具栏上的“插头”图标;它会记住连接,现在显示“连接 | 离线”;
  • 下面是一条带有“选择团队项目...”链接的行和两个部分,每个部分旁边都有向下的三角形。
    • 一个具有 TFS 服务器名称(后跟 (1));下面是存储在 TFS 中的(唯一的)“团队项目”的名称。
    • 另一部分有“本地 Git 存储库 (1)”,并显示解决方案的名称以及旁边的解决方案目录的路径。
  • 标签标题是“团队资源管理器 - 连接”。
  • 我双击团队项目的名称,选项卡标题变为“团队资源管理器 - 主页”,屏幕显示“主页 | {teamProjName}”和两个部分。
    • 其中一个具有“项目”和“Web 门户”以及通常的“待定更改”、“源代码管理资源管理器”等图标部分;
    • 还有一个“解决方案”部分,其中有一行“工作区:{workspaceName} | 新建... |“打开...”;
    • 下面是单个解决方案文件。
  • 我双击解决方案名称,现在屏幕显示“Home | solutionName (Local)”;
    • 解决方案部分现在有“分支:主”(Git 的证据)和
    • Tools / Options / Source Control 说它已更改为 Microsoft Git Provider。
  • 如果我将它改回 TFS,它会显示“Home | Offline”,我必须再次单击“plug”图标 --

我又回到了开始的地方,只是上面写着“Connect | {solutionName} (Local)”!

先打开解决方案无济于事;当我连接到 TFS 时,解决方案会关闭。关闭和打开 VS 只是让它以“VS 知道 TFS,但您处于离线状态”模式启动,并在 TFS 处于活动状态的情况下打开解决方案,使其在(本地)模式下切换到 Git 提供程序。

我非常接近于通过注册表破解来禁用 Microsoft Git 提供程序——我已经使用 Git Gui 和命令行完成了我的 Git 工作; VS 没有参与。

我疯了吗?我会认为“使用 Git 本地开发,连接到 TFS 以与其他人同步”是 VS 的主流用例。

我们将不胜感激。谢谢。

【问题讨论】:

  • TFS 提供了两种源代码控制系统。 Git & TFVC。你不能从一个推到另一个OOB。你能确认你使用的是哪个服务器端吗?
  • 请注意,TFS 是托管诸如 Git 存储库 TFVC 存储库之类的东西的服务器。使用 Git 进行本地开发并使用 TFVC 与他人同步根本不是 VS 的主流用例。正如@MrHinsh 指出的那样:在 VS 中,您可以使用 TFVC 或 Git,但如果您想要在两者之间进行(有损)转换,VS 不会为您执行此操作。

标签: git visual-studio visual-studio-2013 tfs


【解决方案1】:

如果 .git 文件夹用作 git 存储库的存储,Visual Studio 只会看到 git 存储库。因此,我们可以通过为 git 存储使用不同的文件夹来伪造 VS。

  • 将当前的.git 文件夹重命名为_git.git 目录可能被隐藏)
  • 在名为 .git 的同一文件夹中创建一个文本文件,其中仅包含 gitdir: _git 行(通过命令行创建文件:echo gitdir: _git>.git
  • _git 添加到您的.gitignore 文件中

现在,当您启动 VS 时,它不会看到该 git 存储库,而是使用 TFS。

【讨论】:

  • 我已经使用这个解决方案很多年了,但是现在我已经升级到 VS2019 似乎 Visual Studio 读取了 .git 文件并使用了 _git 文件夹。
  • 我认为最近 VS2019 发生了一些变化。几周前这仍然对我有用。我的团队上周刚刚完全改用 Git!为了测试这一点,我在 VS2019 中打开了仍在 TFS 下的旧 .sln,现在它使用 _git 直接跳转到 Git。
  • 我尝试了很多方法让VS2019使用TFS,即使父文件夹中有一个.git文件夹,最终找到了一个合理的解决方案:stackoverflow.com/a/61658693/306074
  • @Anlo 由于 2019 年打破了这个答案,在它被标记为欺骗之前,可能值得把你的问题带到这个问题上。 ;^) 我从这里开始并欣赏到另一个的链接。
  • @Anlo 看起来这是您对该问题的回答的auto-flagged for being an exact duplicate。可能值得在这里编辑和重新发布。 blond - 很抱歉评论您的答案。很快就会清理掉这些。
【解决方案2】:

如果服务器配置为 TFVC 并且您有本地 Git 存储库,那么您不能只从本地推送到 tfs。你有两个选择。你可以:

1) 您可以创建一个为 Git 配置的新团队项目并正常推送。

2) 你可以使用 TF-Git 从你的本地 git repo 推送到 TFVC 服务器:http://www.microsoft.com/en-gb/download/details.aspx?id=30474

【讨论】:

  • 我不想“从本地 Git 推送到 TFS”。我只是想使用服务器端 TFS 版本控制,而 VS 不会因为我有一个本地 Git 存储库而不断进入离线模式。我非常愿意对我的本地 Git 进行提交——同时处理事情——与将“完成的工作”提交给 TFS 分开。我只是不明白为什么本地 Git 存储库的存在使 VS 不断忽略与 TFS 的连接。
【解决方案3】:

我改用 mercurial 作为本地存储库。这没有 VS 集成(需要外部提交)但也没有 VS 麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2014-05-13
    • 2016-05-03
    • 2016-02-17
    • 1970-01-01
    相关资源
    最近更新 更多