我们使用批处理文件生成代码,它会自动从Team Foundation Server(TFS)中检出生成的文件,以便它可以重新生成它们。这些文件中的大多数都没有被修改,但生成器并没有提前知道这一点。
“tfs undo”命令撤消签出,但会提示是否已修改某些(我们不想这样做)。我们也不想立即签入生成的文件。
是否有命令(或一系列命令)撤消所有未修改文件的签出而不提示用户?
答案 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中,在“工具”菜单中,单击“外部工具”。
单击“添加”。
输入标题。
命令:tfpt.exe
参数:uu。 / noget / recursive
初始目录:[您可以从箭头按钮中选择]。
“工具”菜单中添加了两个新命令。
在需要时使用它们。
享受,
奥菲尔
答案 3 :(得分:26)
Visual Studio将知道签出的文件是否有变化。
警告:此方法还会删除新文件,即尚未签入TFS的文件。如果你想保留这些文件,那么只需将它们从你“撤消”的文件集中排除。
答案 4 :(得分:8)
如果您只是再次检查已签出的所有文件,TFS足够聪明,可以找出哪些更改,并且只将它们包含在服务器上记录的变更集中。
TFS通过在登记入住前后比较文件内容的MD5哈希值来做到这一点。
这都假设您的生成过程纯粹更新了同一组文件,即您永远不会遇到下一代不需要上一代生成的文件的情况(即您希望删除该文件的删除)或文件更改名称。
如果您的进程可能需要删除文件,那么您最好的选择是查看Team Foundation Power Tools命令(tfpt)并使用tfpt online命令,该命令仅检出具有的文件已更改,并且足够聪明,可以删除任何不再需要的文件或更改名称和添加的文件。
祝你好运,马丁。
答案 5 :(得分:7)
仅使用 TFS2017 和 VS2017 时,此问题的答案已得到更新。
TFS 2017尚不存在电动工具,旧工具无法与之完美配合,但显然大多数功能已移至VS2017本身或插件(请参见下文)。
某些操作(例如撤消未更改的文件)已移至extension for VS2017
“撤消未更改”按钮的位置:
您必须打开“源代码管理资源管理器”(并将其保持打开状态),以便在“待更改”视图的“操作”菜单中显示“撤消未更改”。 reported here。
此外,您仍然可以通过不再与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 ...仅检查列出的文件规范以进行冗余更改 li>
- / 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的方法。由于我没有代表,所以无法在那里发表评论。虽然我喜欢这种方法,因为工具等没有必要改变........
- 右键单击您的项目
- 选择撤消结帐,然后点击“确定”,或者留下任何确认信息......
- 然后,撤消 checkout,对于每个有REAL变化的文件,都会出现提示 要求您确认该文件的签出...只需单击"否 所有"
- Visual Studio将知道签出的文件是否有更改或 没有。请注意,此方法还会删除不添加的已添加文件 但是从TFS登记了......
醇>
.......这种方法存在一个问题,那就是“打击所有人”#34;保留一些未修改的文件。它似乎做了一些事情,比如撤消未修改的文件,直到它碰到第一个实际修改的文件,然后忽略其余的未修改文件,如果这有意义的话。我偶尔只见过这种效果。
潜在的解决方法是遵循上述过程,而不是点击“不要全部”,然后点击"否"对于每个文件。由于这可能需要一段时间,具体取决于您正在使用的文件数量,我通常做的是按住" ALT + N",它只是加速所有文件,同时撤消ALL未修改的文件。
答案 9 :(得分:-20)
据我所知,在TFS中,如果您签出一个团队项目,整个项目将被检出,您无法控制哪些文件被删除。如果您想阻止签入某些文件,可以锁定它们。
在工作中,我们都讨厌TFS。