我认为这是:
tf.exe get $/project /recursive
...需要这个奇怪的工作空间映射,已知的TFS服务器等。
我有什么方法可以做这个最简单的事情:使用此凭据连接到此 TFS服务器,获取 this <的最新源代码/ em>项目并将其放在这里?全部来自命令行。
答案 0 :(得分:21)
首先,您是否希望获得不再受源代码控制的受控文件的副本(例如SVN导出),或者您是否仍希望使用这些文件和TFS?
如果您只是想要一份最新文件的副本而且没有“绑定”到TFS,那么您将不得不自己做一些工作。不要使用凭证([/login:username,[password]]
参数到许多命令行方法)。
TF
命令获取文件列表:tf dir "$/YourSolution" /Recursive > files.txt
files.txt
:$/
开头的行,这是目录,在目的地中创建目录(删除前三个字符,最后一个字符,冒号)。%file%
和目录%dir%
中,然后发出以下命令(对于该目录中的每个文件): tf view "$/%DIR%/%FILE%" "/output:Your-Target-Path/%DIR%/%FILE%"
或者如果您对目前的目录感到满意:
tf view "$/%DIR%/%FILE%" "/output:%DIR%/%FILE%"
注意,您需要输出部分中的%DIR%/%FILE%
,否则所有文件都将被转储到同一目录中。
注意:这可能是非常高的带宽和缓慢的操作!
tf workspace /new /collection:<URL_TO_SERVER> /permission:Private
(注意,这将提示,有一个无提示选项,但确定工作空间的名称仍为练习)LOCALDIR
tf workfold /map "$/SERVER_DIR" "LOCALDIR"
LOCALDIR
tf get . /Recursive
此时您现在应该拥有所有文件,如果您还希望与TFS绑定,那么您可以提交更改。或者,您现在可以将内容复制到其他位置并中断映射/工作区。使用tf workfold /unmap
和tf workspace /delete
的正确命令行变体将取消映射工作文件夹并删除工作区。
答案 1 :(得分:9)
从TFS干净地导出任何文件夹?终于找到了一个很棒的解决方案。
我现在不打算为你完全研究这个问题,但是当我有空的时候打算用这个替换我非常凌乱的构建服务器工作区同步脚本。
解决方案:
使用Microsoft的Git-TF将源代码发送到磁盘,而无需设置工作区或任何内容。我尝试了这个命令,它工作得非常好。认为它适用于TFS 2010和2012.根据我的理解,将不会有任何绑定或工作空间或任何遗留下来会导致问题。我认为您需要安装的只是GIT和GIT-TF。
http://www.microsoft.com/en-us/download/details.aspx?id=30474
您实际上将文件放入GIT存储库,这根本不是问题。您将在导出的文件夹中找到一个名为.git的(隐藏?)文件夹,我想您可以删除它以消除任何GIT痕迹。
如果某人实现了这一点,这应该很容易,请确认它是否按预期工作。
答案 2 :(得分:2)
快速解决方案
在Ray Hayes 选项2 答案的基础上,我整理了一个实际的脚本,应该直接用于那些只想要快速和肮脏的解决方案的人。您应该阅读他的aswer了解更多信息。
使用它:
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
答案 3 :(得分:1)
没有&#34; easy&#34;关于TFS命令行的选项 - 它们几乎总是涉及大量的输入(例如,不能简单地设置默认设置,因此您不必在每个命令上指定集合URL)
制作TFS命令行的常用方法&#34;简单&#34;是编写批处理文件来隐藏每次必须指定的所有细节(服务器URL和递归标记等)
TF.exe确实允许你做几乎任何事情,所以它是一个非常直接的tf调用序列来创建一个临时映射,做一个Get并删除映射。
答案 4 :(得分:1)
http://johannblais.blogspot.com/2014/07/tfs-equivalent-of-svn-export.html
答案 5 :(得分:0)
我为主要答案写了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'}
}