是否有命令(或一系列命令)将TFVC工作区与服务器同步,确保磁盘上的内容与签入服务器的内容完全匹配。
tf vc scorch
几乎完成了所需的工作,因为它将客户端工作区与服务器的工作空间版本同步,但如果在客户端上创建了一个新项目并添加到源代码管理中,但尚未签入,则在运行scorch后该项目仍然存在。注意:我正在使用TF客户端版本的scorch而不是电动工具版本,因为我正在使用VS2017(VS2013 SP1支持scorch
),这应该有什么不同。
相关,我知道电动工具包括treeclean
命令;但是这只会影响不受源头控制的物品;不是那些添加到版本控制但没有签入的.https://adamprescott.net/2011/09/12/clean-tfs-workspaces-with-scorch-treeclean/。
我能想到实现这一目标的唯一方法是删除(tf vc workspace /delete /collection:"https://$MyInstance.visualstudio.com/DefaultCollection" $MyWorkspace
)并重新创建(tf workspace /new $MyWorkspace /collection:"https://$MyInstance.visualstudio.com/DefaultCollection"
)工作区,然后再运行递归重新填充新文件夹。然而,对于我认为很简单的东西而言,这感觉就像是长途跋涉......
我们正在使用TFVC
而不是Git
,因为我们正在使用Dynamics AX
,它本身不支持Git
。
我想删除这些对象的原因是因为这个脚本将在构建服务器上运行,我希望确保我们在源代码控制中确切地构建了什么。虽然理论上没有人应该在构建服务器上创建新对象,但我不喜欢依赖于这个假设/想要使这个脚本尽可能健壮。
我错过了undo命令:TF.exe vc undo * /recursive /noprompt
。
在运行get然后运行scorch之前运行此命令可确保我的工作区与最新的服务器版本完全匹配。
这是用于将当前工作空间与服务器同步的完整代码。注意:此命令假定tf.exe
的目录包含在path
环境变量中(或者您可以用tf
替换"...\path\to\tf.exe"
),当前/工作目录在源代码管理中映射,并且您的tf凭证被缓存(否则包括/login
参数)用户名和密码)。我没有在/all
命令中包含get
,'/ overwrite'或'/ force',因为scorch
无论如何都会覆盖这个;这里get
的主要目的是确保我们的工作空间“指向”最新的定义。
tf vc undo * /recursive /noprompt
tf vc get * /recursive /noprompt
tf vc scorch * /recursive /noprompt /diff
注意:上面的vc是多余的/只是确保有可能出现歧义,系统会知道使用tfvc
的命令版本而不是git
版本。