代码之家  ›  专栏  ›  技术社区  ›  Robert Wagner

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

  •  165
  • Robert Wagner  · 技术社区  · 17 年前

    我们使用批处理文件来生成代码,并自动地从Team Foundation Server(TFS)中检查生成的文件,以便可以重新生成它们。这些文件中的大多数都没有被修改,但是生成器事先并不知道这一点。

    “tfs undo”命令撤消签出,但提示是否修改了某些内容(我们不想这样做)。我们也不想立即签入生成的文件。

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

    10 回复  |  直到 17 年前
        1
  •  194
  •   Community Mohan Dere    9 年前

    查看 Team Foundation Server Power Tools August 2011

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

    感谢Matt Florence更新链接。

    谢谢雷·维加 actual syntax .

        2
  •  123
  •   Ray    16 年前

    安装 Team Foundation Server Power Tools 并在项目工作区目录根目录下使用tfpt.exe从命令行运行以下命令:

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

    包括 /noget 强烈推荐,因为它可以防止强制“获取最新的”项目的所有文件,这取决于总数可能需要非常长的时间。

        3
  •  117
  •   Ofir    14 年前

    谢谢你@mike&@ray,

    我希望能更容易些。

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

    External Tools

    单击“添加”。

    输入标题。

    命令:tfpt.exe

    参数:uu。/noget/递归

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

    Undo unchanged in solution

    Undo unchanged in project

    两个新命令将添加到“工具”菜单。

    必要时使用。

    享受,

    奥菲尔

        4
  •  25
  •   Michael Richardson    9 年前
    1. 右键单击项目
    2. 选择“撤消签出”,然后只需单击“确定”,或者只剩下确认…
    3. 然后,在撤消签出时,对于每个文件中都有真正的更改,系统将提示您确认该文件的签出…只需点击“全部否”

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

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

        5
  •  8
  •   Martin Woodward    17 年前

    如果您只需再次签入签出的所有文件,那么tfs就足够智能地确定哪些文件发生了更改,并且只将它们包含在服务器上记录的变更集中。

    TFS通过比较签入前后文件内容的MD5散列来实现这一点。

    这都是假设您的生成过程纯粹是更新同一组文件,即,在下一代中不需要上一代中生成的文件(即,您希望挂起删除该文件)或文件更改名称的情况下,您将永远不会遇到这种情况。

    如果您的进程可能需要删除文件,那么最好的选择可能是查看 Team Foundation Power Tools 命令( tfpt )并使用tfpt online命令,该命令将只签出已更改的文件,并且对于不再需要或已更改名称的任何文件,它将足够智能地挂起删除并添加挂起。

    祝你好运,

    马丁。

        6
  •  5
  •   evermeire    14 年前

    注意,tfs undo不会还原文件系统的“date modified”值。这是非常令人沮丧的,尤其是如果你使用像robocopy这样的工具来同步远程机器。即使在撤消签出之后,如果保存了文件从而更新了“修改日期”值,那么即使在撤消签出之后,更新的值也会保留。

        7
  •  5
  •   itsho    7 年前

    使用时用答案更新了此问题 TFS2017 和 VS2017 只有。

    TFS 2017不存在电动工具,旧的电动工具无法与之协同工作,但显然大部分功能已转移到VS2017本身或插件(见下文)。

    Visual Studio 2017扩展

    某些操作(如撤消未更改的文件)已移动到 extension for VS2017

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

    undo unchanged button location

    Windows Shell集成扩展

    此外,还可以通过 separate installer 它不再链接到TFS电动工具。

    Windows Shell集成的工作方式与以前的Powertools不完全相同,但最重要的操作对我有效。

        8
  •  4
  •   Scott Munro Shimmy Weitzhandler    10 年前

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

    撤消多余的挂起更改。如果项的状态 挂起的更改与服务器上的相同,则更改为 未完成的

    用法:tfpt uu[/changeset:changesetnum][/recursive][/noget] [文件名…]

    • /变更集将工作区与指定的变更集版本(而不是最新版本)的项状态进行比较
    • 文件…仅检查列出的文件规范是否有冗余更改
    • /递归使用完全递归检查指定的文件规范
    • /检查前不运行GET

    /changeset选项不能与filespec或/recursive一起使用。

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

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

    关于上面的命令,这里有几点需要注意…

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

    我发现下面的命令最适合我-它将处理整个工作区。

    tfpt uu /noget

    注意,它仍然依赖于工作目录,在这个目录中,tfpt使用它来确定应该处理哪个工作区。但是,只要您在工作区中提供一个文件或文件夹的路径,您就可以走了。

        9
  •  3
  •   Ash    10 年前

    我可以看到雷·伦芳的方法。不能在那里评论,因为我没有代表,而我喜欢这种方法,因为工具等不需要更改……

    1. 右键单击项目
    2. 选择“撤消签出”,然后只需单击“确定”,或者只剩下确认…
    3. 然后,在撤消时 签出,对于每个文件中都有真正的更改,提示将 要求您确认签出该文件…只需点击“否到” 所有“
    4. Visual Studio将知道签出的文件是否有更改或 一个也没有。请注意,此方法还删除了未添加的文件 但是从tfs签入…

    ……这种方法存在一个问题,即点击“全部拒绝”会保留一些未修改的文件。它似乎做了一些类似于撤消未修改的文件的操作,直到它碰到第一个实际修改的文件,然后忽略其余未修改的文件(如果这有任何意义的话)。我偶尔才看到这种效果。

    一个潜在的解决方法是遵循上述过程,但不是点击“全部不”,而是点击每个文件的“不”。由于这可能需要一段时间,这取决于您正在处理的文件的数量,我通常要做的是按住“alt+n”,它只是在撤消所有未修改的文件的同时,快速浏览所有文件。

        10
  •  -20
  •   achinda99    17 年前

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

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