命令行“获得最新的”从TFS没有映射工作区和这样的(Command line “get latest

2019-07-30 17:32发布

我认为这一点:

tf.exe get $/project /recursive

......需要这个奇怪的工作区映射,称为TFS服务器和这样。

有没有什么办法,我可以做到这一点最简单的事情:去连接到使用组凭据 TFS服务器,获得最新的源代码, 这个项目,并把它放在这里 ? 所有的命令行。

Answer 1:

首先,你想进行源控制下不再受控文件的副本(如SVN出口),或者是你仍然希望与文件和TFS工作?

选项1:没有绑定在所有

如果您只是想在最新的文件,并没有“结合”到TFS,你将不得不自己做一点工作的副本。 撇开凭证( [/login:username,[password]]参数提供给许多命令行方法)。

  1. 使用TF命令获取文件列表: tf dir "$/YourSolution" /Recursive > files.txt
  2. 过程files.txt一些巧妙批处理文件(或使用脚本语言):
  3. 阅读开头为$/这是目录,在您的目的地创建目录(先删除三个字符和最后一个字符,一个冒号)。
  4. 阅读下一行(直到空白或文件的结尾),每个都代表在第3步中发现的目录中的文件假设你有一个变量文件%file%和目录%dir%然后发出以下命令(在该目录中的每个文件):

tf view "$/%DIR%/%FILE%" "/output:Your-Target-Path/%DIR%/%FILE%"

或者,如果你满意的当前目录作为目标:

tf view "$/%DIR%/%FILE%" "/output:%DIR%/%FILE%"

请注意,您所需要的%DIR%/%FILE%输出部分或全部文件都将在相同的目录倾倒。

注意:这很可能是一个非常高的带宽和运算速度慢!

选项2:临时映射

  1. 创建一个临时工作区: tf workspace /new /collection:<URL_TO_SERVER> /permission:Private (注意,这会提示,有一个无提示选项,但确定工作区的名称被留作练习)
  2. 做一个目录来存放文件,如LOCALDIR
  3. 为您的文件夹创建一个映射: tf workfold /map "$/SERVER_DIR" "LOCALDIR"
  4. 走进LOCALDIR
  5. 获取文件tf get . /Recursive tf get . /Recursive

在这一点上,你现在应该有所有的文件,如果你想你也有TFS的绑定,所以你可以提交更改。 或者,你现在可以在内容复制到其他地方,并打破映射/工作区。 使用正确的命令行变种tf workfold /unmaptf workspace /delete将取消映射你的workfolder和删除工作区。



Answer 2:

从TFS干净导出任何文件夹? 终于找到了一个辉煌的解决方案,我想。

我不打算现在已经完全研究这个给你,但以后打算用它来取代我的令人难以置信的凌乱的构建服务器工作区同步脚本,当我得到的时间。

解:

使用微软的Git的-TF获得源磁盘,而不必设立一个工作区或任何东西。 我尝试了命令,它表现的很出色。 认为这将在2010年和2012年的工作TFS从我能理解,不会有留下以后会导致问题的绑定或工作区或任何东西。 我认为,所有你需要安装是GIT和GIT-TF。

http://www.microsoft.com/en-us/download/details.aspx?id=30474

事实上,你会得到的文件到一个Git仓库,这是没有问题的。 你会得到一个名为git的导出的文件夹中(隐藏?)文件夹,我想你可以直接删除它摆脱GIT的任何痕迹。

如果有人实现了这个,应该是很容易的,请确认它按预期工作。



Answer 3:

快速解决方案
在雷海耶斯选项2回答的基础上,我放在一起的实际脚本,应该是直截了当地使用那些谁只是想快速和肮脏的解决方案。 你应该阅读他的aswer获取更多信息。

要使用它:

  • 设置四个变量到您的工作环境
  • 记住,你的tf.exe可能无法在同一目录下,我有它在,特别是如果你是从未来的阅读这:)

SET COLLECTION_URL="http://localhost:8080/tfs/<collection>"
SET SERVER_DIR="$/<REMOTE_SOLUTION_DIR>"
SET LOCAL_DIR="X:\<YourLocalDir>"
SET TF_DIR="C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE"

%TF_DIR%\tf workspace /new /collection:%COLLECTION_URL% /permission:Private /noprompt tmp_batchws
%TF_DIR%\tf workfold /map %SERVER_DIR% %LOCAL_DIR%
cd /d %LOCAL_DIR%
%TF_DIR%\tf get . /Recursive
%TF_DIR%\tf workspace /delete tmp_batchws /noprompt


Answer 4:

还有,当涉及到TFS命令行没有“简单”的选项 - 他们几乎总是涉及到非常多的类型(如不能够简单地有一个默认的设置,使您不必指定每个集合的URL命令)

通常的方法,使TFS命令行“简单”是写批处理文件来隐藏掉所有已经被每一次指定的信息(服务器URL和递归标志等)

TF.exe确实允许你做几乎任何事情,虽然如此,它的TF相当直接的调用序列创建一个临时映射,做一个获取和和再次删除映射。



Answer 5:

http://johannblais.blogspot.com/2014/07/tfs-equivalent-of-svn-export.html

HTTP:// TFS-服务器:端口/ TFS /收集/ TeamProject /团队/ _api / _versioncontrol / itemContentZipped repositoryId =&路径=网址编码源控制路径

  • TFS-server是TFS服务器主机名
  • 端口是TFS端口(通常为8080)
  • 收藏是团队项目集合的名称
  • TeamProject是团队项目的名称
  • 团队是团队的名称
  • 网址编码源控制路径是URL编码的源控制路径(例如,$ / PROJECT1 /主要/来源/文件夹/子文件夹变为%24%2FProject1%2FMain%2FSources%2FFolder%2FSubFolder


Answer 6:

我写的PowerShell中的领先答案

$base = "f:\whereyouwantthefilestogo\"
foreach($l in get-content D:\outputfromTFdir.txt)
{
    if($l -match '^\$.*\:$')
    {
        $repopath = $l.trim(':')
        write-host 'base path'
        $basepath = "$base$($l.Substring(2,$l.Length -3) -replace '/','\')"
        if((Test-Path $basepath) -eq $false)
        {
            write-host 'making directory'
            New-Item -ItemType directory -Path $basepath
        }
        continue;
    }
    elseif($l -match '^\$')
    {
        write-host 'sub folder'
        $subfolderpath = "$basepath\$($l.trim('$'))"
        if((Test-Path $subfolderpath) -eq $false)
        {
            write-host 'making directory'
            New-Item -ItemType directory -Path $subfolderpath
        }
        continue;
    }
    elseif($l -match '.*\..*')
    {
        write-host 'get file'
        $filename = "$basepath\$l"
        write-host $filename
        $repofile = "$repopath/$l"
        tf view "$repofile" "/output:$filename" /collection:http://tfsserver
    }
    else{write-host 'blank line'}
}


文章来源: Command line “get latest” from TFS without mapping workspaces and such