我有一个很大的解决方案,其中一个元素正在运行。在我的工作区版本中,它不是 - 但是,其他元素在我的工作区版本中工作,但在shelveset中不起作用。因此,合并两个版本将是混乱和耗时的。
有没有一种简单的方法来比较shelveset和我的工作区解决方案,返回彼此不同的所有文件?我知道可以逐一进行比较,但是我不确定错误发生在哪里,并且发现这将涉及比较大量文件,其中大部分是完全相同的。
答案 0 :(得分:1)
TFS电动工具(TFS Power Tools - 请注意旧版本的TFS在该页面上的不同链接中)有一个令人难以置信的命令(tfpt unshelve
),可以让你做你想要的。如果它不能自动合并,这将调出合并工具。
答案 1 :(得分:1)
创建搁置集时,TFS会存储文件的哈希值。有两个值,HashValue是服务器上原始项的值,UploadHashValue是shelveset中项的实际值。
然后,您应该能够创建一个新的shelveset并将其与旧版本进行比较:
var shelvesetOld = vcs.QueryShelvesets("shelveset_old", null).FirstOrDefault();
var shelvesetOldChanges = vcs.QueryShelvedChanges(shelvesetOld)[0].PendingChanges;
var shelvesetNew = vcs.QueryShelvesets("shelveset_new", null).FirstOrDefault();
var shelvesetNewChanges = vcs.QueryShelvedChanges(shelvesetNew)[0].PendingChanges;
var differences = new List<PendingChange>();
foreach (var oldChange in shelvesetOldChanges) {
var shelvesetNewChange = shelvesetNewChanges.FirstOrDefault(shelvesetChangeSearch => shelvesetChangeSearch.ServerItem.Equals(oldChange.ServerItem));
if (shelvesetNewChange == null) {
differences.Add(oldChange);
continue;
}
if (!shelvesetNewChange.UploadHashValue.SequenceEqual(oldChange.UploadHashValue)) {
differences.Add(oldChange);
}
}