gpt4 book ai didi

c# - 获取最新方法总是重新下载

转载 作者:太空狗 更新时间:2023-10-30 00:54:36 25 4
gpt4 key购买 nike

我正在使用 TFS SDK,我有一个方法可以获取最新版本的项目。但是当我调用方法时,它总是重新下载文件。这也需要很长时间。

我试过了,我得到了 changeSet 并且我比较了特定的项目。如果项目有变化,请下载它。但是这种方式也需要很长时间。

这是我的第一个没有检查 changeSet 的代码

ItemSet items = sourceControl.GetItems(itemPath, VersionSpec.Latest, RecursionType.Full);
foreach (Item item in items.Items)
{
localName = item.ServerItem.ToString();
localName = localName.Substring(2, (localName.Length - 2)).Replace("/", "\\");

switch (item.ItemType)
{
case ItemType.Any:
throw new ArgumentOutOfRangeException("ItemType returned was Any; expected File or Folder.");
case ItemType.File:
item.DownloadFile("D:\\WORK\\Tries\\"+localName);
break;
case ItemType.Folder:
Directory.CreateDirectory("D:\\WORK\\Tries\\"+localName);
break;
}
}

这是我检查变更集的新代码

ItemSet items = sourceControl.GetItems(itemPath, VersionSpec.Latest, RecursionType.Full);

foreach (Item item in items.Items)
{
localName = item.ServerItem.ToString();
localName = localName.Substring(2, (localName.Length - 2)).Replace("/", "\\");

var histories = sourceControl.QueryHistory(itemPath, VersionSpec.Latest, 0, RecursionType.OneLevel, null, null, null, Int32.MaxValue, true, false, true);
bool check = false;

foreach (Changeset history in histories)
{
foreach (Change change in history.Changes)
{
if (change.Item.Equals(item))
check = true;
}

}

switch (item.ItemType)
{
case ItemType.Any:
throw new ArgumentOutOfRangeException("ItemType returned was Any; expected File or Folder.");
case ItemType.File:
if(check)
item.DownloadFile("D:\\WORK\\Tries\\"+localName);
break;
case ItemType.Folder:
if(!Directory.Exists("D:\\WORK\\Tries\\" + localName))
Directory.CreateDirectory("D:\\WORK\\Tries\\"+localName);
break;
}
}

有人有什么建议吗?谢谢。

编辑:我这样解决了问题:

            String ServerFolder = itemPath; // start with "$/ + serverFolder path"
itemPath = itemPath.Substring(2, (itemPath.Length - 2)).Replace("/", "\\");

String LocalFolder = @"D:\WORK\"+itemPath;

WorkingFolder workfolder = new WorkingFolder(ServerFolder, LocalFolder);
workspace.CreateMapping(workfolder);

workspace.Get(VersionSpec.Latest,GetOptions.Overwrite);

最佳答案

如果您尝试将工作区更新为最新的更改,您实际上调用了错误的方法。 VersionControlServer.GetItems() 是一种要求服务器列出它拥有的项目的方法。它总是会告诉你相同的答案。

如果您尝试将工作区中的项目更新为最新版本,您需要获取相应的工作区对象,然后对该对象调用“Get”方法。这将从您请求的版本下载过时的文件。

编辑:添加一些示例代码:

// Get a reference to our Team Foundation Server. 
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri("http://<yourserver>:8080/tfs/<yourcollection> "));

// Get a reference to Version Control.
VersionControlServer versionControl = tpc.GetService<VersionControlServer>();

Workspace workspace = versionControl.GetWorkspace("<local path to your workspace>");
workspace.Get();

关于c# - 获取最新方法总是重新下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12301311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com