2009-08-18 56 views
4

我正在开发Visual Studio 2005,使用TFS作为源代码控件。每当我没有在解决方案上工作一段时间,我总是在解决方案资源管理器中进行递归获取最新版本。TFS与Visual Studio集成 - 获取最新并不总是奏效?

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

我似乎需要打开TFS源代码管理窗口,并在那里强制Get文件的问题。

另外,解决方案资源管理器通常在文件旁边有一个“检出给别人”的图标,但是当我检入源代码管理时,它们根本没有检出!

我只想知道这些问题是否广泛存在,是否坚持VS2008(我还没有在2008年的一个大型项目中使用过TFS),以及是否有任何修复或解决方法。

+0

无法评论“广泛”,但可以确认我有完全相同的经历。我有代码被别人标记了几个星期,但我是唯一一个工作的人。 – 2009-08-19 11:52:24

+0

我们对SSIS项目使用Visual Studio 2008和TFS 2012,并且遇到同样的问题。当您从解决方案资源管理器获取最新版本时,有时没有任何人签出的文件在本地工作区中不会更新。 在使用TFS源代码管理窗口的获取最新版本时,它似乎始终有效,但您如何教导n个项目成员停止使用他们已使用五年的解决方案资源管理器? – cmenke 2014-02-28 11:40:25

回答

4

1)我不会养成从解决方案资源管理器获取最新的习惯。即使它始终工作在100%无缺陷状态,但它比从命令行或源代码管理资源管理器执行它要慢得多,也不太可靠。 SlnExp具有抓取你的整个项目结构,并发出非递归调用...伪算法:

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

SCE不需要解析,并发出一个单一的递归Web服务调用。除了性能增益之外,这更安全:

(a)构建时依赖并不总是项目文件列表的一部分。可执行工具,第三方程序集和部署脚本都是常见的例子。 SCE将下载它们,SlnExp不会。 (b)范围界定当文件被重命名或移动时,调用特定文件时不会产生预期的结果。充其量,从磁盘删除“旧”名称;在最坏的情况下,似乎什么也没有发生。 (这可能是您报告错误的原因)为了使文件真正被重命名/移动与服务器同步,旧的&新路径必须都在Get范围内。

2)多年来,对于SlnExp“glyphs”已经有很多bug修复。我不会声称VS2008 SP1在这方面是完美的,但它绝对有所改进。

+0

但是,如何取消激活解决方案资源管理器中的获取最新版本以确保团队中没有人使用它?另外,它(对TFS源代码管理资源管理器的更改)永远不会发生.....不在一个大型项目中,并且所有事情都有使用SLN Explorer的历史。 – cmenke 2014-02-28 11:42:33

0

有时候Get specific version即使检查这两个复选框也不会给你最新的文件。最常见的情况是您对文件进行了更改,并且您想通过重新获取最新版本来撤销这些更改。那么......这就是Undo pending changes的目的,而不是Get specific version的目的。

如有疑问:

  • 撤消挂起检查的文件(S)之前,你做“获取最新的”
  • 做了比较之后,以确保您的文件预期的版本匹配
  • 之后在整个项目上运行递归“比较”,看看有什么不同
  • 关注挂起的更改窗口,有时您可能需要检查“服务器版本”以解决不兼容的挂起更改

这一个才是我的最爱,我才发现:

  • 检查Output窗口的消息像这样:

    警告 - 无法刷新R:\ TFS项目\ www.example .com \ ExampleMVC \ Example MVC \ Example MVC.csproj,因为您有一个挂起的编辑。

是本临界消息显示在输出窗口。没有其他通知! 没有任何待处理的更改,并且没有其他对话消息告诉您刚刚请求的文件未被检索!是的 - 你只需运行Undo pending changes并获取文件即可解决此问题。

+0

但这是Visual Studio中的预期行为,并不是一个错误。获取最新版本不应覆盖您的本地更改。 这里描述的问题是获取最新版本有时不会获取您没有编辑或以其他方式检出的最新版本的文件。这是一个真正的错误和非常严重的错误。 – cmenke 2014-02-28 11:37:12

相关问题