“tfs undo”命令会撤销检出操作,但会提示已被修改的文件(我们不想要此操作)。我们也不想立即检入生成的文件。
是否有一种命令(或一系列命令)可以撤消所有未修改的文件的检出操作而不提示用户?
请查看Team Foundation Server Power Tools August 2011的撤消未更改命令。
c:\myProject> tfpt uu . /noget /recursive
感谢Matt Florence更新链接。
感谢Ray Vega提供实际语法。
安装Team Foundation Server Power Tools,并在项目工作区目录下使用tfpt.exe命令行运行以下操作:
c:\myProject> tfpt uu . /noget /recursive
强烈建议包括/noget
选项,因为它可以防止对项目所有文件进行强制“获取最新版本”的操作,从而节省大量时间,特别是当文件总数较多时。
cd
命令切换到你的工作区目录(例如,我的是 c:\myProject
),要么在 uu
命令后显式地包含它(用它替换句号 .
)。 - Ray感谢@mike和@ray,
我希望能让它更容易些。
在VS中,在"工具"菜单中,点击"外部工具"。
点击"添加"。
输入标题。
命令:tfpt.exe
参数:uu . /noget /recursive
初始目录:[你可以从箭头按钮中选择]。
两个新命令已添加到"工具"菜单中。
需要时使用它们。
享受吧,
Ofir
Visual Studio会知道已检出的文件是否有更改。
警告:此方法还会删除新的文件,即尚未检入TFS的文件。如果要保留这些文件,则只需将它们从您要“撤销”的文件集中排除即可。
在使用 TFS2017 和 VS2017/VS2019 时,更新此问题并提供了答案。
Power Tools 已不适用于 TFS 2017,而旧工具无法与其良好配合,但显然大部分功能已移至 VS2017 本身或插件中(见下文)。
某些操作,如撤消未更改的文件,已移至VS2017 扩展程序 或 VS2019 扩展程序(如下所示)。
"撤消未更改" 按钮位置:
必须打开“源代码控制资源管理器”(并将其保持打开状态),才能在“待处理的更改”视图的“操作”菜单中显示“撤消未更改”(在此处报告)。
同时,你仍然可以通过单独的安装程序设置Windows shell集成,这个安装程序不再与TFS Power Tools相关联。
与之前的PowerTools相比,Windows shell集成的功能可能会有所不同,但对于我来说,最重要的操作都能正常使用。
请注意,TFS的撤销操作不会恢复文件系统中的“修改日期”值。这一点非常令人沮丧,特别是如果您使用像robocopy这样的工具来同步远程机器。即使您撤销了检出操作,如果您保存了文件并更新了“修改日期”值,那么更新后的值将在撤消检出操作后继续存在。
我看到了Ray LionFang的方法。由于我的声望不足,无法在那里发表评论。虽然我喜欢这种方法,因为不需要对工具进行任何更改......
- 右击项目
- 选择撤销检出,然后只需点击确定或其他确认......
- 然后,在撤消检出时,对于每个实际更改的文件,都会提示您确认该文件的检出...只需单击“全部否”
- Visual Studio将知道已检出的文件是否有更改。请注意,此方法还会从TFS中删除尚未签入的添加文件...
.......这种方法存在问题,因为点击“全部否”会保留一些未经修改的文件。它似乎会撤销未修改的文件,直到遇到第一个实际更改的文件,然后忽略其他未修改的文件,如果这有什么意义的话。我只偶尔见到过这种情况。
一个潜在的解决方法是按照上述步骤操作,但是不要点击“全部否”,而是对每个文件点击“否”。由于这可能需要一些时间,具体取决于您正在处理的文件数,所以我通常按住“ALT + N”,它就会在解除所有未修改的文件的同时快速地跳过所有文件。
关于tfpt的uu选项(在大多数其他答案中推荐使用)有几个要点一开始并不清楚。首先,这是可以通过命令tfpt uu /?
访问的命令行帮助。
撤销冗余的待处理更改。如果具有待处理更改的项目的状态与服务器上的状态相同,则更改将被撤消。
用法:tfpt uu [/changeset:changesetnum] [/recursive] [/noget] [filespec...]
- /changeset 将工作区与指定版本的项目状态进行比较,而不是最新版本
- filespec... 仅检查列出的文件规范以获取冗余更改
- /recursive 使用完整递归检查指定的文件规范
- /noget 在检查之前不运行获取
不能在文件规范或/recursive中使用/changeset选项。
现在让我分解一下其他答案中推荐的命令。
tfpt uu . /noget /recursive
tfpt uu
指定使用“撤消未更改”命令。.
表示(我猜)应该使用当前工作目录作为文件规范。/noget
确保在撤消未更改的文件之前不会调用“获取最新版本”。/recursive
确保不仅考虑文件规范,而且考虑所有递归子文件夹和文件。这似乎取决于文件规范 - 如果没有提供,则处理整个工作区。因此,有几件事情需要注意关于上面的命令...
我发现以下命令对我最有效 - 它将处理整个工作区。
tfpt uu /noget
请注意,它仍然依赖于工作目录,因为tfpt使用它来确定应该处理哪个工作区。但只要您提供工作区中文件或文件夹的路径,就可以开始了。
我来晚了,但如果您可以控制批处理脚本,您可以在生成过程中不检出任何文件,然后运行类似以下的命令:
tf reconcile [path-to-local-folder] /promote /adds /deletes /recursive
确保您只检查要签入的文件。您可以在此处阅读有关reconcile命令及其语法的更多信息:
https://learn.microsoft.com/en-us/azure/devops/repos/tfvc/reconcile-command
ADD
更改(请参见Ray's answer)。 - Elaskanator