为什么我的TFS工作区路径会不停地重新映射?

6

我们正在使用Visual Studio 2008 / TFS 2008。

我们有一个小型开发团队,但出现了一个问题,每当我们中的任何一个人“获取最新版本”时,其中一个路径会自动重新映射到不同的路径。这将导致“获取最新版本”开始删除文件,因为路径已更改。每次都是相同的路径被重新映射到错误的路径。

  1. 工作区定义存储在哪里?
  2. 我们可能已经在TFS中检查了什么导致了这个问题?

仅供参考,我在Visual Studio 2010 SP1中仍然遇到此问题。 我有一个根映射,本地目标文件夹已被修改,现在从TFS获取时,大多数文件夹都是正确的(根据新的根映射),但有些仍在使用旧的映射。 我已直接检查了映射,并且只有一个(根映射)。 受影响的项目已经打开,我的怀疑是csproj和/或sln文件中的路径指示VS内部的TFS支持将其映射到错误的位置。 还尝试删除TFS“缓存”文件夹(AppData \ Local \ Microsoft \ Team Foundation)。 - redcalx
5个回答

6
我曾经在打开一个解决方案时遇到过这种情况。如果该解决方案包含相对路径指向其他项目,而这些项目不在它的文件夹下,并且在你的工作区中映射方式不同,GET操作会告诉我它正在重新映射以进行调整。问题是它做出的决定完全是错误的。
唯一的解决方法是确保所有开发人员使用与源代码控制相同的结构,并在每个工作区中都有相应的表示。
但实现这个目标非常痛苦。基本上每个人都必须删除所有文件的本地副本,重新创建工作区,在“工作区更改”时选择“NO TO GET”,关闭VS,重新打开,再GET LATEST。
原因是即使本地存在项目的副本,即使这些项目没有打开,GET操作仍然会出错。这很让人沮丧,因为当检查这些项目的最新差异时,没有任何更改,但是当打开包含该项目的解决方案时,该项目中的dll引用会自动更改。此时,任何文件都没有更改。但是在构建后,更改将持续存在并导致下一次GET操作再次出错......
我确定这一切都是错误的,但这就是我们这周发生的事情。

我遇到了完全相同的问题。但只在一些机器上存在,而在其他机器上则不存在。我们为所有用户提供一致的解决方案结构,按照您的步骤操作,但VS 2008仍会自行创建新映射并混合所有文件。我很惊讶居然只找到1个与此问题匹配的结果。 - Steve Johnson

1

好的,我明白了。这是解决方案。

首先安装Visual Studio 2008 SP1。(我假设您已经安装了VS 2008和Team Explorer)。

现在启动Visual Studio 2008,进入源代码控制并删除工作区。 创建一个新的工作区,并将源代码控制文件夹映射到本地文件夹。 点击确定。当它询问“工作区已被修改”时选择NO。

现在关闭Visual Studio 2008

重新打开Visual Studio 2008,进入源代码控制并获取特定版本(勾选覆盖文件的两个复选框)。

如果您有一个基于asp.net的Web解决方案,现在是创建应用程序池,在IIS中配置网站,设置适当的身份验证和授权的时候。否则,这是可选的!

现在进入源代码控制中的适当文件夹,双击解决方案文件。您也可以通过双击本地文件夹中的解决方案文件来打开解决方案,但我发现从源代码控制中打开解决方案更容易。

通过上述步骤,如果您的网站已配置,则Visual Studio 2008将自动检测您设置的网站并提示您确认。点击“确定”。
它将联系源代码控制服务器以查看是否需要同步。如果您的解决方案中有多个项目,则会观察到文件获取进度条在屏幕上快速闪烁,并且您的解决方案将在几分钟内设置好。
真正的问题在于Visual Studio 2008 Service Pack 1。如果没有安装SP1,则TFS映射会损坏。如果安装了SP1并遵循上述指南,则不会出现任何问题。

谢谢!你是我的救星,这个问题困扰我很久了,以前从来没有正确解决过,而不是重新安装整个vs2008+SP1+team explorer。 - MeeKaaH

1

您也可以尝试清除工作区缓存并重新映射:

SET AppDataTF=%USERPROFILE%\Local Settings\Application Data\Microsoft\Team Foundation
SET AppDataVS=%APPDATA%\Microsoft\VisualStudio
IF EXIST "%AppDataTF%\1.0\Cache" rd /s /q "%AppDataTF%\1.0\Cache" > NUL
IF EXIST "%AppDataTF%\2.0\Cache" rd /s /q "%AppDataTF%\2.0\Cache" > NUL
IF EXIST "%AppDataVS%\8.0\Team Explorer" rd /s /q "%AppDataVS%\8.0\Team Explorer" > NUL
IF EXIST "%AppDataVS%\9.0\Team Explorer" rd /s /q "%AppDataVS%\9.0\Team Explorer" > NUL

当映射在一个工作站上出现问题,而在另一个工作站上正常工作时,这对我很有效。 - driis

1

这不是正常的行为 - 听起来有些奇怪。只想确认一下 - 你们所做的都是从源代码控制资源管理器中简单获取吗?此外 - 你们都在不同的机器上吗?(即,你们没有共享虚拟PC映像或任何多台机器具有相同名称的情况)

我建议检查的一件事是转到“文件”,“源代码控制”,“管理工作区”,并查看您的工作文件夹映射,在获取之前和之后,看看是否有任何更改。它不应该有变化 - 如果有变化,这可能会给我们提供一些线索。


0

工作区定义存储在服务器上。

如果您进入命令行并键入“tf workspace”,您将看到工作区的定义。


是的,我可以修改我的工作区。但是,在执行获取操作后查看我的工作区时,路径已经改变了。 - SkunkSpinner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接