如何在脱机时以编程方式确定本地文件是不是受 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 版本控制的主要内容,如果未能解决你的问题,请参考以下文章