TFS:如何撤消在batch file中检出未修改的文件

我们使用batch file生成代码,并自动从Team Foundation Server(TFS)中检出生成的文件,以便可以重新生成它们。 大部分这些文件都没有修改,但生成器并不知道这个提前。

“tfs undo”命令撤消了结帐,但会提示是否有一些已被修改(我们不想这么做)。 我们也不想立即检查生成的文件。

是否有一个命令(或一系列的命令)撤消所有未经修改的文件签出没有提示用户?

看看2011年8月份的Team Foundation Server Power Tools的 Undo Unchanged命令

c:\myProject> tfpt uu . /noget /recursive 

感谢马特佛罗伦萨链接更新。

感谢Ray Vega的实际语法 。

安装Team Foundation Server电源工具 ,然后在命令行中使用tfpt.exe在项目工作空间目录的根目录下运行以下命令:

c:\myProject> tfpt uu . /noget /recursive

强烈build议使用/noget因为它可以防止所有项目文件的强制“最新”,这取决于总数可能需要很长的时间。

谢谢@mike&@ray,

我希望更容易。

在VS中,在工具菜单上,点击“外部工具”。

外部工具

点击添加。

input标题。

命令:tfpt.exe

参数:uu。 / noget /recursion

初始目录:[您可以从箭头button中select]。

在解决方案中撤消不变

在项目中撤消不变

两个新的命令被添加到工具菜单。

需要时使用它们。

请享用,

奥菲尔

  1. 用鼠标右键单击您的项目
  2. select撤消结帐,然后只需点击确定,或任何确认剩下…
  3. 然后,在撤销签出的同时,对于每个有REAL更改的文件,提示都会要求您确认签出该文件…只需单击“No to All”

Visual Studio将知道检出的文件是否有更改或没有。

警告:此方法还会删除文件,即尚未签入到TFS的文件。 如果你想保留这些文件,那么只需将它们从你“撤销”的文件组中排除。

如果您只是简单地检查所有重新签出的文件,TFS就足够聪明,可以确定哪些文件发生了变化,只能将其包含在服务器上logging的变更集中。

TFS通过比较登记前后的文件内容的MD5散列来做到这一点。

这一切都假设你的生成过程是纯粹更新同一组文件,即你永远不会有在上一代中生成的文件在下一代不需要的情况下(即你想要删除该文件)或文件更改名称。

如果您的stream程可能需要删除文件,最好的方法是查看Team Foundation Power Tools命令( tfpt )并使用tfpt online命令,该命令仅检查已更改的文件,并且足够智能pend删除任何不再需要的文件或更改的名称和挂钩添加。

祝你好运,

马丁。

请注意,TFS撤销不会恢复文件系统的“修改date”值。 这是非常令人沮丧的,特别是如果你使用像robocopy这样的工具来同步远程机器。 即使在撤销检出之后,如果您保存了文件,从而更新了“修改date”值,那么即使在撤消检出之后,该更新的值也会一直存在。

关于tfpt的uu选项(在大多数其他答案中推荐),有一些关于我一开始并不清楚的点。 首先,这是可以用命令tfpt uu /?访问的命令行帮助tfpt uu /?

取消多余的待处理更改。 如果具有挂起更改的项目的状态与服务器上的相同,则更改将被撤消。

用法:tfpt uu [/ changeset:changesetnum] [/recursion] [/ noget] [filespec …]

  • / changeset将工作空间与指定的变更集版本(而不是最新版本)的项目状态进行比较
  • filespec …只检查列出的filespecs冗余的变化
  • /recursion检查具有完整recursion的指定filespecs
  • / noget在检查之前不要运行

/变更集选项不能用于文件规格或/recursion。

现在让我分解其他答案中推荐的命令。

 tfpt uu . /noget /recursive 
  • tfpt uu指定我们希望使用“撤消未更改”命令。
  • . 表明(我猜)当前的工作目录应该用作filespec。
  • /noget确保在取消未更改的文件之前不调用“获取最新版本”。
  • /recursive确保不仅将考虑filespec,而且将recursion子文件夹和文件。 这似乎是依赖于filespec – 如果没有提供,那么整个工作空间处理。

所以这里有一些关于上面命令的事情需要注意…

  • 它依赖于工作目录。
  • 它不处理整个工作区。

我发现以下命令最适合我 – 它将处理整个工作区。

tfpt uu /noget

请注意,它仍然依赖于工作目录,因为tfpt使用它来确定应该处理哪个工作空间。 但是,只要你提供了一个工作区内的文件或文件夹的path,你就可以走了。

我可以看到Ray LionFang的方法在上面。 由于我没有代表,所以不能在那里发表评论。 虽然我喜欢这种方法,因为没有需要改变工具等……..

  1. 用鼠标右键单击您的项目
  2. select撤消结帐,然后只需点击确定,或不pipe什么确认…
  3. 然后在撤销结帐的时候,对于每一个REAL变化的文件,提示都会要求你确认该文件的签出…只需点击“No to All”
  4. Visual Studio将知道检出的文件是否有更改或没有。 请注意,此方法还会删除尚未从TFS中检入的添加文件…

…….这种方法存在一个问题,点击“No To All”会保留一些未修改的文件。 它看起来像撤消未修改的文件,直到它遇到实际修改的第一个文件,然后忽略其他未修改的文件,如果这是有道理的。 我只是偶尔看过这个效果。

一个潜在的解决方法是按照上述过程,而不是击中“全无”,而是为每个文件打“否”。 由于这可能需要一段时间,这取决于您正在处理的文件数量,通常我所做的是按住“ALT + N”,它只是加速所有文件,同时撤消所有未修改的文件。

它工作良好右键单击您的项目select撤消签出,然后只需单击确定,或任何确认留下…然后,当撤消签出时,对于每一个REAL变化的文件,提示将要求您确认签出该文件…只需单击“否全部”Visual Studio将知道检出的文件是否有更改或没有。

警告:此方法还会删除新文件,即尚未签入到TFS的文件。 如果你想保留这些文件,那么只需将它们从你“撤销”的文件组中排除。

据我所知,在TFS中,如果你签出一个团队项目,整个项目都被签出,你不能控制哪些文件被closures。 如果你想阻止签入某些文件,你可以locking它们。

在工作中,我们都讨厌TFS。