假设我有一个Item-Id或ServerItem(路径)。 我需要知道,这个项目已被移动
当前和旧位置。 如何使用Serverside上的给定信息来解决这个问题?
当您显示项目的历史记录时,Visual Studio可以显示所有位置。
我尝试了versioncontrol.QueryHistory,但这只返回当前itemid的历史记录。移动文件确实会更改itemid,但我不知道如何获取不同的ID。
查询合并似乎也无效。
让我说我查询 ItemId 1234 ,我希望结果是这样的:
- ItemId 1789 ServerItem $/somwhere/path1/hadTobeRenamedAsWell.cs //newest
- ItemId 1234 ServerItem $/somwhere/path2/item.cs
- ItemId 1200 ServerItem $/somwhere/path3/item.cs
- ItemId 1001 ServerItem $/somwhere/path4/item.cs // oldest
如果这在服务器端无效,请在客户端上进行吗?
这是我用来获取物品的方法
private static TeamFoundationDataReader queryVersionControl(
TeamFoundationRequestContext requestContext,
TeamFoundationVersionControlService versionConrol,
IEnumerable<string> items,
string workspaceName,
string workspaceOwnername)
{
return versionConrol.QueryItems(requestContext,
workspaceName,
workspaceOwnername,
items.Select(i => new ItemSpec(i, RecursionType.None)).ToArray(),
new LatestVersionSpec(),
DeletedState.Any,
ItemType.File,
false,
0);
}
答案 0 :(得分:3)
如果您提供文件的当前路径,这是一个应该返回您要查找的结果的简单方法。
/// <summary>
/// Writes out the history of changes to a file.
/// </summary>
/// <param name="path">The path to a file similar to $/FabrikamFiber/Main/FabrikamFiber.CallCenter/FabrikamFiber.CallCenter.sln</param>
private static void _GetHistory(string path)
{
using (TeamProjectPicker tpp = new TeamProjectPicker(TeamProjectPickerMode.SingleProject, false, new UICredentialsProvider()))
{
if (tpp.ShowDialog() == DialogResult.OK)
{
TfsTeamProjectCollection projectCollection = tpp.SelectedTeamProjectCollection;
VersionControlServer server = projectCollection.GetService<VersionControlServer>();
Item item = server.GetItem(path);
int changeId = item.DeletionId != 0 ? item.ChangesetId - 1 : item.ChangesetId;
ChangesetVersionSpec versionCurrent = new ChangesetVersionSpec(changeId);
ChangesetVersionSpec versionFrom = new ChangesetVersionSpec(1);
IEnumerable changesets = server.QueryHistory(path, versionCurrent, 0, RecursionType.None, null, versionFrom, LatestVersionSpec.Latest, int.MaxValue, true, false);
foreach(Changeset changeset in changesets)
{
Item info = changeset.Changes[0].Item;
Console.WriteLine(string.Format("ItemId {0} ServerItem {1}", info.ItemId, info.ServerItem));
}
}
}
}