我现在的tfs将在未来几个月内退役。我正在使用tfs api在现有服务器上的新服务器上创建并行tfs。我有已重命名的文件夹和解决方案。我正在迭代项目并根据他们的changetype(添加,编辑,删除,sourcerename等),我在目的地tfs检查它们。
我无法获取文件的旧文件名,以便在正在迭代的项目为Delete | SourceRename或Rename时使用PendRename。
我尝试了上述解决方案:
但是,我的变更集有很多变化,因此识别特定文件似乎很难。
我们是否有一些内容可以删除除变更集之外的两个项目(已删除和重命名的),因为需要有一个唯一的标识符来关联这两个项目,以便它们可以在TFS历史记录中一起显示?
答案 0 :(得分:1)
我在某个地方读了这个并为了我的目的修改它,以便我可以获得给定服务器项的父分支:
ItemSpec itemSpec = new ItemSpec(serverItem,RecursionType.None);
BranchHistoryTreeItem[][] results = sourceTFSHelper.VCS.GetBranchHistory(
new ItemSpec[] { itemSpec }, VersionSpec.Latest);
BranchHistoryTreeItem[] thisBranchResults = results[0];
foreach (BranchHistoryTreeItem treeItem in thisBranchResults)
{
BranchRelative requestedItem = FindRequestedItem(treeItem);
if (requestedItem != null)
{
return (requestedItem.BranchFromItem == null) ? null : requestedItem.BranchFromItem.ServerItem;
}
}
答案 1 :(得分:0)
在这里肯定可以改善TFS API的支持。对于该解决方案,您将必须查找存储在MergeSources容器中的关联的Delete更改实例。
下面,我粘贴了一些示例代码,希望可以从中启发您。
var changeInstances = VersionControlSvr.GetChangesForChangeset(
%YourChangesetId%,
false,
Int32.MaxValue,
null,
null,
true);
foreach (Change changeInstance in changeInstances)
{
Console.WriteLine(changeInstance);
//if (changeInstance.MergeSources != null && changeInstance.MergeSources.Count > 0)
//{
// var source = changeInstance.MergeSources.FirstOrDefault();
// Console.WriteLine($"{changeInstance.Item.ServerItem}");
// Console.WriteLine("was renamed from:");
// Console.WriteLine($"{source.ServerItem}");
// Console.WriteLine("::::::::::::::::::::::::::::::::::::::::::::::::::::::");
//}
}