命令行从TFS"获取最新"而不映射工作空间等

Ant*_*lev 13 tfs automation

我假设这个:

tf.exe get $/project /recursive
Run Code Online (Sandbox Code Playgroud)

...需要这个奇怪的工作空间映射,已知的TFS服务器等.

有什么方法可以做这个最简单的事情:使用组凭据连接到这个 TFS服务器,获取项目的最新源代码并将其放在这里?全部来自命令行.

Ray*_*yes 21

首先,您是否想要不再受源代码控制(例如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

此时,您现在应该拥有所有文件,如果您需要,还可以使用TFS绑定,以便提交更改.或者,您现在可以将内容复制到其他位置并中断映射/工作区.使用正确的命令行变种tf workfold /unmap,并tf workspace /delete会取消映射你的workfolder和删除工作区.

  • 非常感谢!但是OMGWTF?为了整个尝试自动化TFS VC的地狱. (13认同)
  • 我并不反对......似乎有很多人喜欢它......但是他们中很少有人似乎除了VSS之外还使用了其他任何可怕的东西...... (4认同)

Ben*_*erg 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痕迹.

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