Объясняя TF Diff - PullRequest
       29

Объясняя TF Diff

7 голосов
/ 29 января 2010

Использование инструментов Visual Studio 2008,

Я пытаюсь получить ASCII-наборы изменений 14318 и 14317.

Я могу сделать это с помощью графического интерфейса:

tf changeset 14318

, затем выберите файл, щелкните правой кнопкой мыши и выберите сравнить с предыдущей версией. Однако, это немного утомительно и основано на графическом интерфейсе. Моя задача - перенести многие изменения в другую ветку. Я хотел бы автоматизировать тестирование (скажем, с помощью Python), убедившись, что я сделал это правильно. Что ж, в образовательных целях я внесу все изменения вручную, не глядя на решение, а затем сравню эти два изменения и постараюсь найти любые различия. Вот что мне нравится в TF - я могу напечатать:

tf changeset 14318 > out.txt&&notepad out.txt

для просмотра сведений о том, какие файлы были затронуты.

Точно так же я хочу получить out.txt со всеми сохраненными в нем различиями. Я почти уверен, что справлюсь с частью Python. Я определенно хочу знать, как это сделать с помощью инструмента tf.exe, но если вам также приходилось знать другие приемы для этого (какой-нибудь крутой инструмент стороннего производителя или скрипт PowerShell, пожалуйста, дайте мне знать) *

Спасибо!

Да, кстати, я проверил это: http://msdn.microsoft.com/en-us/library/6fd7dc73(VS.80).aspx

И я попробовал это:

tf diff 14318 14317

И я получил эту ошибку: Файл (или папка) c: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ 14318 не существует.

Теперь спасибо.

РЕДАКТИРОВАТЬ: Есть ли какие-либо инструменты, которые могут сделать это?

Ответы [ 2 ]

20 голосов
/ 30 января 2010

Вы просто не используете правильный синтаксис при вызове. В этом случае он попытался провести различие между вашей рабочей копией и базовой версией репозитория (несуществующих) файлов 14318 и 14317.

Вместо этого вам нужно использовать диапазон изменений в /version, например:

tf diff $/Foo /version:C14317~C14318 /recursive /format:unified > foo.diff

Обратите внимание, что вы можете использовать ~ с любыми другими спецификациями версий - надписями, датами и т. Д. Подробнее см. здесь .

1 голос
/ 30 августа 2010

Вот сценарий PowerShell (V2), выходящий из ответа Павла, который будет более производительным, потому что мы находим файлы, которые изменились, а затем получаем tf для их индивидуального сравнения:

Write-Host "Checking if TFS snap-in has been added..." -ForegroundColor green

# Find all TFS snapins.
$snapins = Get-PSSnapin -Registered | Where-Object { $_.Name -like "*TeamFoundation*" } 

foreach($snapin in $snapins)
{ 
    # Add snapin if not already added.
    $exists = Get-PSSnapin | Where-Object { $_.Name -eq $snapin.Name } 
    if (!$exists)
    {
        Write-Host "Adding Snapin " $snapin.Name -ForegroundColor green 
        Add-PSSnapin $snapin.Name 
    }
    else
    {
        Write-Host "Snapin already added." -ForegroundColor green
    }
}



# Get TFS Server object reference.
$tfs_server = Get-TfsServer -Name $/<serverName>/<RepoDir>

# Get list of changed files 
$changes_from_changeset = Get-TfsChangeset -ChangesetNumber 829 | Select -Expand Changes | % { $_.Item.ServerItem }
#$changes_from_changeset

foreach($change in $changes_from_changeset)
{
    &"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe" diff $change /version:829~T /format:unified
}
...