Visual Studio创建多个/附加工作区

11

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

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

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

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

2个回答

22
工作区可能是TFVC中最不为人所知的功能之一。您说得很对,它们是一种将不同文件集从TFVC存储库中隔离的方法。许多人会为特定项目或解决方案配置新的工作区,但让我们详细了解一下工作区的使用方式:
- 热修复:您可能需要针对当前发生的某些问题创建热修复,但您的现有工作区存在待处理的更改。您可以创建一个新的工作区来解决此特定问题,而无需搁置这些更改并在错误版本上执行“获取特定版本”操作。完成修复后,您可以继续在其他工作区中工作,而无需进行任何操作。 - 实验:您可能需要进行一些重大的重构、重构源代码控制或其他高度影响力的操作。在新的(临时)工作区中进行此操作可帮助您防止破坏正常的工作区。 - 查看其他人的更改:在审核另一个人的更改时,您可能希望拥有本地副本,以便可以运行、注释和处理其他人的代码。您可以将这些更改带入临时工作区,而无需将这些更改合并到您自己的工作区中,之后可以安全地删除它们。 - 在处理其他更改时执行合并:您可能正在开发新功能,并已将一些更改合并回另一个分支,当需要发布版本时。为了准备这个版本,通常最好在临时工作区中执行此类发布活动,而不需要在当前工作区中选择更改或覆盖正在进行的工作。 - 防止对重要分支进行意外更改:通过将生产分支放入单独的工作区中,您无法意外地将来自开发和主要分支的更改合并到单个签入。由于Visual Studio经常自动选择工作区中的所有待处理更改,因此这可能会导致您的主/主分支出现意外更改。我编写了一个签入策略,以防止出现这些问题,但使用单独的工作区是更安全的解决方案。 - 在同一台计算机/服务器上与多个开发人员共同工作:在某些组织中,开发人员使用远程桌面连接到中央强大的服务器进行更改。为确保每个开发人员拥有自己的文件集,每个开发人员都会获得自己的工作区。另一种选择是使工作区公开,允许多个开发人员使用同一工作区文件夹。但这通常会导致各种意外问题。 - 浏览代码的旧版本:如果您需要审查/比较旧版本和新版本,则通常可以使用Visual Studio中的文件夹差异视图,但如果需要进行更彻底的比较,则可能需要在TFVC存储库中拥有同一文件夹的2个副本。创建两个工作区将允许您在本地磁盘上拥有同一文件夹的两个不同版本。 - 为合并或标签准备特殊版本:您可以合并和标记一组文件的工作区版本。您可以创建一个工作区,然后使用“获取特定版本”来获取特定文件的特定版本,这些版本可以来自不同的变更集。满意后,您可以执行标记、合并或分支操作,以将此特定工作区版本配置存储在服务器上。
正如您所看到的,工作区允许您在一
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

1
非常感谢您对工作区的详细解释! - Bessie
但是为什么Visual Studio首先创建_1工作区呢?这是某种默认操作。 - John Dyer
1
@JohnDyer 如果你尝试从源代码控制中打开一个解决方案,VS会询问你是否要进行映射和获取。默认情况下,这将添加第二个、第三个、第四个... - jessehouwing
你可以在第一个代码片段中使用 tf vc workspaces /computer:%COMPUTERNAME% - bers
取决于你所使用的shell... - jessehouwing

1
为了防止VS创建新的工作区,我会执行以下步骤:
  1. 创建一个本地文件夹,并将其映射到远程存储库的内容;
  2. 在VS中连接到远程存储库;
  3. 在VS中打开源代码控制资源管理器并导航到所需的内容;VS将显示“未映射消息”。
  4. 单击该消息并进行本地映射。
这样可以确保不会创建其他工作区,并且当前的工作区将被使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接