TFS: 如何撤消批处理文件中未修改文件的签出

我们使用一个批处理文件来生成代码,它会自动签出 TeamFoundationServer (TFS)生成的文件,以便重新生成它们。这些文件中的大多数都没有被修改,但是生成器事先并不知道这一点。

“ tfs undo”命令撤消签出,但是如果某些内容已经被修改(我们不希望这样做) ,则会提示。我们也不想马上签入生成的文件。

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

73120 次浏览

据我所知,在 TFS 中,如果您签出了一个团队项目,那么整个项目都被签出了,您无法控制哪些文件被关闭。如果要防止签入某些文件,可以锁定它们。

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

查看 TeamFoundationServer 电源工具2011年8月的 Undo Unchange 命令

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

感谢 Matt Florence 的链接更新。

感谢 Ray Vega 的 实际的语法

如果您只是简单地再次签入您签出的所有文件,那么 TFS 足够聪明,能够找出哪些文件发生了更改,并且只将它们包含在服务器上记录的变更集中。

TFS 通过比较签入之前和之后文件内容的 MD5哈希来实现这一点。

这一切都是假设你的生成过程纯粹是更新相同的文件集,也就是说,你永远不会遇到上一代生成的文件在下一代不需要的情况(也就是说,你想挂起一个文件的删除)或文件改变名称。

如果您的进程可能需要删除文件,您最好的选择可能是查看 TeamFoundation 电动工具命令(Tfpt)并使用 tfpt 在线命令,该命令将只检出已更改的文件,并且将足够聪明地挂起任何不再需要的文件的删除或更改名称和挂起添加。

祝你好运,

马丁。

使用 tfpt.exe 在项目工作区目录的根目录下安装 TeamFoundationServer 电源工具并从命令行运行以下命令:

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

包括 /noget是强烈建议,因为它可以防止一个强制’获得最新’的所有项目的文件,这取决于总数可以采取非常长的时间。

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

谢谢你们,

我希望事情能简单点。

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

External Tools

单击“添加”。

输入标题。

命令: tfpt.exe

参数: uu./noget/递归

初始目录: [您可以从箭头按钮中选择]。

Undo unchanged in solution

Undo unchanged in project

“工具”菜单中添加了两个新命令。

需要的时候使用它们。

好好享受吧,

奥菲尔

  1. 右键单击您的项目
  2. 选择撤消签出,然后单击“确定”,或者留下任何确认..。
  3. 然后,在撤消签出时,对于每个包含 REAL 更改的文件,提示将要求您确认该文件的签出... ... 只需单击“ No to All”

Visual Studio 将知道签出文件是否有更改。

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

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

取消多余的挂起的更改 挂起的更改与服务器上的更改相同,则更改为 解开。

用法: tfpt uu [/changeset: changesetnum ][/sive ][/noget ] [ filespec... ]

  • /changeset 将工作区与指定的变更集版本(而不是最新版本)中的项状态进行比较
  • 只检查列出的文件是否有多余的更改
  • 使用完全递归检查指定的文件
  • /noget 检查前不要运行 get

/changeset 选项不能与文件或/递归一起使用。

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

tfpt uu . /noget /recursive
  • tfpt uu指定我们希望使用“ Undo Unchange”命令。
  • .表示(我猜想)当前的工作目录应该用作 filespec。
  • /noget确保在撤消未更改的文件之前不会调用“获取最新版本”。
  • /recursive确保不仅要考虑 filespec,还要考虑所有递归子文件夹和文件。这似乎取决于文件规范——如果没有提供任何文件,那么将处理整个工作区。

关于上面的命令有几点需要注意..。

  • 这取决于工作目录。
  • 它不处理整个工作区。

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

tfpt uu /noget

请注意,它仍然取决于工作目录,tfpt 使用它来确定应该处理哪个工作区。但是,只要提供了工作区中文件或文件夹的路径,就可以开始了。

我可以看到上面雷狮方的接近。不能在那里评论,因为我没有代表。虽然我喜欢这种方法,因为没有需要改变的工具等..。

  1. 右键单击您的项目
  2. 选择撤消检出,然后单击确定,或者任何留下的确认..。
  3. 然后,在解开的时候 Checkout,对于其中包含 REAL 更改的每个文件,提示符将 要求您确认该文件的签出... ... 只需单击“拒绝” 全部
  4. Visual Studio 将知道签出文件是否有更改或 请注意,此方法还会删除添加的不是 还从 TFS 登记入住。

这个方法有一个问题就是点击“全部否定”会保留一些没有被修改的文件。它似乎会做一些类似于撤销未修改的文件,直到找到第一个实际修改的文件,然后忽略其余未修改的文件,如果这样做有意义的话。我只是偶尔见过这种效果。

一个可能的解决办法是遵循上述过程,但是不要点击“ No To All”,而是为每个文件点击“ No”。由于这可能需要一段时间,这取决于您正在处理的文件的数量,我通常做的是按住“ ALT + N”,它只是加速通过所有文件,同时撤消所有未修改的文件。

在使用 TFS2017VS2017/VS2019时更新了这个问题的答案。

TFS 2017的强大工具并不存在,旧的工具也不能很好地与之配合使用,但显然大部分功能已经转移到 VS2017本身或插件(见下文)。

Visual Studio 2017/2019扩展

撤消未更改的文件等操作已移动到

VS2017延期

VS2019延期

“撤消未更改”按钮位置:

undo unchanged button location

已知窃听器

您必须打开“源代码管理资源管理器”(并保持打开状态) ,以便“撤消未更改”显示在“挂起的更改”视图的“操作”菜单中。 此处报道。

视窗壳积分法扩展

此外,你仍然可以通过一个不再链接到 TFS 电动工具的 独立安装程序来设置 Windows 壳积分法。

Windows 壳积分法的工作原理和之前的 powertools 不完全一样,但是最重要的操作对我来说是有效的。

我有点迟到了,但是如果你已经控制了批处理脚本,你可以简单地 没有检出生成过程中的任何文件,然后运行类似下面的代码:

tf reconcile [path-to-local-folder] /promote /adds /deletes /recursive

确保签出 只有要签入的文件。您可以在这里了解更多关于调解命令及其语法的信息:

Https://learn.microsoft.com/en-us/azure/devops/repos/tfvc/reconcile-command