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

时间:2009-02-13 00:44:51

标签: tfs version-control tfvc

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

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

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

10 个答案:

答案 0 :(得分:197)

查看Team Foundation Server Power Tools August 2011

的撤消未更改命令
c:\myProject> tfpt uu . /noget /recursive

感谢Matt Florence提供链接更新。

感谢Ray Vega actual syntax

答案 1 :(得分:123)

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

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

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

答案 2 :(得分:117)

谢谢@mike& @ray,

我希望让它变得更容易。

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

External Tools

单击“添加”。

输入标题。

命令:tfpt.exe

参数:uu。 / noget / recursive

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

Undo unchanged in solution

Undo unchanged in project

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

在需要时使用它们。

享受,

奥菲尔

答案 3 :(得分:26)

  1. 右键单击您的项目
  2. 选择撤消结帐,然后点击“确定”,或者留下任何确认信息......
  3. 然后,在撤消结帐时,对于每个包含REAL更改的文件,会出现提示,要求您确认该文件的签出...只需单击“全部否”
  4. Visual Studio将知道签出的文件是否有变化。

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

答案 4 :(得分:8)

如果您只是再次检查已签出的所有文件,TFS足够聪明,可以找出哪些更改,并且只将它们包含在服务器上记录的变更集中。

TFS通过在登记入住前后比较文件内容的MD5哈希值来做到这一点。

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

如果您的进程可能需要删除文件,那么您最好的选择是查看Team Foundation Power Tools命令(tfpt)并使用tfpt online命令,该命令仅检出具有的文件已更改,并且足够聪明,可以删除任何不再需要的文件或更改名称和添加的文件。

祝你好运,

马丁。

答案 5 :(得分:7)

仅使用 TFS2017 VS2017 时,此问题的答案已得到更新。

TFS 2017尚不存在电动工具,旧工具无法与之完美配合,但显然大多数功能已移至VS2017本身或插件(请参见下文)。

Visual Studio 2017扩展

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

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

undo unchanged button location

已知错误

您必须打开“源代码管理资源管理器”(并将其保持打开状态),以便在“待更改”视图的“操作”菜单中显示“撤消未更改”。 reported here

Windows Shell集成扩展

此外,您仍然可以通过不再与TFS Power Tools链接的separate installer来设置Windows Shell集成。

Windows Shell集成与以前的Powertools不能完全一样地工作,但是最重要的操作对我有用。

答案 6 :(得分:5)

请注意,TFS撤消不会还原文件系统"修改日期"值。这非常令人沮丧,特别是如果您使用robocopy等工具来同步远程计算机。即使在您撤消签出后,如果您保存了文件,从而更新了"修改日期"价值,即使在撤销结账后,更新后的价值仍会存在。

答案 7 :(得分:4)

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

访问的命令行帮助
  

撤消多余的待处理更改。如果项目的状态有   挂起的更改与服务器上的相同,然后更改是   撤消。

     

用法:tfpt uu [/ changeset:changesetnum] [/ recursive] [/ noget]   [文件规范...]

     
      
  • / changeset将工作区与指定的变更集版本的项目状态进行比较,而不是最新版本
  •   
  • filespec ...仅检查列出的文件规范以进行冗余更改   
  • / recursive使用完全递归检查指定的文件规范
  •   
  • / noget在检查之前不要运行get
  •   
     

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

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

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

因此,关于上面的命令,有几点需要注意......

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

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

tfpt uu /noget

请注意,它依赖于工作目录,因为tfpt使用它来确定应该处理哪个工作空间。但只要您提供工作区内文件或文件夹的路径,就可以了。

答案 8 :(得分:3)

我可以看到Ray LionFang的方法。由于我没有代表,所以无法在那里发表评论。虽然我喜欢这种方法,因为工具等没有必要改变........

  
      
  1. 右键单击您的项目
  2.   
  3. 选择撤消结帐,然后点击“确定”,或者留下任何确认信息......
  4.   
  5. 然后,撤消   checkout,对于每个有REAL变化的文件,都会出现提示   要求您确认该文件的签出...只需单击"否   所有"
  6.   
  7. Visual Studio将知道签出的文件是否有更改或   没有。请注意,此方法还会删除不添加的已添加文件   但是从TFS登记了......
  8.   

.......这种方法存在一个问题,那就是“打击所有人”#34;保留一些未修改的文件。它似乎做了一些事情,比如撤消未修改的文件,直到它碰到第一个实际修改的文件,然后忽略其余的未修改文件,如果这有意义的话。我偶尔只见过这种效果。

潜在的解决方法是遵循上述过程,而不是点击“不要全部”,然后点击"否"对于每个文件。由于这可能需要一段时间,具体取决于您正在使用的文件数量,我通常做的是按住" ALT + N",它只是加速所有文件,同时撤消ALL未修改的文件。

答案 9 :(得分:-20)

据我所知,在TFS中,如果您签出一个团队项目,整个项目将被检出,您无法控制哪些文件被删除。如果您想阻止签入某些文件,可以锁定它们。

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