получить мультиверсионный отчет о различиях из TFS?

Раньше я использовал другой инструмент управления версиями, и он позволил мне получить «отчет о различиях»: все изменения, внесенные в файл между версией X и версией Y (включая строки, добавленные / удаленные между каждой версией, которых может быть много версий) в одном текстовом файле. Это было очень удобно в ситуациях, когда вы почти уверены, что раньше в вашем файле был какой-то код, а теперь его нет (удобно, когда ваш БА говорит, что нужно что-то добавить, а вы думаете: «Разве я не убрал это ?!» ).

Преимущество здесь в том, что вы получаете один текстовый файл, в котором есть все изменения в кодовой базе, которые вы затем можете искать. Это эквивалентно выполнению сравнения каждой версии (10–9, 9–8 и т. Д.) С последующим сохранением результатов каждого сравнения в текстовый файл.

Я не вижу простого способа сделать это в TFS. Есть ли плагин / powertool для этого? Гугл мне ничего не дал.


person jcollum    schedule 27.08.2009    source источник
comment
Вы ищете что-то подобное? stackoverflow.com/questions/782145/ Если хотите, отправьте мне письмо kaneraz по адресу hotmail, и я пришлю вам код, который я изменил для работы с нашим лейблом diff.   -  person Ryan    schedule 28.08.2009


Ответы (2)


Я не знаю ни одного готового решения. Однако сделать его самому несложно, если у вас есть TFS Power Toys и PowerShell. Попробуйте это в PowerShell:

Add-PSSnapin Microsoft.TeamFoundation.PowerShell

Get-TfsItemHistory foo.cs | foreach {
  tf diff "foo.cs;C$($_.ChangesetId)" `
          "foo.cs;C$($_.ChangesetId - 1)" `
          /format:unified
} 
person Pavel Minaev    schedule 27.08.2009
comment
Что ж, это хорошая идея. Однако: Add-PSSnapin: оснастки Windows PowerShell недоступны для версии 1. Так что, очевидно, мне нужен PS 2.0. Что, похоже, недоступно для моей системы. - person jcollum; 27.08.2009
comment
Это сообщение об ошибке означает, что в вашей системе не установлены какие-либо оснастки. Вы уверены, что у вас самая последняя версия TFPT и что вы не сняли флажок PowerShell во время установки? Самая последняя версия установщика находится здесь: microsoft .com / downloads / - person Pavel Minaev; 27.08.2009
comment
Кроме того, если вы используете 64-разрядную версию Windows, имейте в виду, что оснастка TFS PowerShell является только 32-разрядной, поэтому для ее использования необходимо запустить 32-разрядную оболочку PowerShell (у вас должен быть отдельный значок, созданный установщиком PS для 32-битная оболочка). - person Pavel Minaev; 27.08.2009
comment
Ах, вот и все, мне пришлось изменить установку TFS Power Toys, чтобы подключить ее к PowerShell. Теперь у меня другая ошибка. Я дам вам знать, если не смогу ее решить. - person jcollum; 28.08.2009
comment
Ближе: термин «tf» не распознается как командлет, функция, работающая программа или файл сценария. - это происходит в цикле, поэтому на моем экране появляется много таких. - person jcollum; 28.08.2009
comment
Да, это другое. В любом случае tf не исходит оттуда - это не командлет PowerShell, а tf.exe, поэтому, вероятно, его просто нет в вашем PATH. Он должен находиться в той же папке, где находится devenv.exe - что-то вроде C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE. - person Pavel Minaev; 28.08.2009

Павел направил меня в правильном направлении, но сценарий, который у меня получился, был намного сложнее. И все же может быть не правильно. Мне приходилось учитывать изменение имени файла.

$snapin = get-pssnapin  | select-string "Microsoft.TeamFoundation.PowerShell"

if ($snapin -eq $null) { 
Write-Host "loading snap in..."     
     Add-PSSnapin Microsoft.TeamFoundation.PowerShell 
  }

$fileName = $args[0]  Write-Host "// File name " $fileName 
$results = @(Get-TfsItemHistory $fileName )  | select changesetid, @{name="Path"; expression={$_.changes[0].item.serveritem}}

$i = 0

$cmdArray = @() 

do {   
   if ( $results[$i+1] -ne "" ) {   
   $cmdArray +=  "tf diff ""{0};{1}"" ""{2};{3}""  /format:unified" -f $results[$i].Path, $results[$i].ChangeSetId, $results[$i+1].Path, $results[$i+1].ChangeSetId     
   } ; 
    $i++ 
} until ($i -ge ($results.length - 1))

foreach ($cmd in $cmdArray) {   
   #Write-Host "// " $cmd   
   iex $cmd  }
person jcollum    schedule 28.08.2009