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

121

我正在使用Visual Studio 2010和Team Foundation Server 2010。

每当我在Visual Studio之外修改文件时,TFS似乎无法检测到对文件所做的更改,因此在文件被修改后不会提供给我提交文件的选项。

如何解决这个问题?


18
Subversion或Git(以及其他一些软件)比较的是文件哈希值而不是API来检入/检出文件。这种方法更加简单,风险也更小! - Steve B
8
TFS 更糟糕的是,它甚至不能察觉到一个已更改的文件需要被签入,因此你经常会忘记它...直到你的同事检出它并意识到你的代码不能编译或运行。难怪人们说 TFS 是“VSS 强化版”,虽然更好,但仍然存在许多 VSS 的问题。 - gbjbaanb
这就像是VSS加强版,就像类固醇摧毁你的身体一样。 - Ian Kemp
11个回答

173
TFS有一个“Reconcile”命令可用于此操作:
  1. 打开源代码控制资源管理器
  2. 右键单击具有更改的文件夹并选择比较
  3. 选择要调和的文件(按 CTRL+A 选择所有文件)
  4. 点击Reconcile按钮
  5. 调和文件夹差异对话框中设置选项。确保将没有待定更改的文件设置为检出
  6. 点击确定
  7. 如果您有本地更改,将弹出检出对话框。设置首选锁定类型
  8. 点击检出

调和文件夹差异

另请参阅:在两个文件夹之间调和差异

13
这是最佳答案,因为它不需要使用命令行或冒险的“撤消待定更改”。 - NickH
4
救了我的一天!我严格按照您的步骤操作,结果完全符合预期。 :-) - Gilad Barner
4
按照描述的方式工作。应该是最佳答案。 - Nicolas
@kraftwer1:尝试将您的工作区移动到驱动器根目录下名称较短的文件夹中(例如 C:\TFS)。 - mhu
2
在VS 2015更新3中完美运行,非常感谢。应该是最佳答案,没有棘手的命令使其工作。 - Nicolas Leucci
显示剩余10条评论

48
如果你在 Visual Studio 外工作时有与服务器的网络连接,最好使用 tf 命令行客户端或 TFS Power Tools 发布的 Windows Explorer shell 集成来检出文件后再进行编辑。(还有越来越多其他工具都有 TFS 集成,使此过程自动化,但如果你只用记事本,这仍然需要手动操作。)
当然,很多时候你在工作时没有可用的网络连接来检出文件。
如果你知道哪些文件被修改了,可以在 Visual Studio 内直接检出它们,然后就能将它们检入。
如果你不知道哪些文件被编辑了,可以运行 tfpt online 命令(也是 Power Tools 发布的一部分)来检测更改。这将定位本地已修改的文件并从服务器检出这些文件。

Visual Studio似乎无法通过检查文件来检测更改,只是通过检出它们。我刚刚尝试了检出一个文件夹,内容显示为待处理的编辑。然后我在文件资源管理器中删除了该文件夹并刷新了待处理的更改,但Visual Studio没有在待处理的更改中指出文件已被删除。此外,这些文件仍然存在于解决方案资源管理器中。 - Kyle Delaney

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
谢谢,我正在寻找一种命令行方式,以便我可以自动更新公司的TFS从我的本地Git存储库! - Mark K Cowan
2
@SteveB,有一个/exclude:fld_name/*,filename开关可以用于排除不需要的文件..这对我帮助很大。 - Kresimir Pendic
1
我像这样运行:tfpt online /deletes /noprompt /recursive directory-name,结果有成千上万的文件需要被“更改”,所以必须撤消操作。但是我从未触及过这些文件,只是删除了文件夹。 - Dzmitry Lahoda
在此之后运行 tfpt uu /noget 将撤销未更改的文件。;-) - Mark Avenius

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
这实际上应该是对alga的帖子进行评论,而不是新答案。无论如何,出于与alga建议时相同的原因,我仍然建议不要这样做。 - Edward Thomson
太棒了!正是我所需要的(在我们公司移动TFS服务器后,TFS/VS2010对此感到困惑)。现在,我只需检出我的编辑文件。谢谢! - Mike Gledhill
这个可行,但微软应该提供更好的方法来完成这个任务。在一个好的产品上不需要使用命令行和黑科技(特别是如果这个功能集成到VS中)。SVN和Mercurial可以轻松实现这个功能... - user2173353
你可以使用tfpt uu代替第4点 https://dev59.com/SnRB5IYBdhLWcg3wtJKF#544285 - Tim Abell
这只是撤销你所做的操作。它不会让 Visual Studio 意识到你所做的操作。 - Kyle Delaney
这似乎值得注意,当我这样做时,TFS显示了所有现有文件中的新更改,但没有捕获任何新创建的文件。 - Richard

7
试一下这个。虽然有点绕,但它有效:
  1. 在 Visual Studio 之外进行更改。
  2. 打开"源代码控制资源管理器"。
  3. 右键单击文件夹 > "编辑检出" > "检出"。
  4. 右键单击同一文件夹 > "撤消待处理的更改…" > "撤消更改" > "全部不要"。
完成了。更改现在可见。

3
我强烈建议不要这样做 - 我最担心的是我会手残误触并意外撤销所有合法更改。此外,你正在检查所有文件,这取决于你的客户端和服务器配置,可能会锁定一些或全部文件,并可能在检出时进行最新获取,这肯定会很麻烦。 - Edward Thomson
1
这只是撤销您所做的操作,它并不会让Visual Studio意识到您所做的事情。 - Kyle Delaney
如果您在该会话中创建或添加了新项目:已经消失了! - Christian

4
还有另一种解决方案可使 TFS 找到在 Visual Studio 之外发生更改的文件:
  1. 离线打开解决方案
  2. 在“解决方案资源管理器”中选择解决方案文件,然后按“转到联机”按钮 (GoOnline Button Icon)

此后,TFS 将自动扫描解决方案以查找更改。

第一步可以通过多种不同方式完成。以下是一些方法:

  • 使用 GoOffline 扩展 - 非常简单有效。
  • 如果在打开解决方案时要求 TFS 凭据(没有自动域身份验证),请不要输入凭据。解决方案会离线打开,并在按“转到联机”按钮后登录。
  • (极端解决方案)断开网络电缆;打开解决方案;连接网络电缆。

对我来说起作用了,当TFS宕机时我进行了更改,等它恢复后,我不得不在解决方案文件上点击“上线”以强制识别这些更改。谢谢。 - Péter
对我有用,当 TFS 宕机时我进行了更改,在它恢复后,我不得不在解决方案文件上按“转到联机”以强制识别更改。谢谢。 - Péter

2

Visual Sourcesafe也是这样工作的,我让VSS或TFS注意到更改的方法是在Visual Studio中将文件检出一次。


1

过去我曾经遇到这个问题,当我的互联网断开时,我离线工作,但是大部分的更改没有在Team Explorer中显示。

按照以下步骤操作: 首先,在解决方案资源管理器中,选择要重新协调的文件夹(对我来说,是整个解决方案文件夹),然后选择比较... enter image description here 点击修改筛选器,在筛选器文本框中,您可以输入:

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

在此示例中,搜索将仅包括C#文件,并排除文件夹:bin、obj和packages。

请注意,列待处理更改会显示该文件是否标记为编辑、添加等或未标记。

  • 要将文件标记为编辑(当本地项与服务器项匹配时),选择该文件并选择Check out for Edit...
  • 要将文件标记为添加(当本地项没有任何服务器项时),选择该文件并选择Add Files

最后,我不确定为什么项目没有在这里列出(移除*.cs筛选器后仍无法显示),因此重新构建解决方案,确保项目也得到更新。

+ 在解决方案中,单击标有Go Online的连接按钮(如果显示)。


1
打开源代码控制,进入你的TFS文件夹。右键点击文件夹,选择“比较”。
注意到你编辑过的文件会被标记成红色。
我认为这比使用tfpt online更好,因为它还会获取那些既不是只读又没有被编辑的文件。

0
我发现在Visual Studio 2015中,当项目打开时,Visual Studio会自动发现文件已经被外部修改,并且自动检出这些文件,而无需我进行任何操作。通过正常的方式将项目检入,可以保存外部的修改。

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