如何清除TFS代码库中不再需要的文件Pending Change和Lock?

来源:互联网 发布:软件网页培训学校 编辑:程序博客网 时间:2024/04/29 15:56

      公司中人员来来往往,当一个员工离开后,其曾经使用过的TFS workspace还是存在的,这就是为什么我们在Visual Studio的Source Control Explorer中浏览代码库中的文件时,仍然还能够看到已离职员工的名字出现在文件pending change用户中。

        一般情况下,这些无用的workspace不会对正常的工作有啥影响,只是多占用了一些TFS的存储空间而已。但是如果这些workspace中存在被锁的(locked)文件或文件夹,不解锁别人就无法打开。可以由具备权限的管理员在Source Control Explorer中(或者用tf lock命令)来解锁这些文件,但是如果类似的被锁文件很多的话,全部解锁它们将是一件很伤神的体力活。另一种更为高效的解决办法就是,删除所有这些不用的workspace。例如,在下面例子中,corp/jeff是公司中一名已经离职的员工的域账号,可以使用tf workspaces和tf workspace命令来找出其在TFS上拥有的所有workspace,然后一一清除它们。

tf workspaces /owner:corp/jeff
Collection: shanghaitfs/DefaultCollection

Workspace       Owner    Computer        Comment
--------------- -------- --------------- ---------------------------
STICKER         Jeff     JEFF-STICKER
STICKER1        Jeff     JEFF-STICKER
DEV01           Jeff     JEFF-EV01
WIN2008         Jeff     JEFF-WIN2008
NOTEBOOK        Jeff     JEFF-NOTEBOOK
WIN7            Jeff     JEFF-WIN7

       上一步列出了corp/jeff在TFS collection : shanghaitfs/defaultcollection上所拥有的所有workspace(tf workspaces命令允许使用/collection来指定collection,这里使用的默认的当前workspace的collection), 接下来使用tf workspace /delete命令就可以逐一清除掉它们了。

tf workspace /delete Sticker;corp/jeff
A deleted workspace cannot be recovered.
Workspace 'Sticker;corp/jeff' on server '
http://shanghaitfs:8080/tfs/defaultcollection' has 87 pending change(s). Are you sure you want to delete the workspace? (Yes/No) Y

     注意:要删除其他人的workspace,你必须具有“Administrator workspaces”权限,更多有关TFS权限的内容,请参见Team Foundation Server Permissions. 此外,tf workspace /remove是另外一个删除workspace的命令,区别在于/remove只是删除本地cache中的条目,而不是TFS服务器端的workspace。

     其实在日常TFS使用中,删除不用的workspace不应该只是针对离职的员工。因为大家会经常创建workspace, 但实际上几乎没有人会意识到在不使用workspace后要去删除它。日积月累,TFS上会堆积有大量不用的workspace。TFS的管理员应该定期提醒在职员工自己清楚掉自己长期不使用的workspace, 这对于服务于几百或者上千人的TFS服务器来说还是很必要。例如,下面的命令列出指定server上的所有workspace。

 

 

 

tf workspaces /owner:* /computer:* /server:http://shanghaitfs:8080/tfs/defaultcollection

 

(2011/4/10更新) 虽然tf workspaces可以列出所有workspace,但是列出的信息中并没有包括workspace的最后访问时间,所以不足以帮助TFS管理员判断出哪些workspace可能不再使用的。下面这些方法可以帮助我们进行判断:

  1. TFS Sidekicks工具,它是一款免费软件,可以列出workspace的信息信息;
  2. tfsclean.exe也是一款免费的小工具,帮助我们查找和清理不用的workspace;
  3. 最后一种途径就是编写你自己的工具,TFS Client Object Model API提供了VersionControlServer.QueryWorkspaces()函数,用于获取并返回Workspace对象数组。而该对象中就包含了- LastAccessDate属性。

 

参考资料

  • Improvements to workspaces in TFS 2010