2016-02-29 3 views
1

Недавно мы обновились с TFS 2010 до TFS 2015. Все кажется прекрасным после обновления, но мы получаем ошибку «Элемент заблокирован в рабочей области (ноль ноль)." в некоторых файлах управления версиями. Похоже, у нас есть некоторые осиротевших замки, которые должны быть найдены и очищены, но таблица базы данных tbl_lock не в базе данных, поэтому следующий запрос на выборку не будет работать:TFS 2015 Элемент заблокирован в рабочей области (null); (null)

select * FROM tbl_Lock l 
LEFT JOIN tbl_PendingChange pc 
ON l.PendingChangeId = pc.PendingChangeId 
WHERE pc.PendingChangeId IS NULL 

Кто-нибудь знает, как обнаружить и удалить эти блокировки в TFS 2015?

Я также установил электроинструменты TFS, и ни Visual Studio 2015, ни электрические инструменты не собирают блокировки.

Обновлено:

Кстати, когда я запускаю запрос SELECT, чтобы узнать, где PendingChangeId является NULL, я получаю обратно никаких строк. Я думаю, что трюк - ЛЕВЫЙ ПРИСОЕДИНЕНИЕ. PendingChangeId будет NULL, если tbl_Lock также не имеет записи для PendingChangeId на tbl_PendingChange (и, таким образом, блокировка была потеряна). Поэтому мне все равно нужно знать, где, как правило, PendingChangeId должен быть подключен к TFS 2015, чтобы определить, какие файлы имеют плохой замок. (Или там, где рабочее пространство больше не существует, что может быть другим возможным источником для выпуска.)

И еще мне нужно знать, как очистить эти плохие замки. Я бы предпочел сделать это с помощью инструментов, либо с помощью графического интерфейса, либо с помощью командной строки, но также мог бы сделать это программно либо с использованием файлов API-интерфейсов API, либо с помощью файлов объектной модели TFS для TFS 2015.

Я действительно хотел бы только коснуться база данных непосредственно в качестве последнего канава. И я также предпочел бы использовать tf vc destroy в качестве последнего курортного курорта, так как это уничтожит всю историю файлов.

Update 2

Aha! Я думаю, что нашел способ идентифицировать файлы, и похоже, что мое мышление о том, что произошло, может быть правильным. К сожалению, мне пришлось исследовать базу данных, используя запрос READ UNCOMMITTED, чтобы найти информацию. Я не мог получить эту информацию программно или с помощью инструментов. (Все они показали, или действовали как файл не проверил.) Запрос, который я использовал на TFS 2015 был:

select pc.* from tbl_PendingChange pc 
left join tbl_Workspace ws on pc.WorkspaceId = ws.WorkspaceId 
where ws.WorkspaceId is null 

Возвращаемых три файла, которые имеют (NULL), (NULL) блокировку на нашем потому что WorkspaceId, указанный в tbl_PendingChange, больше не существует в tbl_Workspace.

Как это произошло? Наш сервер CI использует временные рабочие пространства TFS. Я думаю, что после обновления произошло то, что наш сервер CI отправился проверить файл и применить к нему обновление. (Например, чтобы увеличить номера версий как часть процесса сборки.) Он проверил файл, но не смог применить обновление. (Наши инструменты, как работа с рабочими областями сервера, но, возможно, закончились локальной рабочей областью, и, таким образом, файл по-прежнему был отмечен в Local, но выведен на сервер. Таким образом, изменение файла не может быть применено.) код, который мы используем, выполняет рабочую область. Удалите операцию, когда процесс завершен, поэтому рабочее пространство было удалено - даже несмотря на то, что в рабочей области все еще был извлечен файл! Таким образом, это создало сиротскую запись на tbl_PendingChange, которая не связана с какой-либо рабочей областью, и, следовательно, файл по-прежнему заблокирован с ожидающими изменениями. Но графический интерфейс и инструменты не видят его как такового, потому что они не понимают, что рабочее пространство ожидающих изменений отсутствует.

Итак, это возвращает меня к тому, как я исправить это? Если кто-то знает, как добраться до этих сиротских ожидающих изменений, я был бы признателен. Я пробовал использовать:

 TfsTeamProjectCollection tfsTeamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(szProjectUri)); 
     VersionControlServer versionControlServer = tfsTeamProjectCollection.GetService<VersionControlServer>(); 

     string[] items = new[] { ... server item path ... }; 
     PendingSet[] queryPendingSets = versionControlServer.QueryPendingSets(items, RecursionType.None, null, null); 
     PendingSet[] getPendingSets = versionControlServer.GetPendingSets(items, RecursionType.None); 

но они не находят сирот.

Update 3

Я, наконец, установлен Team Foundation Sidekicks 2015 и дал ему попробовать - инструмент статуса специально, но затем другие инструменты. Это поиск ожидающих изменений, но не осиротевших.

ответ

0

Следующая команда прояснилось, ожидающие ревизии, которые были сиротами:

tf vc destroy <itemspec> /startcleanup 

После выполнения этой команды, файл был в состоянии быть добавлены в TFS, и файл можно было проверить и отредактировать и отредактировать как обычно. Выполнение запроса:

select pc.* from tbl_PendingChange pc 
left join tbl_Workspace ws on pc.WorkspaceId = ws.WorkspaceId 
where ws.WorkspaceId is null 

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

Документацию Microsoft по этой команде можно найти по номеру https://msdn.microsoft.com/en-us/library/bb386005.aspx. Перед использованием этой команды вы должны внимательно изучить документацию и не забудьте понять последствия ее использования.

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

  1. Остановить все пользовательские и внешние обращения к TFS и любому другому программному обеспечению, которое может быть запущено с устройства.
  2. Обязательно выполните полную резервную копию TFS и любых других баз данных, расположенных на машине.
  3. Если вы можете, сделайте снимок во время работы сервера.

Таким образом, если что-то идет ужасно неправильно, у вас будет одно или несколько очков, чтобы вернуться.

0

Вы можете с помощью следующей команды для отменить внесенные изменения:

tf undo "file_path" /workspace:workspace_name 

Или вы можете просто использовать следующую команду для удалить старую рабочую область

tf workspace /delete /server:your_tfs_server workspace;username 

Из Visual Studio 2015 GUI :

File -> Source Control -> Advanced -> Workspaces... 

В появившемся диалоговом окне установите флажок «Показывать удаленные рабочие пространства», и заблокированное рабочее пространство появилось в окне. Затем выберите его и нажмите «Удалить».


Подробности об этом, пожалуйста, проверьте этот blog и больше способов решения этой проблемы вы можете передать подобный вопрос: What do you do if the file in TFS is locked by someone else?


Update:

По запросу SQL. Он ищет .PendingChangeId IS NULL. Вы можете использовать аналогично tbl_PendingChange в базе данных коллекции. Однако это не похвальный метод. Поскольку работать непосредственно в базе данных TFS не рекомендуется.

+0

Но как я могу представить рабочее пространство (null); (null)? Я также не вижу его в качестве удаленной рабочей области, даже если я зарегистрирован как администратор коллекции проектов. – Jeff

+0

Я также попытался положить (нуль) и * и ничего в графический интерфейс, и он говорит мне, что идентификатор не найден или мне нужен владелец. – Jeff

+0

Я тоже попробовал; и (null); (null) и *; * в командах, и ни один из них не работает либо для tf vc undo. Когда я перечисляю рабочие пространства с рабочими пространствами tf, я также не вижу (null), (нулевое) рабочее пространство. – Jeff

1

Вы можете использовать Team Foundation Sidekicks для поиска и отменить блокировку с помощью следующих шагов:

  1. Установите инструмент и запустить его.
  2. Выберите сервер TFS для подключения.
  3. Выберите «Инструменты \ Статус Sidekick».
  4. Установите «критерии поиска» для информации, которую вы хотите.
  5. Нажмите кнопку «Поиск».
  6. Выберите заблокированный файл и нажмите кнопку «Блокировка блокировки».

enter image description here

+0

Я попытался загрузить версию этой программы TFS 2015, но я получаю «Подпись этой программы повреждена или недействительна». ошибка. – Jeff

+0

@Jeff Какую ссылку вы используете? –

+0

http://www.attrice.info/downloads/TF_Sidekicks_6.0.0.msi Эта ссылка находится на их странице: http: //www.attrice.info/downloads/index.htm # tfssidekicks2015, который я достиг, нажав «Загрузить версию 6.0 Team Foundation Sidekicks (только для Visual Studio © 2015, Team Foundation Server 2015 и Team Foundation Service»). ссылку на страницу, с которой вы связались. – Jeff

Смежные вопросы