Я правильно понял синтаксис?

  tf get .\Web\project.root /recursive
  All files are up to date.


  tf get /version:T .\Web\project.root /recursive
  All files are up to date.

Получение последней версии с помощью командной строки сообщит, что все файлы обновлены, когда это не так! Однако, когда я использую TFS UI в Visual Studio, последний код действительно загружается.

Пока это не разрешится, мой супер-причудливый скрипт msbuild нельзя использовать без открытия Visual Studio, чтобы сначала получить последнюю версию !!

  <Target Name="GetLatestCoreLibraries" Condition="'$(GetLatest)' == 'true'">
    <Exec Command='tf get /version:T "$(CoreLibPath)\Source\Libraries /recursive' ContinueOnError="false" />
  </Target>

$ (CoreLibPath) - это относительный путь, переданный в скрипт. Что-то вроде...

  <PropertyGroup>
    <CoreLibraryPath>..\..\Core\Release\xx.xx.xx.xx</CoreLibraryPath>
  </PropertyGroup

Является ли использование относительных путей к локальной файловой системе менее надежным, чем использование путей SCS? т.е. ... $ / Core / Release / xx.xx.xx.xx / Source / Libraries »?

Может быть, мы иногда используем пользовательский интерфейс Dev Studio, а иногда используем командную строку, что сбивает с толку версию TFS для командной строки?

4
antwarpes 6 Мар 2012 в 23:06

3 ответа

Лучший ответ

Итак, я осознал свою ошибку. Это было очень просто.

Command = 

    'tf get
       /version:T 
       /recursive
       "$(CoreLibPath)\Source\Libraries <<<-- Missing closing quote.
     '

Если вы пропустите закрывающую двойную кавычку в tf get , ошибки не будет. Он просто сообщает, что «Все файлы обновлены».

c:\Web\Release\x.x\x.x.xxxx>tf get /version:T "..\..\..\..\..\Core\Release\x.x\x.x.xxxx.xxxxx(xxxx xx xx - xxx)\Source\Libraries /recursive
All files are up to date.

В: Является ли использование относительных путей к локальной файловой системе менее надежным, чем использование путей SCS? т.е. ... $ / Core / Release / xx.xx.xx.xx / Source / Libraries?

О: Нет, не кажется менее надежным.

В: Может быть, мы иногда используем пользовательский интерфейс Dev Studio, а в других случаях используем командную строку, что сбивает с толку версию TFS для командной строки?

О: Нет, это был случай путаницы с пользователем, а не с SCS.

3
antwarpes 9 Мар 2012 в 15:17

Попробуйте использовать параметр /force. Это приведет к тому, что все будет восстановлено, чего вы, возможно, не захотите.

В качестве альтернативы вы можете получить пакет расширений MSBuild от CodePlex - у них есть задачи MSBuild, которые обертывают эти вызовы и работают с IntelliSense, если вы используете Visual Studio для управления своими сценариями сборки.

Ваш itemspec мне кажется странным, но я не могу предложить никаких конкретных исправлений. Я явно вызываю рабочую область при использовании вызовов командной строки, например. tf get "$/<our product>/<branch>[/<project>]" /force /recursive. В противном случае путь будет относиться к текущему отображению активного рабочего пространства.

2
DaveE 6 Мар 2012 в 19:36

Другой вариант - у пользователя нет доступа к коллекции проектов. В моем случае я мог каким-то образом видеть каталоги, но не имел доступа для извлечения кода. Мне нужно было, чтобы администратор TFS добавил меня как "разработчика".

0
Matt Elliott 16 Мар 2016 в 16:30