如何在脱机时以编程方式确定本地文件是不是受 TFS 版本控制

Posted

技术标签:

【中文标题】如何在脱机时以编程方式确定本地文件是不是受 TFS 版本控制【英文标题】:How can I programmatically find out if a local file is under TFS version control while offline如何在脱机时以编程方式确定本地文件是否受 TFS 版本控制 【发布时间】:2015-08-10 22:42:28 【问题描述】:

我有一个小型的内部 Visual Studio 扩展 (VS 2013),对于一个功能,我需要确定磁盘上的文件是否受 TFS 版本控制。

“在 TFS 版本控制下”我的意思是有问题的文件由 TFS 跟踪,以便可以签出、编辑、签入等)

以下代码是我今天的代码,只要你连接到 TFS,它就可以正常工作。它使用Workspace的实例

// m_workspace is of type Microsoft.TeamFoundation.VersionControl.Client.Workspace
var items = m_workspace.GetItems(
              new[] new ItemSpec(filename, RecursionType.None), 
              DeletedState.Any, 
              ItemType.Any,
              false, 
              GetItemsOptions.LocalOnly | GetItemsOptions.Unsorted);
return items.First().Items.Any();

现在,问题是当您不在办公室防火墙内(或通过 *** 连接)时,无法访问 TFS 服务器。事实上,主机名甚至都无法解析。

所以我的问题是:我还有其他方法可以查明文件是否受版本控制吗?最好使用公共 API,但如果需要的话,我可以接受丑陋的黑客攻击......

【问题讨论】:

这是本地工作空间还是服务器工作空间?使用服务器工作区无法做到这一点(因为本地没有足够的数据来回答这个问题)。但是,这应该可以通过本地工作空间实现。 不幸的是,这是一个服务器工作区。我知道,在离线时,不可能知道服务器上的当前状态,但只要知道上次执行“获取最新”时的状态就可以了。 这是一个很好的问题,但遗憾的是,客户端上保留的唯一状态是工作区映射。这可能帮助您:这些将让您确定文件是否在映射文件夹中。您可能可以推断出映射文件夹内的只读文件位于 TFS 中。可写文件比较棘手:它们可能被检出,它们可能正在等待添加,或者它们可能只是根本不打算添加到源代码管理中的文件。 (尽管我们建议明确隐藏这些文件。)如果考虑到这些警告,我可以帮助获取工作文件夹信息。 @EdwardThomson 如果您在答案中描述如何做到这一点,如果没有人有更好的解决方案,我会接受它。我对至少可以解决部分问题的 hack 感到满意 :) 您找到解决此@IsakSavo 的方法了吗?我有本地工作区,我需要知道文件是否已经在源代码控制之下。 【参考方案1】:

你可以用这个:

   string underTfs = Microsoft.TeamFoundation.VersionControl.Client.Workstation.Current.IsMapped(path);

【讨论】:

即使给定文件未映射,此方法也始终返回 true。 是的,我测试过,它总是返回 true。

以上是关于如何在脱机时以编程方式确定本地文件是不是受 TFS 版本控制的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式确定文件是不是位于 Linux 和/或 macOS 的网络文件系统(NFS 或 SMB)上?

如果通知在脱机时发送,Android是否可以检索FCM通知

如何使用 c# 以编程方式将证书安装到本地机器存储中?

以编程方式编写 TFS 命令行以获取最新版本、签出和签入

如何更改 TFS 中子文件夹的本地路径(不是整个工作区)?

以编程方式确定 Excel 文件 (.xls) 是不是包含宏