2012-03-06 6 views
4

構文は正しいですか?"tf get"コマンドラインから最新のものが得られません

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. 

最新のコマンドラインを使用すると、すべてのファイルが最新ではないと報告されます。しかし、Visual Studio内のTFS UIを使用して最新のものを取得すると、最新のコードが実際にダウンロードされます。

解決が得られるまで、私のスーパーファンシーmsbuildスクリプトは、ビジュアルスタジオを開かなければ使用できません。

<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 UIを使用していることがあります。 TFSのコマンドラインバージョン

+0

itemspecが正しいと仮定すると、構文は正しいです。どのフォルダをUIでクリックして最新のものを入手していますか?あなたは単にCLCのitemspecを使用できますか?たとえば、 '$/.../recursive'を取得します。最悪のケースでは、 'tf get $// recursive'を使って、(サーバ全体ではなく、マップしたものだけで)あなたのワークスペース全体について最新のものを得ることができます。 –

+0

こんにちはエドワード、私はあなたのコメントに基づいて私の質問を更新しました。あなたが推薦しているのは、ソースコントロールのパス名のためにitemspecのローカルパスを削除することだと思います。 – antwarpes

+1

いいえ、ローカルパスを使用することは、サーバーパスよりもあまり信頼性がありません。これはMSBuildスクリプトの一部ですか?あなたはTFS Buildの一部としてそれを呼びますか?あなたのビルド定義のワークスペースマッピングの$(CoreLibPath)は既にありますか? –

答えて

3

私は間違いを認識しました。とてもシンプルでした。あなたがを得るtfをの終了二重引用符を欠場すると

Command = 

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

は、スローされたエラーがありません。単に「すべてのファイルが最新の状態です」と報告します。

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. 

Q:はSCSのパスを使用するよりも信頼性の高いローカルファイルシステムへの相対パスを使用していますか?つまり... $ /コア/リリース/ XX.XX.XX.XX /ソース/ライブラリ "

A:?いいえ、任意の信頼性の低いではないようです

Q:?それは我々が時々TFSのコマンドラインバージョンを混乱されるコマンドラインを使用してのDev StudioのUIを使用して、それ以外のしていることだろう

A:いいえ、これはのケースでしたユーザーの混乱、SCSの混乱ではありません。

+0

それはミスマッチでした。 "$(CoreLibPath)\ Source \ Libraries/recursive" ContinueOnError = "false" "というようにパスを" "持っていませんでした: すべての深刻度で、良いキャッチです。 – DaveE

2

/forceパラメータを使用してみてくださいそれは多分あなたはしたくないこれは、検索対象となるすべてのものを強制するでしょう

代わりにあなたはCodePlexのからMSBuild Extension Packを得ることができる - ?。。彼らはMSBuildのを持っていますこれらの呼び出しをラップし、Visual Studioを使用してビルドスクリプトを管理している場合、IntelliSenseで作業するタスク。

あなたのitemspecは奇妙に見えますが、具体的な修正はありません。コマンドラインコールを使用するときは、明示的にワークスペースを呼び出します。 tf get "$/<our product>/<branch>[/<project>]" /force /recursive。それ以外の場合、パスは現在のアクティブなワークスペースのマッピングとの相対的なものです。

+0

私は相対ローカルパスとファイル名を使用しています。その質問の更新を参照してください。 – antwarpes

+0

'get'をUI呼び出しで検証し、コマンドライン呼び出しをテストする場合、コマンドライン呼び出しは' force'パラメータなしで '最新のすべてのファイル'を実際に報告する可能性があります。 UIは、コマンドラインで明示的に指定しなければならない動作を上書きする機会を提供します。 – DaveE

+0

あなたは正しいかもしれません...この問題の唯一の解決策は、/ allフラグまたは/ forceフラグを使用することです。ビルドに非常に多くの時間を追加し、開発者が独自のウェブとアプリの設定ファイル。 – antwarpes

0

もう1つの選択肢は、ユーザーがプロジェクトコレクションにアクセスできないことです。私の場合、何とかディレクトリを見ることができましたが、コードをプルダウンするアクセス権はありませんでした。私はTFSの管理者に私を「開発者」アクセスとして追加させる必要がありました。

関連する問題