Команда TFS get ошибочно возвращает "Все файлы обновлены".

Мы просто переходим к ретрансляции TFS в Mercurial, поскольку у нас достаточно TFS. К сожалению, TFS бросил нам последний мяч кривой, прежде чем он позволит нам уйти. Мы написали script, что мы намерены "получить" каждый набор изменений (включая отметку времени, комментарий и т.д.), А затем добавить их в репозиторий Mercurial и проверить его.

К сожалению, TFS действует очень странно, когда мы выполняем команду tf get * /version:C111 /overwrite. Он сразу возвращает "Все файлы в актуальном состоянии". Но это невозможно. Папка рабочего пространства пуста! И просмотр деталей для набора изменений 111 довольно четко показывает, что набор изменений содержит "материал", то есть репо, конечно, не пустое.

Что может быть причиной этого?

Ответы

Ответ 1

Вы должны попробовать /all вместо/overwrite, это заставит его получить все файлы, а не только те, которые он помнит, чтобы попасть в это рабочее пространство на предыдущем get.

Ссылка MSDN для Get

Ответ 2

TF вернет "Все файлы в актуальном состоянии", если itemspec, который вы передаете, не найден. Если вы не указали абсолютный путь, предполагается относительный путь.

Например, если вы отправляете

tf get myFile.cs /version:1009 /force

он выглядит в текущем каталоге myFile.cs, который не существует, поэтому он возвращает "Все файлы обновлены". Нам действительно нужно

tf get C:\myproject\myFile.cs /version:1009 /force

То же самое с подстановочными знаками, например

tf get D:\project\* /version:C111 /overwrite

Подробнее см. itemspec.

Ответ 3

Вместо "Получить последнюю версию" вы можете "Получить определенную версию" типа "Последняя версия" и установить флажок "Заменить все файлы, даже если локальная версия соответствует указанной версии". Это заставит вас заполучить последнее.

Ответ 4

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

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

Ответ 5

Мне просто нужно было решить эту проблему:

  • Получить [Инструменты электропитания Tfs] (https://visualstudiogallery.msdn.microsoft.com/f017b10c-02b4-4d6d-9845-58a06545627f/file/112253/3/Visual%20Studio%20Team%20Foundation%20Server%202013%20Update%202%20Power%20Tools%20.msi?SRC=VSIDE]. Вы также можете получить его из инструментов > Менеджер надстроек внутри визуального студия.

  • Для завершения установки вам потребуется закрыть визуальную студию.

  • После завершения откройте командную строку в режиме администратора.

  • cd в каталог вашего ветки/решения.

  • Запустите tfpt scorch (tfpt.exe поставляется с инструментами электропитания, если вы его не видите, переустановите)

  • Если он найдет что-то пропавшее без вести, он откроет диалог. Просто нажмите "Далее" или "ОК", и он перезапишет все, что не соответствует серверу.

Ответ 6

Это может произойти, если у вас нет достаточных прав доступа к источнику. Мне удалось увидеть все исходное дерево, все файлы, но я не смог получить самую последнюю версию. Я предполагаю, что это гибкость разрешения до крайности (абсурд?). Чтобы проверить, что проблема не связана с рабочей станцией или сопоставлением, я попытался просмотреть файл кода на страницах группы и получил:

Изображение, демонстрирующее отсутствие доступа к исходному файлу

Ответ 7

Вы всегда можете добавить параметр "/force" в TF GET, чтобы заставить его получать все файлы независимо от того, что, по его мнению, у вас есть в вашей локальной рабочей области (он поддерживает версии всех ваших файлов рабочей области на сервере).

Ответ 8

Похоже, есть несколько способов вызвать эту проблему. В моем случае он имел дело с передачей относительного пути к script, который сгенерировал абсолютный путь, а затем передал этот путь к tf.exe. Это проблема сценариев Windows больше всего на свете, но вывод из tf.exe запутан.

Действительно, вы хотели бы видеть возврат tfs "Файл не найден", а не "Все файлы обновлены".

В дополнение к другим предложениям, сделанным здесь, также дважды проверьте, что вы переходите на tf.exe, сначала переписывая команду с эхом. Если вы исходите из фона unix/linux, строковое построение просто кажется разбитым на win32.

broken.bat

SET PARAM1=%1
SET CMD_PATH="c:\path\to\%PARAM1%"
echo %CMD_PATH%

Результат: broken.bat "tool.exe" = > "c:\path\to \" tool.exe ""

fixed.bat

SET PARAM1=%1
REM Strip quotes: http://www.dostips.com/DtTipsStringManipulation.php
for /f "useback tokens=*" %%x in ('%PARAM1%') do set PARAM1=%%~x
SET CMD_PATH="c:\path\to\%PARAM1%"
echo %CMD_PATH%

Результат: fixed.bat "tool.exe" = > "c:\path\to\tool.exe"

Ответ 9

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

Ответ 10

Моя проблема заключалась в том, что я запускал командную строку VS Developer от студии VS 2012, но мое сопоставление рабочей области внутри vs 2013.

Убедитесь, что вы запускаете tf.exe изнутри каталога visual studio, у которого есть сопоставление рабочей области, чем простой tf.exe. "path" /all/recursive работает просто отлично

Ответ 11

Я попытался использовать /force,/recursive,/all options и все еще имел проблему ( "Все файлы обновлены" ). В конце концов я понял, что проблема связана с отображением. Поэтому я удалил отображение и воссоздал.

Мое старое сопоставление (неверное) было выполнено с помощью подстановочного знака:

tf workfold $/* C:\DEV

Итак, когда я перечислил рабочие папки (tf workspaces/format: detail), он появился следующим образом:

Working folders:

  $//*: C:\DEV

Когда я переназначен, как показано ниже, команда get начала работать:

tf workfold $/ C:\DEV

и отображение отображалось следующим образом:

Working folders:

  $/: C:\DEV

Ответ 12

Выберите дату в будущем, чтобы уточнить:

tf get * /version:D01/01/2099 /recursive /force  /noprompt