【发布时间】:2017-12-02 07:36:06
【问题描述】:
我正在使用 TFS API 来获取 TFS 绑定文件夹下的最新代码文件、目录、.csproj 文件等。
同样,我使用类似以下的内容:
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new
Uri(ConfigurationManager.AppSettings["TFSUrl"]));
tfs.EnsureAuthenticated();
var vsStore = tfs.GetService<VersionControlServer>();
string workingFolder = @"C:\TFS\SolutionFolder";
Workspace wsp = vsStore.TryGetWorkspace(workingFolder);
if (wsp != null)
{
ItemSet items = vsStore.GetItems(workingFolder, VersionSpec.Latest, RecursionType.Full);
string relativePath = workingFolder + @"/";
foreach (Item item in items.Items)
{
string relativePath1 = item.ServerItem.Replace("$/TFS/SolutionFolder", relativePath);
if (item.ItemType == ItemType.Folder)
{
Directory.CreateDirectory(relativePath1);
}
else
{
item.DownloadFile(relativePath1);
}
}
}
现在,我获取要下载的项目,然后开始下载。但是,我希望它像 VS 处理它的方式一样 - 如果(且仅当)文件/文件夹发生更改,则只下载相同的内容。使用此代码,我总是会在该文件夹中获得“n”个文件/文件夹,然后我会覆盖它们。错误的方法,我知道。但是,我可以修改此代码以检查文件夹或文件的上次更改时间,然后选择覆盖它或忽略它。这是一种选择,尽管那是一个糟糕的选择。
现在,我希望仅获取实际需要更改的文件/文件夹列表,即增量更改。之后,我可以选择覆盖/忽略该列表中的每个项目。因此,在目前的情况下,如果创建了一个新文件/文件夹(或现有文件/文件夹之一在 $/TFS/SolutionFolder 中发生更改,即在服务器中),那么我只想在文件列表中提取该项目/要更改的文件夹(并在 C:\TFS\SolutionFolder 中决定我想用它做什么)。
另外,是否使用 VersionControlServer.QueryHistory() 的重载选项之一?我有这样的事情:
(latestVersionIdOf $/TFS/SolutionFolder) - (existingVersionIdOf C:\TFS\SolutionFolder) = (Versions that I'd go out and get back from the server, for that folder)
记住。
任何指针都会很有帮助。谢谢!
【问题讨论】:
-
为什么不使用 vsStore.Get() 方法将文件获取到工作区?它只会获取过期的文件。
-
谢谢,埃迪!我会检查这种方法。另外,我刚刚发布了我目前所拥有的更新答案。让我知道你的想法。干杯!
标签: c# visual-studio tfs