Build TFS变更集/修订信息脱机

Build TFS变更集/修订信息脱机,build,tfs,offline,revision,Build,Tfs,Offline,Revision,我正在寻找一种方法,在构建时从TFS工作区提取变更集编号或修订号信息,同时可能从TFS服务器脱机 具体问题如下。我试图从SN到TFS移植一个跨平台(Linux /G++/Poice和Windows /VS2010)C++代码库。作为构建过程的一部分,Makefile(在Linux端)或VS build属性被设置为自动创建一个“版本”文件,其中包含svnversion或SubWCRev命令的过滤输出。此信息不仅用于报告主可执行文件的修订号和修改状态,还用于报告已生成并用于链接的组件静态库 一个复杂

我正在寻找一种方法,在构建时从TFS工作区提取变更集编号或修订号信息,同时可能从TFS服务器脱机

具体问题如下。我试图从SN到TFS移植一个跨平台(Linux /G++/Poice和Windows /VS2010)C++代码库。作为构建过程的一部分,Makefile(在Linux端)或VS build属性被设置为自动创建一个“版本”文件,其中包含svnversion或SubWCRev命令的过滤输出。此信息不仅用于报告主可执行文件的修订号和修改状态,还用于报告已生成并用于链接的组件静态库

一个复杂的问题是,我们的TFS服务器位于另一个状态的VPN末端,并且不可靠可用。在不连接到TFS服务器的情况下,能够在本地生成代码非常重要。据我所知,TF命令行工具坚持尝试建立连接,或者报告我没有访问远程资源的权限

当前的VS/TortoiseSVN方法只有一个自定义构建步骤(在“PreBuildEvent”之后执行),该步骤调用SubWCRev,然后过滤输出,使其与svnversion的输出兼容,最后将其写入头文件:

set bv=$(IntDir)\$(ProjectName)_bv.h
SubWCRev "$(SolutionDir)\..\$(ProjectName)" | sed "s/:/ /g" | gawk "/revision/ {r=%24(NF)} /modifications/ {m=\"M\"} END {print \"#define $(ProjectName)_bv \\\"\" r m \"\\\"\"}" > "%bv%.tmp"
fc "%bv%" "%bv%.tmp" 2>nul >nul || copy "%bv%.tmp" "%bv%"
有人能提供一个类似的简单解决方案,用于间歇性连接的TFS吗


非常感谢您的帮助

TFS和SVN非常不同。。在TFS工作区中,只需一个人就可以获得更少的信息。我建议1。有一个创建版本文件的手动构建步骤(多久需要更新一次);2.设置TFS代理(您会惊讶于这是多么简单和高效,您只需要一台备用机器);或3。只要让TF命令行做它想做的事情,并提供一个非常大的超时(或允许10次重试)。我真的希望尽可能让它自动化-手动步骤很容易被跳过!但是,也许这些版本文件可以在签入或签出时创建?TFS可以这样编写脚本吗?不幸的是,我们无法使用代理选项。此外,即使在连接的情况下,每次调用TF客户端都会提示输入登录信息,这会使构建项目变得非常乏味,其他开发人员很快也会对此束手无策。我同意,手动步骤很容易被忘记,然而,您可能会发现,尝试自动化的成本通常意味着您最好只是让构建报告它刚刚创建的版本,而不是让它输入正确的数字。TFS具有事件挂钩。。它是可以编写脚本的,但也许可以解释一下为什么需要经常更改版本文件?为什么它依赖于TFS?我同意生产或QA构建(自动构建)以某种方式由TFS计算版本,但为什么在开发人员环境中有必要这样做,而且经常是这样?代码本质上是一个模拟器;在部署之前,我们在各种数据集上运行模拟器,以确保行为正常、适当、及时等。通过在模拟器输出中存储修订号,我们不仅可以确保生产中的缺陷可归因于特定构建,更重要的是,在我们的部署前测试中,我们有一个特定行为被绑定到代码库的特定状态的历史记录。在实践中,人们很容易将错误或bug修复行为归因于错误版本的代码。OK。你有一个自动化的构建过程吗?我认为(?)您会同意,将版本置于已部署的构建之上是最有意义的。然而,在开发环境中,这可能是不必要的。如果是这种情况,您可以缩小“修订更新程序”的使用范围(不必每次编译时都在每个开发人员的机器上运行)。TFSAPI(无论您是否使用TFS构建)允许以编程方式签出、更改(版本文件)然后提交。或者,您可以使用标志或环境变量,这样就不需要签入。