在 TFVC (Visual Studio) 中“签出”文件的目的是什么?

What’s the purpose of “checking out” a file in TFVC (Visual Studio)?

我是 Visual Studio 2019 年使用 TFVC 进行版本控制的新手,我无法理解“签出”选项的作用。我找不到它的真正定义和实际用例。特别是,我在团队中工作。当我编译某个项目时,我需要将之前构建过程创建的两个 dll 文件复制到与不同项目相关的两个文件夹中,替换它们的旧版本 dll 文件。现在,在构建项目后,他们告诉我必须检查旧的 dll 文件,选择它们并单击 Source Control Explorer[=] 中的 Check Out 20=],我只需要复制新的 dll 文件,在我的本地工作区中用简单的“复制和粘贴”替换旧文件。为什么我需要检查这些文件?为什么我不能只打开我的本地工作区并直接用“复制和粘贴”替换旧的 dll 文件?

我不太了解你们团队的工作流程。让我提出几个想法供您确定您当前的工作流程是否最合适。

TFVC 是一个集中式版本控制。这意味着有一个 "single source of truth" 位于服务器端

为了实现这一点,任何需要在源代码管理视野下处理某些文件的开发人员都需要决定如何处理共享文件。稍微简化一下,这里有一个工作流程 - 不是最好的,也不是唯一的 - 可以帮助您弄清楚 "check out" 文件的含义。

  1. 获取最新版本的代码(因为您的版本控制是集中的,所以有 "latest version" 这样的东西),这可能会导致合并活动。
  2. 在您的开发环境中使用您的代码版本。
  3. 将代码签入服务器。这可能会再次导致额外的合并活动 - 更不用说破坏构建了。
  4. 重复。

如果您遵循这个简单的工作流程,您会发现每当您获得最新版本的代码时,您可能会发现其他人对您正在处理的一段代码进行了更改。这意味着您需要合并这些更改。同时,出于同样的原因,每当您 "check in" 代码进入服务器时,您可能会发现服务器版本与您的版本之间存在一些差异,这可能会再次导致新的合并活动。在这种情况下,集中式版本控制允许您“签出”一个文件。这意味着在您 签入 您的更改之前,您 "own" 该文件而其他人无法将他们的更改合并到中央存储库中。这在某些情况下可能没问题,但如果您习惯了分布式版本控制系统(如 Git),您可能会觉得有点奇怪。

回到你的例子。这是一种常见的做法(但不是一个好的做法)在 TFVC 中签入 dll,以便开发人员从中央存储库获取这些 dll。您可能会检查 dll,因为您要编译代码并且您将拥有 "latest version"。这可能不是事实,具体取决于您团队的工作方式。现在,如果您需要在您的团队中共享共享的 dll,我建议设置一种不同的方法(比如将它们存储在一些包管理器中)。