11

プロジェクトのソースコードを特定の時間(チェンジセット)で入手したいのですが。だから私はフォルダ全体をダウンロードする必要があります。別の時間にそれをやりたいのですが、別のワークスペースを処理するのはあまり便利ではありません。

TFS Get Specific Versionを別のフォルダー(ワークスペースあり)に入れ、ワークスペースなしでTFSからファイル(1つのファイル)を取得するためのコマンドが必要であることを知っています。

新しいワークスペースを作成せずにフォルダ全体を解決する方法はありますか?

編集 私は受け入れられた答えがあまりにも野心的であることに気づきました。もっとシンプルなものが必要でした。

仮定:

  • コンピューターのVisualStudioからTFSにアクセスできます
  • TFSプロジェクトChangeSetNumberのフォルダーからチェンジセット を取得したいDesiredFoldertProj

VisualStudioコマンドプロンプトの宛先フォルダーから次のバッチを実行します

set workspace_name=TemporaryWorkspace%username%
set changeset= ChangeSetNumber                
tf workspace -new %workspace_name% -noprompt
tf workfold -map $/tProj . -workspace:%workspace_name%
tf get $/tProj/DesiredFolder -version:C%changeset% -recursive -noprompt
tf workfold -unmap . -workspace:%workspace_name%
tf workspace -delete %workspace_name% -noprompt

ダウンロードしたソリューションを開始するときに、ソース管理の関連付けを削除することを確認する必要があります。

4

4 に答える 4

15

一時的なワークスペースには次の構文を使用します。

tf workspace -new %JOB_NAME%;%user% -noprompt -server:http://%host%:8080/tfs/%project% -login:%user%,%password%
tf workfold -map $/Release/MilestoneX.X . -workspace:%JOB_NAME% -server:http://%host%:8080/tfs/%project% -login:%user%,%password%
tf get . -version:L%TFS_LABEL% -recursive -noprompt -login:%user%,%password%
tf workfold -unmap . -workspace:%JOB_NAME% -login:%user%,%password%
tf workspace -delete %JOB_NAME%;%user% -noprompt -server:http://%host%:8080/tfs/%project% -login:%user%,%password%
于 2012-05-09T21:14:11.527 に答える
7

TFSが公開するHTTPAPIを介してこれを実行できることを発見しました。URLの「署名」は次のとおりです。

http(s)://{server}:{port}/tfs/{collectionName}/{teamProjectName}/_api/_versioncontrol/itemContentZipped?version={versionSpec}&path={escapedPathToFolder}

したがって、DefaultCollectionに「MyProject」という名前のプロジェクトがあり、「MyFeature」というフォルダーのコンテンツを取得する場合は、次のようにします。

http://MyTfsServer:8080/tfs/DefaultCollection/MyProject/_api/_versioncontrol/itemContentZipped?version=C1001&path=%24%2FMyProject%2FMyFeature

「バージョン」は、TFSAPIドキュメントに記載されている任意のバージョン仕様にすることができると思います。私の例は、変更セット1001の時点でのバージョンを要求しています。.NETAPIを使用して特定のバージョンを取得しました。これは非常に簡単ですが、一度に1つのファイルしか取得できないため低速です。この方法でファイルをダウンロードする方が、一度に1つのファイルを取得するよりもはるかに高速であるため、これと同じ機能が.NETAPIを介して公開されているかどうかを調べようとしています。

これを拡張メソッドとして実装しましたMicrosoft.TeamFoundation.VersionControl.Client.Item.。これは、zipファイルを含むストリームを返します。これをカスタムMSBuildタスクの一部として使用し、このストリームの内容をファイルの場所に保存しました。

public static class TfsExtensions
{

    const String ItemContentZippedFormat = "/_api/_versioncontrol/itemContentZipped?version={0}&path={1}&__v=3";

    public static Stream DownloadVersion(this Item folder, VersionSpec version)
    {
        if (folder.ItemType != ItemType.Folder)
            throw new ArgumentException("Item must be a folder", "folder");


        var vcs = folder.VersionControlServer;

        var collectionName = vcs.TeamProjectCollection.CatalogNode.Resource.DisplayName;

        var baseUri = folder.VersionControlServer.TeamFoundationServer.Uri;
        if (!baseUri.LocalPath.EndsWith(collectionName, StringComparison.OrdinalIgnoreCase))
            baseUri = new Uri(baseUri, baseUri.LocalPath + "/" + collectionName);


        var apiPath = String.Format(ItemContentZippedFormat, version.DisplayString, WebUtility.UrlEncode(folder.ServerItem));
        var downloadUri = new Uri(baseUri, baseUri.LocalPath + apiPath);

        var req = WebRequest.Create(downloadUri);
        req.Credentials = CredentialCache.DefaultCredentials;
        var response = req.GetResponse();
        return response.GetResponseStream();
    }
}
于 2013-11-05T00:21:58.343 に答える
5

必要なコンテンツを取得するための一時的なワークスペースを作成してから、ワークスペースを削除してローカルアイテムを保持する必要があると思います。

TFSのワークスペースは、サーバー上にあるもののローカルビューです。特定のワークスペースについて、ローカルで取得するフォルダーと、フォルダー/ファイルを保存する場所を選択します。

SourceSafeとは異なり、 1つのワークスペースだけにバインドされているわけではなく、特定のコンピューターに必要な数のワークスペースを配置できます。

したがって、実行したい操作専用のワークスペースを作成し、適切と判断した場合はそれを削除することをお勧めします。

TF.exeワークスペースコマンドを使用して、シェルからワークスペースを作成/削除します。次に、TF.exeはファイルを取得します。

于 2012-05-03T19:33:05.700 に答える
1

tf viewワークスペースを作成せずに特定のファイルを取得するために使用できます。

Retrieves a specific version of a file to a temporary folder on your computer and displays it.

tf vc view [/collection:TeamProjectCollectionUrl]
       [/console] [/recursive] [/output:localfile]
       [/shelveset:shelvesetname[;owner]] [/noprompt] itemspec
       [/version:versionspec] [/login:username,[password]]

Versionspec:
Date/Time         D"any .Net Framework-supported format"
                  or any of the date formats of the local machine
Changeset number  Cnnnnnn
Label             Llabelname
Latest version    T
Workspace         Wworkspacename;workspaceowner
于 2015-08-13T15:33:24.547 に答える