我们使用批处理文件来生成代码,它会自动从 Team Foundation Server (TFS) 中检出生成的文件,以便重新生成它们。这些文件中的大部分都没有被修改,但生成器并不提前知道这一点。
“tfs undo”命令撤消检出,但会提示是否有一些已被修改(我们不想这样做)。我们也不想立即签入生成的文件。
是否有一个命令(或一系列命令)可以在不提示用户的情况下撤消所有未修改文件的签出?
ADD
更改(请参阅 Ray's answer )。
查看 Team Foundation Server Power Tools August 2011 的 Undo Unchanged 命令
c:\myProject> tfpt uu . /noget /recursive
感谢马特佛罗伦萨的链接更新。
感谢 Ray Vega actual syntax。
安装 Team Foundation Server Power Tools 并使用项目工作区目录根目录下的 tfpt.exe 从命令行运行以下命令:
c:\myProject> tfpt uu . /noget /recursive
强烈建议包含 /noget
,因为它可以防止强制“获取最新”所有项目文件,这取决于总数可能需要很长时间。
cd
到您的工作区目录所在的位置(例如,我的是 c:\myProject
)或在 uu
之后明确包含它(用它替换句点 .
)
谢谢@mike 和@ray,
我想让它变得更容易。
在 VS 中,在工具菜单中,单击“外部工具”。
https://i.stack.imgur.com/UVJVF.jpg
单击添加。
输入标题。
命令:tfpt.exe
参数:uu 。 /noget /递归
初始目录:[您可以从箭头按钮中选择]。
https://i.stack.imgur.com/okGud.jpg
https://i.stack.imgur.com/HjZXJ.jpg
工具菜单中添加了两个新命令。
需要时使用它们。
享受,
奥菲尔
右键单击您的项目选择撤消签出,然后只需单击确定,或者留下任何确认...然后,在撤消签出时,对于其中有真正更改的每个文件,都会提示您确认签出该文件...只需单击“全部拒绝”
Visual Studio 将知道签出的文件是否有更改。
警告:此方法还会删除新文件,即尚未签入 TFS 的文件。如果您想保留这些文件,只需将它们从您“撤消”的文件集中排除。
Be aware that this method also removes added files that are not yet checked in from TFS.
...是的,这是一个非常直接的取消资格。
仅在使用 TFS2017 和 VS2017/VS2019 时使用答案更新了此问题。
TFS 2017 不存在电动工具,旧的工具不能很好地与它一起工作,但显然大部分功能已移至 VS2017 本身或插件(见下文)。
Visual Studio 2017/2019 扩展
撤消未更改的文件等一些操作已移至
“撤消未更改”按钮位置:
https://i.stack.imgur.com/wqYDr.png
已知错误
您必须打开“源代码管理资源管理器”(并使其保持打开状态),以便“撤消未更改”显示在“待定更改”视图的“操作”菜单中。 reported here。
Windows Shell 集成扩展
此外,您仍然可以通过不再链接到 TFS Power Tools 的 separate installer 设置 Windows shell 集成。
windows shell 集成的工作方式与之前的 powertools 不完全相同,但最重要的操作对我有用。
如果您只是简单地将所有已签出的文件重新签入,TFS 足够聪明,可以找出哪些文件发生了更改,并且只将它们包含在服务器上记录的更改集中。
TFS 通过比较签入前后文件内容的 MD5 哈希值来实现这一点。
这一切都假设您的生成过程纯粹是更新同一组文件,即您永远不会遇到下一代不需要上一代生成的文件的情况(即您希望挂起删除对于该文件)或文件更改名称。
如果您的进程可能需要删除文件,最好的办法可能是查看 Team Foundation Power Tools 命令 (tfpt) 并使用 tfpt online 命令,该命令仅检查已更改的文件,并且足够智能为不再需要或更改名称的任何文件挂起删除并挂起添加。
祝你好运,
马丁。
请注意,TFS 撤消不会恢复文件系统的“修改日期”值。这非常令人沮丧,特别是如果您使用 robocopy 之类的工具来同步远程机器。即使在您撤消签出之后,如果您保存了文件从而更新了“修改日期”值,那么即使在撤消签出之后,更新的值也会保留。
关于 tfpt 的 uu 选项(在大多数其他答案中推荐)有几点我起初并不清楚。首先,这是可以使用命令 tfpt uu /?
访问的命令行帮助
撤消多余的挂起更改。如果具有未决更改的项目的状态与服务器上的状态相同,则撤消更改。用法:tfpt uu [/changeset:changesetnum] [/recursive] [/noget] [filespec...] /changeset 将工作区与指定的变更集版本而不是最新版本的文件规范的项目状态进行比较...仅检查列出的冗余更改的文件规范 /recursive 使用完全递归检查指定的文件规范 /noget 在检查之前不要运行 get /changeset 选项不能与 filespecs 或 /recursive 一起使用。
现在让我分解其他答案中推荐的命令。
tfpt uu . /noget /recursive
tfpt uu 指定我们希望使用“撤消未更改”命令。
.表示(我猜)当前工作目录应该用作文件规范。
/noget 确保在撤消未更改的文件之前不调用“获取最新版本”。
/recursive 确保不仅考虑文件规范,而且考虑所有递归子文件夹和文件。这似乎取决于文件规范 - 如果没有提供,则处理整个工作区。
因此,关于上面的命令,这里有几点需要注意......
它依赖于工作目录。
它不会处理整个工作区。
我发现以下命令最适合我——它将处理整个工作区。
tfpt uu /noget
请注意,它仍然依赖于 tfpt 中的工作目录,它使用它来确定应该处理哪个工作空间。但是,只要您提供工作区中文件或文件夹的路径,就可以了。
我可以在上面看到 Ray LionFang 的方法。由于我没有代表,因此无法在那里发表评论。虽然我喜欢这种方法,因为不需要对工具等进行任何更改......
右键单击您的项目选择撤消签出,然后只需单击确定,或者留下任何确认...然后,在撤消签出时,对于其中有真正更改的每个文件,都会提示您确认签出该文件...只需单击“全部否”,Visual Studio 就会知道签出的文件是否有更改。请注意,此方法还会删除尚未从 TFS 签入的已添加文件...
.......这种方法存在一个问题,即点击“No To All”会保留一些未修改的文件。它似乎做了类似撤消未修改文件的操作,直到它遇到实际修改的第一个文件,然后忽略其余未修改的文件,如果这有任何意义的话。这种效果我只见过一次。
一个潜在的解决方法是遵循上述过程,但不要对每个文件点击“No To All”,而是点击“No”。由于这可能需要一段时间,具体取决于您正在使用的文件数量,我通常做的是按住“ALT + N”,它只是在撤消所有未修改的文件时加速所有文件。
据我了解,在 TFS 中,如果您签出团队项目,则会签出整个项目,并且您无法控制哪些文件被关闭。如果您想阻止签入某些文件,您可以锁定它们。
在工作中,我们都讨厌 TFS。