【问题标题】:TFS Force Get programmatically via SDKTFS Force 通过 SDK 以编程方式获取
【发布时间】:2019-02-22 20:32:27
【问题描述】:

我想不出任何方法可以强制以编程方式从 TFS 获取文件。我当前的代码:

_workspace.Get(new GetRequest(serverPath, RecursionType.None, new DateVersionSpec(dateTime)), GetOptions.Overwrite);

上面的代码会得到一个特定的版本,但是如果我手动删除文件,TFS 认为它仍然存在。如何对特定版本使用强制获取?

【问题讨论】:

    标签: c# .net tfs tfs-sdk


    【解决方案1】:

    要强制获取,请使用GetOptions.GetAll。例如:

    workspace.Get(new GetRequest(serverPath, RecursionType.None, new DateVersionSpec(dateTime)), GetOptions.Overwrite | GetOptions.GetAll);
    

    【讨论】:

      【解决方案2】:

      我真的想通了。 使用 GetAll 的问题在于,它可以获取所有内容,而我只想要特定文件的一个特定版本。

      这就是我所做的:

      _controlServer.GetItems(serverPath, new DateVersionSpec(dateTime), RecursionType.None).Items[0].DownloadFile(_workspace.GetWorkingFolderForServerItem(serverPath).LocalItem);
      

      【讨论】:

      • 因为如果你调用 Get() 那么 TFS 只会在它认为应该更新文件时更新文件。我上面提到的方式就像只对一个文件进行强制获取。
      • 这就是 GetOptions.GetAll 实际上的用途。
      • 您建议的机制不会更新您工作区中的文件 - 它只会将文件下载到磁盘并且您将面临可写文件冲突。
      • 爱德华,感谢您的回复。关于 download() 当它变得可写时会导致问题,这是非常正确的。但我相信 GetOptions.GetAll 会获取所有文件,这将是一件非常糟糕的事情,因为其他文件的大小非常大。我使用了 Download() ,它返回一个流并将流发送给用户,所以在这种情况下我不会遇到你提到的问题。
      • “所有文件”是什么意思?您只会获得指定的ItemSpecs,但它会获得所有这些(“强制获取”)它们,无论它们是否已经是最新的。如果您不想要所有这些项目,请传递您想要的ItemSpecs。
      猜你喜欢
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多