C# 如何禁用或删除TFS中的候选更改
当tfs工作区中的文件移动到tfs之外(例如通过windows资源管理器)时,tfs会将这些移动作为删除和添加进行选择 为了解决这个问题,我运行了一个程序来监视更改,当发生移动时,我会执行Workspace.pendrame,并将updateDisk设置为false 除了tfs将delete添加为候选更改之外,这一切都很好 是否仍有删除此候选更改的方法?如果人们试图推动这些变化,就会产生问题 通过使用Workspace.GetPendingChangesWithCandidates,我可以获得候选更改,但似乎没有任何方法可以将其从列表中删除 在执行PendRename之前,我尝试将文件移回其原始位置(file.Move),然后在updateDisk设置为true的情况下执行PendRename。这实际上适用于单个文件,但在涉及文件夹等时会变得复杂 我希望有一种简单的方法可以从列表中删除候选更改,或者甚至对某些文件/文件夹禁用候选更改功能。我尝试将文件夹添加到.tfignore文件中,但不起作用C# 如何禁用或删除TFS中的候选更改,c#,api,tfs,C#,Api,Tfs,当tfs工作区中的文件移动到tfs之外(例如通过windows资源管理器)时,tfs会将这些移动作为删除和添加进行选择 为了解决这个问题,我运行了一个程序来监视更改,当发生移动时,我会执行Workspace.pendrame,并将updateDisk设置为false 除了tfs将delete添加为候选更改之外,这一切都很好 是否仍有删除此候选更改的方法?如果人们试图推动这些变化,就会产生问题 通过使用Workspace.GetPendingChangesWithCandidates,我可以获得候
在TFS中,有两种类型的移动文件。我已将以下两种产品的样品装箱: 本地工作区(窗口爆炸器)直接移动/拖动文件
回到您的问题:升级候选更改显示删除,即使文件已重命名 TFS API应该使用上面的方法2。看看这些参数: 更新磁盘 如果为true,则根据挂起的更改更新本地磁盘; 如果为false,磁盘不会被修改,更改也不会被删除 已确认
因此,如果将updateDisk设置为false,则磁盘中仍应存在1.PNG,TFS会检测到它,添加以提升候选更改将显示已删除。这符合你的截图。解决方案应该是将值从false更改为true 您是否使用本地工作空间?本地工作区将监视磁盘上的更改,因此,如果将文件从工作区中的一个目录移动到工作空间中的另一个目录,则会检测到移动。TFS中的移动是删除+添加,因此您描述的行为是预期的。如果不希望工作区监视磁盘上的更改,请改用服务器工作区。这里描述的本地工作区和服务器工作区之间存在一些差异:Sander,在TFS中,移动不是添加和删除,这将丢失所有文件历史记录。TFS中的移动称为重命名。Patrick,工作区中的文件在不知道TFS的情况下被移动,因此TFS将这些文件作为删除和添加进行处理。我想让TFS明白,这实际上是一个移动/重命名。@Zenix这是一个正确的现象,当在源代码管理资源管理器之外进行重命名时,更改将被检测为两个单独的操作,一个删除,一个添加。我无法想象这可能是出于设计。看来这一定是个bug,我正试图找到一个解决办法。也许我对这个问题解释得不够清楚。我使用Workspace.pendrame重命名文件。这将进入我的待定更改。然后,TFS将原始文件名的删除添加到我的候选更改中。因此,TFS正在为丢失的文件添加候选删除项,即使它知道该文件已重命名。@Zenix如果文件重命名正确,历史记录不会“消失”,而是与“旧名称”关联。但是,当在源代码管理资源管理器之外进行重命名时,更改将被检测为两个单独的操作,一个删除,一个添加。您可以使用“挂起的更改”窗口将这些更改升级为重命名,以便保留历史记录。@Zenix更多详细信息请查看jessehouwing在这个问题中的回答我需要以编程方式完成此升级。这就是为什么我在updateDisk设置为false的情况下执行PendRename。如果有更好的方法,我很想知道。如果有一个方法promoteARename(pendingDelete,pendingAdd),那将是完美的,但是api似乎没有公开这样的功能。这就是为什么我认为它是一个bug,TFS知道文件已经被重命名,但是仍然为它添加了一个候选删除。这就像告诉你母亲你妹妹去了商店,然后她还是提交了一份失踪人员报告。@Zenix使用c#API移动TFS文件只需要workspace.pendrame(oldPath,newPath);使用“workspace.GetPendingChanges()”和“workspace.CheckIn()”方法执行此操作。在您的情况下,您还需要检查“候选挂起更改”(TFS客户端已确定磁盘上存在的更改),然后首先将它们升级为实际的挂起更改。要以编程方式使用此升级,
Workspace.GetPendingChangesWithCandidates
是正确的方法检查