Visual Studio,TFS和文件系统链接

时间:2015-03-10 07:01:33

标签: visual-studio-2013 symlink tfs2013

我的Visual Studio项目位于C:\ Users \ MyName \ ProjectName。

为了让生活更轻松(我想),我在根目录中创建了一个名为TFS的文件系统链接 (即C:\TFS指向C:\Users\MyName\Projects

我总是从链接打开我的项目(即C:\ Tfs \ ProjectName \ ProjectName.sln),我的TFS本地路径使用该链接。

这项工作大部分时间都很好,但有些Visual Studio和TFS认为文件位于C:\ Users \ MyName ... 即如果我查看解决方案中项目的属性,可以在C:\ Tfs中,另一个在C:\ Users中。我已经确认任何解决方案或项目文件中都没有绝对路径。

当这种情况发生时我将一个新文件添加到项目中TFS变得非常混乱。 TFS认为新文件位于C:\ Users中,并且不受版本控制,但同时在C:\ TFS文件夹中有一个同名文件,因此我需要解决冲突。我可以解决冲突,但TFS开始对C:\ Users文件进行版本控制。即项目的本地文件夹是C:\ TFS ...但根据TFS(和待定更改),新文件存在于C:\ Users。

我还没有找到更改文件本地名称的方法,只有一个文件夹。

有没有办法解决这个问题,还是我应该摆脱这个链接? (对于TFS本地工作区,它的效果稍好,但问题仍然存在)

1 个答案:

答案 0 :(得分:3)

< TL; DR>

符号链接很有趣,因为TFVC将绑定信息存储在源控制文件夹之外,当您的存储库存储或包含它们时,它可能会非常混乱。

详细

反对Git,Mercurial和Subversion,TFVC并不只是将磁盘绑定到存储库的子文件夹中(如果是服务器工作区,它不会将此数据保存在磁盘上存储库()。它还将其存储在许多其他位置,即TFS服务器和您的用户配置文件。

当您查看subversion或git存储库时,您将找到.svn.git个文件夹,其中包含磁盘上哪些文件夹映射到存储库的信息。

使用TFVC,此信息不仅存储在磁盘上(如果是本地工作空间),还存储在服务器(计算机名称,服务器路径,本地路径)和用户配置文件中(在AppData\Local\Microsoft\TeamFoundation\下)。这些配置存储完整路径,这些配置用于查看文件是否受版本控制。 Local工作区改进的原因是因为他们在tf$文件夹中添加了一些绑定信息。

由于工作空间映射只能将存储库中的文件夹映射到磁盘上的一个文件夹,因此使用符号链接会混淆TFVC客户端。您可能会认为这是一个错误,因为Microsoft应该能够解析链接(取决于链接类型),但Visual Studio假定您没有使用链接。此(可能)使Visual Studio混淆的其他原因是,如果使用链接,则不会始终发出文件大小和其他属性更改的信号(更改日期并且在Visual Studio被告知刷新解决方案之前可能不会通知文件大小)。只读位(TFVC在服务器工作空间的情况下使用)在使用链接的情况下也具有特殊行为,并且可能导致未检测到的检出问题。

更多关于the strange edge cases caused by links, can be found here

我不确定您为什么要在这种情况下使用链接,这些来源已存储在TFS中,因此您的个人资料的备份不会增加很多,只会让您如果您有漫游配置文件,系统会更慢。此外,工作空间是机器绑定的,不应该在机器之间移动"无论如何,神奇地。

您可以在Visual Studio User Voice上提交建议,或在Connect上提交错误,如果您希望更改此行为,但要解决您的问题,请使用普通文件夹并将文件映射到独特的位置。

请记住,Windows中很少有应用程序可用于处理符号链接,而那些可能会导致奇怪行为的应用程序。 Windows资源管理器(文件打开对话框和拖放)可以提供原始文件位置,而不是某些操作的链接位置,并且在链接位置可能无法在一个位置更改属性。

正如你在这里看到的,系统将能够看到符号链接和真实目录之间的区别,因此可以根据这些知识行事:

enter image description here