TFS, утверждающая, что файлы заблокированы, даже если они не заблокированы - PullRequest
4 голосов
/ 03 ноября 2010

Я пытаюсь выполнить безосновательное слияние между двумя ветвями, используя tf.exe.

Когда я запускаю команду, она терпит неудачу и сообщает мне, что 15-20 файлов заблокированы другим пользователем.Я посмотрел на ожидающие изменения другого пользователя, и у него только три файла извлечены в целевой ветке, и ни один из них не заблокирован.

Кто-нибудь испытывал что-то подобное раньше?

Edit

С помощью Robaticus я обнаружил, что блокировки находятся в таблице tbl_lock, но ожидающие изменения, с которыми они связаны, больше не существуют.Похоже, что существует множество осиротевших блокировок, кроме тех, которые вызывают у нас текущую проблему слияния.

Кто-нибудь знает, что вызывает их, или способ их устранения, который не связан с непосредственным прикосновением к БД?Я собираюсь провести небольшое исследование, чтобы выяснить, смогу ли я найти что-нибудь.

Изменить 2

Первый поиск в Google по запросу "tfs orphaned locks" возвращает это: Сиротские блокировки в TFS

Команда TFS рекомендует удалять их прямо из таблицы, поэтому, наверное, мне придется это сделать.

Я не видел ни одной записипоказывая, что это было исправлено.

Ответы [ 2 ]

4 голосов
/ 03 ноября 2010

Возможно, вы захотите проверить, не заблокированы ли они в заброшенном рабочем пространстве. Для этого установите TFS Power Tools (октябрьская версия) для TFS 2008 . Затем вы можете щелкнуть правой кнопкой мыши папку в проводнике исходного кода и «Найти в системе контроля версий». Используйте «Статус ...», и вы сможете найти все файлы, заблокированные этим пользователем.

Если у вас есть права администратора, вы можете выборочно снять блокировки с любых заблокированных файлов.

* РЕДАКТИРОВАТЬ: впереди опасный код *

Код ниже может быть выполнен для базы данных TFSVersionControl. Это покажет вам все файлы, которые заблокированы. Это может сказать вам, есть ли у вас где-нибудь потерянный файл.

Я бы не советовал вносить какие-либо изменения в эту базу данных, и, конечно, всегда проверяйте, есть ли у вас текущая резервная копия вашего хранилища, прежде чем вы сделаете что-то подобное.

select 
    lck.FullPath,
    wspc.WorkSpaceName,
    id.DisplayName
 from tbl_lock lck
inner join tbl_workspace wspc on wspc.WorkSpaceId = lck.WorkSpaceId
inner join tbl_identity id on id.IdentityId = wspc.OwnerId
2 голосов
/ 04 ноября 2010

Использовали ли вы Attrice Sidekicks , чтобы разобраться в этой проблеме.Это хороший интерфейс для инструментов командной строки TFS.

...