Ответ 1
Вы должны попробовать /all вместо/overwrite, это заставит его получить все файлы, а не только те, которые он помнит, чтобы попасть в это рабочее пространство на предыдущем get.
Мы просто переходим к ретрансляции TFS в Mercurial, поскольку у нас достаточно TFS. К сожалению, TFS бросил нам последний мяч кривой, прежде чем он позволит нам уйти. Мы написали script, что мы намерены "получить" каждый набор изменений (включая отметку времени, комментарий и т.д.), А затем добавить их в репозиторий Mercurial и проверить его.
К сожалению, TFS действует очень странно, когда мы выполняем команду tf get * /version:C111 /overwrite
. Он сразу возвращает "Все файлы в актуальном состоянии". Но это невозможно. Папка рабочего пространства пуста! И просмотр деталей для набора изменений 111
довольно четко показывает, что набор изменений содержит "материал", то есть репо, конечно, не пустое.
Что может быть причиной этого?
Вы должны попробовать /all вместо/overwrite, это заставит его получить все файлы, а не только те, которые он помнит, чтобы попасть в это рабочее пространство на предыдущем get.
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.
Вместо "Получить последнюю версию" вы можете "Получить определенную версию" типа "Последняя версия" и установить флажок "Заменить все файлы, даже если локальная версия соответствует указанной версии". Это заставит вас заполучить последнее.
У меня была такая же проблема раньше, и, вытащив мои волосы, единственное, что ее исправляло, - это отменить отображение рабочего пространства, удалить все локальные файлы, а затем переназначить рабочее пространство на диск - TFS наконец, получит новую копию файлов.
Мы использовали TFS 2005, для чего это стоит - мне было бы грустно слышать, что эта ситуация все еще возникает с более новыми версиями. Если вы найдете другое решение, отправьте его здесь, так как мне хотелось бы узнать, как вы его разрешили.
Мне просто нужно было решить эту проблему:
Получить [Инструменты электропитания 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 поставляется с инструментами электропитания, если вы его не видите, переустановите)
Если он найдет что-то пропавшее без вести, он откроет диалог. Просто нажмите "Далее" или "ОК", и он перезапишет все, что не соответствует серверу.
Это может произойти, если у вас нет достаточных прав доступа к источнику. Мне удалось увидеть все исходное дерево, все файлы, но я не смог получить самую последнюю версию. Я предполагаю, что это гибкость разрешения до крайности (абсурд?). Чтобы проверить, что проблема не связана с рабочей станцией или сопоставлением, я попытался просмотреть файл кода на страницах группы и получил:
Изображение, демонстрирующее отсутствие доступа к исходному файлу
Вы всегда можете добавить параметр "/force" в TF GET, чтобы заставить его получать все файлы независимо от того, что, по его мнению, у вас есть в вашей локальной рабочей области (он поддерживает версии всех ваших файлов рабочей области на сервере).
Похоже, есть несколько способов вызвать эту проблему. В моем случае он имел дело с передачей относительного пути к script, который сгенерировал абсолютный путь, а затем передал этот путь к tf.exe
. Это проблема сценариев Windows больше всего на свете, но вывод из tf.exe
запутан.
Действительно, вы хотели бы видеть возврат tfs "Файл не найден", а не "Все файлы обновлены".
В дополнение к другим предложениям, сделанным здесь, также дважды проверьте, что вы переходите на tf.exe
, сначала переписывая команду с эхом. Если вы исходите из фона unix/linux, строковое построение просто кажется разбитым на win32.
SET PARAM1=%1
SET CMD_PATH="c:\path\to\%PARAM1%"
echo %CMD_PATH%
Результат: broken.bat "tool.exe" = > "c:\path\to \" tool.exe ""
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"
Проверьте рабочее пространство. Я пошел, чтобы удалить его, как указано выше (что, вероятно, также исправило бы его), но я заметил, что кто-то проект в моем проекте получил свое собственное рабочее пространство, назначенное в дополнение к общей рабочей области. Я удалил этот проект из рабочей области, и он загрузил все мои файлы, когда я щелкнул ok, чтобы выйти из меню рабочей области.
Моя проблема заключалась в том, что я запускал командную строку VS Developer от студии VS 2012, но мое сопоставление рабочей области внутри vs 2013.
Убедитесь, что вы запускаете tf.exe изнутри каталога visual studio, у которого есть сопоставление рабочей области, чем простой tf.exe. "path" /all/recursive работает просто отлично
Я попытался использовать /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
Выберите дату в будущем, чтобы уточнить:
tf get * /version:D01/01/2099 /recursive /force /noprompt