TFS: поиск файлов, затронутых между наборами изменений

Мы используем Team Foundation Server 2012.

У нас был парень, который подавал 97 файлов (не считая файлов дизайнеров и ресурсов) в "Изменениях 13646" 8/9/2016.

Десять (10) дней спустя 18.08.2016, он перевернул эти изменения обратно в Редактирование 13716.

В течение этого времени были представлены и завершены другие рабочие элементы.

Есть ли способ запросить TFS для поиска Filenames и WorkItems, которые были включены в любой набор изменений между 13646 и 13716?

Я хотел бы, чтобы это был SQL-запрос, который я могу запустить в SQL Server Management Studio.

Ответ 1

Хотя это для TFS 2013, я надеюсь, что он работает в 2012 году. Это было выполнено против базы данных tfs_warehouse

 SELECT DISTINCT df.[FileName]
    ,df.FilePath
    ,dcs.ChangesetID AS 'ChangeSetID'
    ,dwi.System_id AS 'WorkItemID'
    ,dwi.System_WorkItemType
    ,dwi.System_State
    ,dwi.System_CreatedDate
    ,dwi.System_ChangedDate

FROM DimFile df 
JOIN FactCodeChurn fcc ON df.FileSK = fcc.FilenameSK
JOIN FactWorkItemChangeset fwi ON fcc.ChangesetSK = fwi.ChangesetSK
JOIN DimWorkItem dwi ON fwi.WorkItemID = dwi.System_id
AND fwi.TeamProjectCollectionSK = dwi.TeamProjectCollectionSK
AND fwi.RemovedDateTime = CONVERT(DATETIME, N'9999', 126)
JOIN DimChangeset dcs ON dcs.ChangesetSK = fcc.ChangesetSK 

WHERE dcs.ChangesetID BETWEEN 13646 AND 13716

ORDER BY dcs.ChangesetID

В пути к файлу также есть имя файла внутри него, но я думал, что я буду включать имя файла в отдельное поле

Ответ 2

Существует также способ сделать это с помощью SQL-запроса с использованием хранилища реляционных данных. Для этого вам понадобится доступ к базе данных tfs_warehouse. Есть несколько таблиц измерений, которые вы должны присоединиться, чтобы получить то, что вам нужно:

Вы можете использовать dbo.WorkItemChangeset для связи между наборами изменений и рабочими элементами и dbo.CodeChurn для связи между наборами изменений и файлами.

Документация по этому вопросу является старой и неполной, но вот некоторые ссылки, которые объясняют таблицы фактов и измерений:

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

К сожалению, у меня нет доступа к базе данных tfs_warehouse на данный момент, поэтому я не могу предоставить вам точный запрос. Но этот вопрос имеет аналогичный запрос, который вы могли бы изменить.

Ответ 3

tf history с параметром /format: Подробный не может отображать связанные рабочие элементы, которые не будут соответствовать вашим требованиям.

Он не предлагает напрямую запрашивать базу данных. Вместо этого вы можете использовать команду tf changeset для отображения полной информации, которая будет включать измененные элементы и связанные с ними рабочие элементы:

tf changeset changesetnumber /noprompt /collection:TeamProjectCollectionUrl

В вашем случае вам нужно запустить две команды, например:

tf changeset 13646 /noprompt /collection:TeamProjectCollectionUrl
tf changeset 13716 /noprompt /collection:TeamProjectCollectionUrl

Проверьте мой пример в следующем скриншоте:

введите описание изображения здесь

Ответ 4

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

tf history /collection:"tfsserverurl/collection" $/TFSbranchName /noprompt /recursive /format:detailed /v:C13646~C13716 > changeset.log

Пример:

Изменения: 13646 Пользователь: LastName, FirstName Дата: четверг, февраль 16, 2017 4:26:50 PM

Комментарий: Добавленные значения/код обратно пропущены из кода ветки в декабре слияния

Элементы: изменить $/TFSBranchName/abc.cs

Примечания к записям: обзор кода: обзор производительности: безопасность Рецензент:

Если вы скопируете все "Элементы" из файла журнала (changeset.log), вы должны получить все файлы, которые были изменены в этих changsets.