Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何禁用或删除TFS中的候选更改_C#_Api_Tfs - Fatal编程技术网

C# 如何禁用或删除TFS中的候选更改

C# 如何禁用或删除TFS中的候选更改,c#,api,tfs,C#,Api,Tfs,当tfs工作区中的文件移动到tfs之外(例如通过windows资源管理器)时,tfs会将这些移动作为删除和添加进行选择 为了解决这个问题,我运行了一个程序来监视更改,当发生移动时,我会执行Workspace.pendrame,并将updateDisk设置为false 除了tfs将delete添加为候选更改之外,这一切都很好 是否仍有删除此候选更改的方法?如果人们试图推动这些变化,就会产生问题 通过使用Workspace.GetPendingChangesWithCandidates,我可以获得候

当tfs工作区中的文件移动到tfs之外(例如通过windows资源管理器)时,tfs会将这些移动作为删除和添加进行选择

为了解决这个问题,我运行了一个程序来监视更改,当发生移动时,我会执行Workspace.pendrame,并将updateDisk设置为false

除了tfs将delete添加为候选更改之外,这一切都很好

是否仍有删除此候选更改的方法?如果人们试图推动这些变化,就会产生问题

通过使用Workspace.GetPendingChangesWithCandidates,我可以获得候选更改,但似乎没有任何方法可以将其从列表中删除

在执行PendRename之前,我尝试将文件移回其原始位置(file.Move),然后在updateDisk设置为true的情况下执行PendRename。这实际上适用于单个文件,但在涉及文件夹等时会变得复杂

我希望有一种简单的方法可以从列表中删除候选更改,或者甚至对某些文件/文件夹禁用候选更改功能。我尝试将文件夹添加到.tfignore文件中,但不起作用


在TFS中,有两种类型的移动文件。我已将以下两种产品的样品装箱:

本地工作区(窗口爆炸器)直接移动/拖动文件
  • 在我的工作区中,我将把2.PNG移到Main branch 文件夹
  • 然后,我们可以使用add(在new中)检查TFS与One中检测到的内容 位置),其中一个在升级候选更改中带有删除(在旧位置)

  • 您需要同时签入添加和删除(首先升级)。最后 您将得到您想要的服务器和本地

  • 直接在解决方案资源管理器中移动文件
  • 在解决方案资源管理器中,我将把1.PNG移到Main 通过右键单击并选择移动文件夹
  • 您将直接获得一个带有重命名状态的挂起更改 没有任何促进候选人的变化

  • 然后我们可以检查我们的本地工作区,您将看到1.PNG是 在工作区文件夹中自动删除,即使您尚未签入更改。最后检查挂起 变化,一切都很好和干净。


  • 回到您的问题:升级候选更改显示删除,即使文件已重命名

    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
    是正确的方法检查