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]。
两个新的命令被添加到工具菜单。
需要时使用它们。
请享用,
奥菲尔
- 用鼠标右键单击您的项目
- select撤消结帐,然后只需点击确定,或任何确认剩下…
- 然后,在撤销签出的同时,对于每个有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的方法在上面。 由于我没有代表,所以不能在那里发表评论。 虽然我喜欢这种方法,因为没有需要改变工具等……..
- 用鼠标右键单击您的项目
- select撤消结帐,然后只需点击确定,或不pipe什么确认…
- 然后在撤销结帐的时候,对于每一个REAL变化的文件,提示都会要求你确认该文件的签出…只需点击“No to All”
- Visual Studio将知道检出的文件是否有更改或没有。 请注意,此方法还会删除尚未从TFS中检入的添加文件…
…….这种方法存在一个问题,点击“No To All”会保留一些未修改的文件。 它看起来像撤消未修改的文件,直到它遇到实际修改的第一个文件,然后忽略其他未修改的文件,如果这是有道理的。 我只是偶尔看过这个效果。
一个潜在的解决方法是按照上述过程,而不是击中“全无”,而是为每个文件打“否”。 由于这可能需要一段时间,这取决于您正在处理的文件数量,通常我所做的是按住“ALT + N”,它只是加速所有文件,同时撤消所有未修改的文件。
它工作良好右键单击您的项目select撤消签出,然后只需单击确定,或任何确认留下…然后,当撤消签出时,对于每一个REAL变化的文件,提示将要求您确认签出该文件…只需单击“否全部”Visual Studio将知道检出的文件是否有更改或没有。
警告:此方法还会删除新文件,即尚未签入到TFS的文件。 如果你想保留这些文件,那么只需将它们从你“撤销”的文件组中排除。
据我所知,在TFS中,如果你签出一个团队项目,整个项目都被签出,你不能控制哪些文件被closures。 如果你想阻止签入某些文件,你可以locking它们。
在工作中,我们都讨厌TFS。