查找与shelveset不同的所有文件?

时间:2013-02-21 12:31:38

标签: c# visual-studio-2010 visual-studio tfs shelve

我有一个很大的解决方案,其中一个元素正在运行。在我的工作区版本中,它不是 - 但是,其他元素在我的工作区版本中工作,但在shelveset中不起作用。因此,合并两个版本将是混乱和耗时的。

有没有一种简单的方法来比较shelveset和我的工作区解决方案,返回彼此不同的所有文件?我知道可以逐一进行比较,但是我不确定错误发生在哪里,并且发现这将涉及比较大量文件,其中大部分是完全相同的。

2 个答案:

答案 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);
    }
}