Visual Studio 创建多个/额外的工作区

Visual Studio creating multiple/ additional workspaces

我从 VS2010 开始使用 TFS。那时我已经创建了自己的 TFS 服务器 (myname.visualstudio.com)。我的问题是我在我的 TFS 网站(带有仪表板的网站)上创建了一个新项目。然后当我转到 VS2017 并连接到那个新项目时,它要求我按预期进行映射和获取。我没有点击 "Map & Get" 按钮,而是点击了高级以便我可以配置所有内容。

在工作区配置对话框中,我注意到 VS 将其命名为 "MYPCBLABLA_1"。如果我尝试删除“_1”,VS 会说“计算机 blablabla 上已经存在工作区 blablabla”,并且不允许我使用现有的工作区名称。

为什么会这样?我不能只使用 1 个工作区吗?根据我对工作区的理解,它是我项目的容器,所以不同的工作区,不同的项目集。但它们到底是什么?

附加信息: 我不知道这是否有帮助,但在过去,我曾多次格式化我的 PC,我不确定重新格式化后使用 VS 时是否会影响映射或工作区名称。

工作区可能是 TFVC 中了解最少的功能。你说得对,它们是一种从 TFVC 存储库中隔离不同文件集的方法。

很多人为特定项目或一组解决方案配置新工作区,但让我们详细了解工作区的一些使用方式:

  • 修补程序:您可能需要为现在发生的事情创建一个修补程序,但您现有的工作区中有未决的更改。除了搁置这些更改,对有错误的版本执行 "Get Specific version",您还可以创建一个新的工作区来解决这个特定问题。完成修复后,您无需执行任何操作即可继续使用其他工作区。
  • 实验:您可能想要进行一些重大重构、重构源代码控制或其他一些影响很大的操作。在新的(临时)工作区中执行此操作有助于防止弄乱您的正常工作区。
  • 审阅其他人的更改:在审阅其他人的更改时,您可能希望拥有一份本地副本,以便您可以运行、注释和使用其他人的代码。您可以轻松地将这些更改放入您自己的工作区,而不是将这些更改放入您自己的工作区,之后您可以安全地删除它。
  • 在处理其他更改时执行合并:可能是您正在处理一项新功能,并且在需要发布版本时已经将一些更改合并回另一个分支。为了准备这个版本,在不选择更改或覆盖当前工作区中正在进行的工作的情况下,在临时工作区中执行这些类型的发布活动通常更容易,这样你就知道工作总是在确切的版本上完成在源代码管理中。
  • 防止对重要分支的意外更改:通过将您的生产分支放在一个单独的工作区中,您不会意外地将来自 Development 和 Main 的更改合并到一个签入中。由于 Visual Studio 经常自动选择工作区中所有未决的更改,这可能会导致对 master/main 分支的意外更改。我已经编写了一个签入策略来防止这些问题,但是拥有单独的工作区是一个更安全的解决方案。
  • 与多个开发人员一起工作 workstation/server:在某些组织中,开发人员使用远程桌面连接到强大的中央服务器来进行更改。为确保每个开发人员都有自己的文件集,每个开发人员都有 his/her 个自己的工作区。另一种方法是创建工作区 public,它允许多个开发人员使用同一个工作区文件夹。但这往往会导致各种意想不到的问题。
  • 浏览旧版本的代码:如果您需要 review/compare 将旧版本转换为新版本,通常可以使用 Visual Studio 中的文件夹差异视图,但如果您需要做更彻底的比较,您可能希望在您的 TFVC 存储库中拥有同一文件夹的 2 个副本。创建两个工作区将允许您在本地磁盘上拥有同一文件夹的两个不同版本。
  • 为合并或标签准备一个特殊版本:您可以合并和标记一组文件的工作区版本。您可以创建一个工作区,然后使用 获取特定版本 来获取特定文件的特定版本,这些都可以来自不同的变更集版本。满意后,您可以执行标签或合并或分支操作以将此特定工作区版本配置存储在服务器上。

如您所见,Workspaces 允许您在一台机器上进行并行开发、隔离更改等。

要有创意

如您所见,工作区是一个非常强大的概念。可用于很多操作。但是你需要彻底理解这个概念。许多开发人员并不确切了解工作区是什么以及它们如何工作,他们错过了 TFVC 的一些最强大的概念。

巩固和清理

在您的例子中,您现在有两个工作区。为了合并这些(如果需要),您可以从 _1 文件夹中取消映射文件夹,然后将这些相同的文件夹映射到原始工作区中。您还可以从 TFS 服务器中删除 _1 工作区,然后更新原始工作区的映射。

请记住,工作区存储在您的本地计算机上,但 TFS 服务器还有一个注册表,用于记录谁将哪些 TFVC 文件夹映射到哪些工作站。因此,仅从本地磁盘中删除文件是不够的。您需要将这些更改保存到 TFS 服务器(这会在更改映射后执行获取操作后自动发生)。

要检查哪些工作区已注册到 TF​​S 服务器上的工作站,请使用:

tf vc workspaces /computer:YOURWORKSTATIONNAME

然后使用

删除旧工作区
// DELETE the local workspace
tf vc workspace /delete:WORKSPACENAME

// DELETE the workspace registration on the TFS server
tf vc workspaces /remove:WORKSPACENAME

为了防止 VS 创建新的工作区,我:

  1. 创建一个本地文件夹,我会将远程存储库的内容映射到该文件夹​​;
  2. 在VS中,连接到远程仓库;
  3. 在VS中,打开Source Control Explorer并定位到我需要的内容; VS 将显示“未映射消息”。
  4. 单击该消息并映射到本地。

这保证不会创建其他工作区,并且将使用当前工作区。