【问题标题】:How to remove local tfs content programmatically?如何以编程方式删除本地 tfs 内容?
【发布时间】:2009-06-13 17:23:12
【问题描述】:

我有以下情况。

我使用 TFS 以编程方式创建一个临时工作区。然后,我将其映射到本地计算机上的某个位置,以便能够签入/签出文件。由于通过工作区映射到本地驱动器是创建文件结构的原因。通过我创建的工作区对象删除映射的方法是什么?

我尝试了以下方法。

WorkingFolder tempFolder = workspace.getWorkingFolderForServerItem(serverItem);
workspace.DeleteMapping(tempFolder);

在调试模式下单步执行,我创建的 tempFolder 对象拥有正确的本地映射以及正确的服务器映射。我似乎无法让它删除本地内容。这大部分是正确的还是您提出了完全不同的建议?

【问题讨论】:

    标签: c# tfs


    【解决方案1】:

    在 TFS 中,在本地删除文件并告诉服务器您不再拥有它们的技巧是在变更集 1 处获取文件(即在它们存在之前)。在类似这样的代码中:

    workspace.Get(
        new string[] {"C:\\LocalPath"},
        new ChangesetVersionSpec(1),
        RecursionType.Full,
        GetOptions.None);
    

    请参阅以下博客文章,我在其中进一步解释了这个概念:

    也就是说,如果工作区只是临时的并且您不再需要它,那么执行 workspace.Delete() 然后执行传统的文件删除是一种非常好的做事方式。如果您试图保留工作区,那么您可能会遇到麻烦(因为 TFS 认为这些文件仍在您的本地工作区中,除非您告诉它它们不在)

    【讨论】:

      【解决方案2】:

      由于通过工作区映射到本地驱动器是创建文件结构的原因。

      我认为你错了。本地文件夹(和文件)仅在您在创建映射后执行 get 时创建(无论是从团队资源管理器 GUI、“tf.exe get”还是其他方式)。

      删除工作区映射后,您需要自己创建代码来删除文件和文件夹。

      【讨论】:

      • 感谢您在实际下拉本地内容时纠正我。
      【解决方案3】:

      感谢 Richard,我决定不尝试通过工作区删除文件。

      给定:

      WorkingFolder tempFolder = workspace.getWorkingFolderForServerItem(serverItem);
      

      我最终做了:

      File.setAttributes(tempFolder.LocalItem, FileAttributes.normal)//Get rid of read-only
      File.Delete(tempFolder.LocalItem);
      

      感谢您的帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2015-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多