我有一个相当大的解决方案的搁置,其中一个元素正在工作。在我的工作区版本中,它不是 - 但是,其他元素在我的工作区版本中工作,而在搁置集中不起作用。因此,合并两个版本会很麻烦而且很耗时。
有没有一种简单的方法可以将搁置集与我的工作区解决方案进行比较,返回所有彼此不同的文件?我知道可以进行一一比较,但是我不确定错误出现在哪里,并且发现这将涉及比较大量文件,其中大多数文件完全相同。
我有一个相当大的解决方案的搁置,其中一个元素正在工作。在我的工作区版本中,它不是 - 但是,其他元素在我的工作区版本中工作,而在搁置集中不起作用。因此,合并两个版本会很麻烦而且很耗时。
有没有一种简单的方法可以将搁置集与我的工作区解决方案进行比较,返回所有彼此不同的文件?我知道可以进行一一比较,但是我不确定错误出现在哪里,并且发现这将涉及比较大量文件,其中大多数文件完全相同。
TFS 电动工具(TFS 电动工具- 请注意,旧版本的 TFS 在该页面上的不同链接中)有一个取消搁置命令 ( tfpt unshelve
),它允许您执行您正在寻找的操作。如果无法自动合并,这将调出合并工具。
创建搁置集时,TFS 会存储文件的哈希值。有两个值,HashValue 是服务器上原始项目的值,UploadHashValue 是搁置集中项目的实际值。
然后,您应该能够创建一个新的搁置集并将其与旧搁置集进行比较:
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);
}
}