TFS& Visual Studio集成 - 获取最新并不总是有效吗?

时间:2009-08-18 13:44:59

标签: visual-studio version-control tfs

我正在使用TFS作为源代码控件在Visual Studio 2005中进行开发。每当我没有在解决方案上工作一段时间,我总是在解决方案资源管理器中做一个递归的Get Latest。

然而,这似乎并不总是奏效。如果我知道我没有最新版本的文件,甚至右键单击它(在解决方案资源管理器中),选择获取特定版本并勾选“强制获取”框不起作用。

我似乎需要打开TFS源代码控制窗口,并强制获取有问题的文件。

此外,解决方案资源管理器通常会在文件旁边显示“签出给其他人”图标,但是当我检查源代码管理时,它们根本就没有签出!

我想知道这些问题是否普遍存在,是否存在于VS2008中(我还没有在2008年将TFS用于大型项目),以及是否有任何修复或解决方法。

2 个答案:

答案 0 :(得分:4)

1)我不会养成从Solution Explorer获取最新版本的习惯。即使它总是100%没有bug,但它比从命令行或Source Control Explorer中执行它要慢得多且不太可靠。 SlnExp必须抓取整个项目结构并发出非递归调用...伪算法:

parse sln file
foreach project in sln
    TFS_GET makefile
    parse makefile
    enumerate sourcefiles[]
    TFS_GET sourcefiles[]
loop

SCE不需要解析并发出一个递归的webservice调用。除了性能提升之外,这还要安全得多:

(a)构建时依赖项并不总是项目文件列表的一部分。可执行工具,第三方程序集和部署脚本都是常见示例。 SCE将下载它们,SlnExp不会。

(b)范围限定在重命名或移动文件时,调用特定文件的调用不会产生预期的结果。最好从磁盘中删除“旧”名称;在最坏的情况下,似乎没有任何事情发生。 (这可能是您报告的错误的原因)为了使文件真正重命名/移动与服务器同步,旧的&新路径必须都在Get。

的范围内

2)多年来,SlnExp“字形”已经有很多错误修复。我不会声称VS2008 SP1在这方面是完美的,但它肯定有所改进。

答案 1 :(得分:0)

有时Get specific version 即使同时选中这两个复选框也无法获取最新文件。最常见的是您已对文件进行了更改,并且您希望通过重新获取最新版本来撤消这些更改。嗯......这就是Undo pending changes的用途,而不是Get specific version的目的。

如有疑问:

  • 在“获取最新”
  • 之前撤消对文件的挂起签入
  • 之后进行比较以确保您的文件与预期版本匹配
  • 之后对整个项目进行递归“比较”,看看有什么不同
  • 密切关注待处理的更改窗口,有时您可能需要检查“服务器版本”以解决不兼容的待处理更改

这是我刚才发现的最爱:

  • Output窗口中查看以下消息:

    警告 - 无法刷新R:\ TFS-PROJECTS \ www.example.com \ ExampleMVC \示例MVC \示例MVC.csproj,因为您有待处理的编辑。

是的,严重消息出现在输出窗口中。没有其他通知! 挂起的更改中没有任何内容,也没有其他对话框消息告诉您明确请求的文件未被检索!是的 - 您只需运行Undo pending changes并获取文件即可解决此问题。