Подтвердить что ты не робот

Перемещение файлов потеряет историю в TFS 2013

Я использую VS2013 Update 4 с обновлением TFS 2013 4. В проводнике исходного кода, когда я перемещаю файл из одной папки в другую, я вижу, что история файлов сохраняется в новом местоположении. Однако эта история ушла, когда я регистрирую ожидающие изменения. То же самое происходит, когда я пытаюсь запустить команду "tf move". Итак, как вы можете переместить файл в TFS и сохранить историю файлов?

4b9b3361

Ответ 1

Когда файл переименовывается правильно, история не является "Gone", а вместо этого связана с "старым именем". Переименование, которое сделано правильно (отслеживается как переименование, а не как delete + add), имеет параметр детализации для просмотра "старой" истории:

enter image description here

  • Изменения 81 ~ 82 содержат изменения старого имени
  • В наборе изменений 83 содержится удаление + переименование
  • Изменяет команду 84 новое изменение, которое было проверено после переименования

Если переименование выполняется вне проводника исходного кода (или из очень старой версии проводника управления версиями (например, VS 2008)) или вне Обозревателя решений, то это изменение будет обнаружено как два отдельных действия, одно удалить и добавить. Вы можете использовать окно "Ожидающие изменения", чтобы продвинуть их к переименованию, чтобы сохранить историю:

enter image description here

В командной строке это можно выполнить только с помощью "tf rename" и "tf move". Использование стандартных команд "mv" и "ren" не сможет сохранить историю.

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

enter image description here

Ответ 2

Я пришел к этой проблеме из question.

Проблема существует с TFS2010 и является не только проблемой для переименованных или перемещенных файлов, но и для переименованных или перемещенных папок. Хуже всего, если вы переименовали ветку, а затем посмотрите историю папок. Затем вы найдете только свой список изменений.

Здесь вы можете увидеть реакцию MS на эту задачу. В основном они говорят, что они этого не делают, потому что это большая работа и делает историю медленнее.

Я не мог жить с этим фактом и запрограммировал исправление для этого. Рекурсивный выбор истории происходит в SP dbo.prc_QueryHistory. Я изменил SP и добавил следующие функции:

  • (как обычный поиск последних 256 наборов изменений рекурсивно)
  • затем проверьте набор изменений, если некоторые из них представляют операции переименования/перемещения
  • если это рекурсивно (в цикле), следуйте каждому переименованию/переходу на его прежний ItemId и повторите этот шаг (в случае, если файл/папка переименовали несколько раз)
  • затем найдите все предыдущие изменения в прежние ItemIds (перемещение/переименование изменяет ItemId)
  • добавьте вновь найденные изменения в список наборов изменений и вырежьте его в строке 256

Эффект - более медленная история (особенно если вы делаете это в корне глубокого дерева папок), но проблема исправлена. И я скорее живу с медленной историей, чем с неполным.

Я мог бы предоставить вам SP, который я написал, но я не уверен, что мне будет разрешено публиковать его здесь, так как он содержит защищенный код MS. (И, конечно же, я не могу гарантировать, что исправление сохранится при обновлении системы. - Я написал свой SP на T3 2013 SP3.)

Обновление: Я попросил MS предоставить разрешение на публикацию моего исправления (2-я ссылка в моем сообщении)

Ответ 3

Я не думаю, что jessehouwing исправляет работу для папок. Фактически, если вы используете Source Control Explorer VS 2012+, перемещение папок сохраняет историю файлов (показывает рекурсивную в VS), но не для папок. История папок плоская.

Решение этой проблемы:

  • Microsoft, чтобы определить, как история папок отображается в VS или добавить пункт контекстного меню Show Recursive History.
  • Перенос всех наборов изменений из одной папки в другую. К сожалению, я все еще не могу определить инструмент, способный сделать это для TFS 2013 или VSO.