TFS 2010如何检测Visual Studio外部对文件所做的更改?


118

我将Team Foundation Server 2010与Visual Studio 2010结合使用。

每当我在Visual Studio外部修改文件时,TFS似乎都不会检测到对文件所做的更改,因此,在修改文件后,我无法选择签入文件。

如何解决?


18
Subversion或Git(可能还有其他)正在比较文件的哈希值而不是API,以检入/检出文件。更简单,风险更低!
史蒂夫·B

8
更糟糕的是,TFS甚至没有注意到需要检入已更改的文件,因此您经常会忘记它..直到您的同事检出该文件并意识到您的代码无法编译或正常工作。难怪人们说TFS是“类固醇上的VSS”-更好,但仍然存在许多VSS的问题。
gbjbaanb 2013年

在类固醇上使用VSS,就像类固醇会破坏您的身体一样。
伊恩·肯普

Answers:


48

如果您在Visual Studio之外工作时已与服务器建立网络连接,则最好使用tf命令行客户端或使用在TFS Power Tools版本中可用。(另外,越来越多的其他工具具有TFS集成功能,因此可以自动完成此操作,但是,如果您仅使用记事本,则仍然需要手动操作。)

当然,很多时候您都在工作,并且没有可用的网络连接来签出文件。

如果您知道自己修改了哪些文件,则只需在Visual Studio中将它们检出,然后就可以将它们检入。

如果您不知道自己编辑了哪些文件,则可以通过运行tfpt online命令(也是Power Tools发行版的一部分)来检测更改。这将找到已在本地修改的文件,并从服务器中检出这些文件。


Visual Studio似乎并不能通过检出文件来检测文件的更改。我只是尝试签出一个文件夹,其内容以待处理的更改显示为编辑内容。然后,我在“文件资源管理器”中删除了该文件夹并刷新了未决的更改,但是Visual Studio并未说文件已在未决的更改中删除。此外,文件仍然存在于解决方案资源管理器中。
凯尔·德莱尼

160

TFS为此具有“协调”命令:

  1. 打开源代码管理资源管理器
  2. 右键单击包含更改的文件夹,然后选择“ 比较”
  3. 选择要调和的文件(按CTRL+ A选择所有文件)
  4. 点击协调按钮
  5. 在“ 协调文件夹差异”对话框中设置选项。确保没有待更改的文件设置为“ 签出”
  6. 点击确定
  7. 如果进行了本地更改,将显示“ 签出”对话框。设置首选的锁定类型
  8. 点击结帐

协调文件夹差异

另请参阅:协调文件夹之间的差异


13
这是最好的答案,因为它不需要命令行或危险的“撤消挂起的更改”。
NickH 2015年

4
拯救了我的一天!我完全按照您的步骤进行,并且完全按预期工作。:-)
吉拉德·巴纳

4
如描述的那样工作。应该是最好的答案。
Nicolas

不幸的是,在整个项目中执行此操作时,出现错误指定的路径,文件名或两者都太长。标准名称必须少于260个字符,目录名称必须少于248个字符。选择单个文件夹不是我的选择,因为我不记得已更改的所有文件目录。任何想法?
kraftwer1 2015年

2
非常感谢在VS 2015 Update 3中的完美工作。应该是最好的答案,没有棘手的命令可以使它起作用
Nicolas Leucci '16

35

使用TFS Power Tools,这对我有用:

tfpt online /adds /deletes /diff /noprompt /recursive directory-name

(其中directory-name是要更新的目录的路径,否则它将检测整个TFS存储库中的更改)

如果您想知道在没有实际更改的情况下将执行的操作,可以通过添加/preview开关来强制其进行空运行。


感谢@Adam Batkin的提示。像魅力一样工作,现在我被解决了!+1
iOnline247

9
当心,该命令行还将包含不需要的文件:* .user,BIN \,obj等...
Steve B

1
干杯,我一直在寻找命令行方式,以便可以从本地Git存储库中自动更新公司的TFS!
Mark K Cowan

2
@SteveB有一个/exclude:fld_name/*,filename可用于排除不需要的文件交换..这halped我很多
克雷西米尔Pendic

1
我这样运行,tfpt online /deletes /noprompt /recursive directory-name并且有成千上万个文件需要更改,因此必须撤消。但是我从来没有碰过这些,只是删除了文件夹。
Dzmitry Lahoda

16
*1- make changes outside of Visual Studio
2- go to Visual Studio and open Source Control Explorer
3- right click on the folder > "Check Out for Edit" > "Check Out"
4- right click on the same folder > "Undo Pending Changes..." > "Undo changes" > "No to All"*

我在分支机构上测试了此变通办法,这对我有很大帮助。但是只有新文件和新文件夹需要手动完成。

我建议在操作之前创建一个分支。它可以隔离您的手术时间。

注意:此技术还会对文件进行相同的清除,TFS始终将其标记为已修改。


3
这实际上应该是对藻类帖子的评论,而不是新的答案。无论如何,我仍然建议不要这样做,原因与上面藻类建议的理由相同。
爱德华·汤姆森

绝对辉煌​​!正是我想要的(在我们公司移动了TFS服务器之后,TFS / VS2010对此感到困惑)。现在,我只将已编辑的文件签出。谢谢!
Mike Gledhill 2014年

这可行,但是MS应该提供更好的方法来做到这一点。好的产品上并不需要命令行和黑客手段(特别是如果将其嵌入到VS中)。SVN和Mercurial这样做很有趣...
user2173353

代替第4点,您可以使用tfpt uu stackoverflow.com/a/544285/10245
Tim Abell,

这只会撤消您的操作。它不会使Visual Studio知道您所做的事情。
凯尔·德莱尼

7

试试这个。这是一种解决方法,但它可以工作:

  1. 在Visual Studio之外进行更改
  2. 转到Visual Studio并打开“源代码管理资源管理器”
  3. 右键单击文件夹> “签出以进行编辑” > “签出”
  4. 右键单击同一文件夹> “撤消待更改...” > “撤消更改” >“ 全部拒绝

而已。更改现在可见。


3
我真的建议不要这样做-我最大的担心是,我会胖乎乎地指责这一点,而无意间撤消了我所有的合法更改。此外,您正在检出所有文件,这些文件可能取决于某些客户端和服务器的配置,从而可能会锁定某些或可能所有文件,并且可能会使检出最新信息,这肯定很烦人。
爱德华·汤姆森,

1
这只会撤消您的操作。它不会使Visual Studio知道您所做的事情。
凯尔·德莱尼

如果您创建或添加了新项目,则在该会话中:宝贝,走了!
基督教

4

还有另一种解决方案,可以使TFS找出Visual Studio外部已更改的文件:

  1. 离线打开解决方案
  2. 在解决方案资源管理器中,选择解决方案文件,然后按“联机”按钮(GoOnline按钮图标

之后,TFS将自动扫描解决方案以进行更改。

第一步可以通过许多不同的方式来实现。这里有一些:

  • 使用GoOffline扩展程序-非常简单有效。
  • 如果在打开解决方案时要求您提供TFS凭据(无自动域身份验证),请不要输入凭据。该解决方案将脱机打开,然后按“联机”按钮即可登录
  • (极端解决方案)断开网络电缆的连接;打开解决方案;连接网线。

3

Visual Sourcesafe的工作方式也与此类似,而让VSS或TFS注意到更改的方法是在Visual Studio中将文件签出一次。


1

打开源代码管理,然后转到您的TFS文件夹。右键单击该文件夹,然后选择“比较”。

请注意,您编辑的文件显示为红色。

我发现这比tfpt online使您获得非只读且未经编辑的文件更好。


1

过去,当我的Internet断开并且无法进行脱机工作时,我曾遇到过此问题,并且大多数更改未出现在Team Explorer中。

请按照以下步骤操作:首先,在解决方案资源管理器中,选择要重新协调的文件夹(对我来说,这是我的整个解决方案文件夹),然后选择比较... 在此处输入图片说明修改过滤器中,在过滤器文本中,框中,您可以输入:

*.cs;!obj\;!bin\;!packages\;

在此示例中,它将仅在搜索中包含C#文件,而在以下文件夹中排除:bin,obj和packages。

请注意,“ 待更改 ”列中包含有关该文件是否标记为“编辑”,“添加”等...或没有标记的信息。

  • 要标记为编辑(当本地项具有匹配的服务器项时),请选择文件,然后选择签出以进行编辑...
  • 要标记为添加(当本地项没有任何服务器项时),选择文件并选择添加文件。

最后,我不确定为什么未在此处列出项目(删除* .cs过滤器后仍未显示),因此请重新构建解决方案以确保项目也进行更新

+在解决方案中,单击显示“在线”的连接按钮(如果显示)。


0

我发现在Visual Studio 2015中,打开了项目,Visual Studio自己发现文件已在外部进行了修改,并自动将其检出,而无需执行任何操作。以正常方式检入项目会保存外部修改。


0

就我而言,以下方法有效(至少我尝试过一次):

  1. 转到“ 待更改”面板
  2. 在“已包含”或“已排除”更改下选择“ 查看选项 ”。
  3. 显示全部显示解决方案更改之间切换
  4. 如果需要,请切换回

刷新TFS更改

更改“查看选项”似乎会强制刷新已修改的文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.