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.