使用“Team Foundation Sidekicks”管理 Microsoft Team Foundation 版本控制 (TFVC)





5.00/5 (9投票s)
一个插件,允许您使用“Team Foundation Sidekicks”工具从 TFVC 中“销毁”项。
概述
Team Foundation 版本控制 (TFVC) 拥有版本控制系统 (例如:SourceSafe、Source Gear、CVS、Subversion 等) 最常见的功能,如文件版本管理、与源代码关联的用户和权限管理,或者在项目中创建分支。TFVC 还引入了新功能,如“挂起和解除挂起更改”、“签入策略”以及“独占或共享签出”(更多信息:MSDN)。
在使用 TFVC 时,您将涉及许多任务,例如:管理工作区、设置用户权限、查找是谁锁定了文件、比较文件历史记录、从 TFS 中销毁版本控制文件/文件夹等。其中一些功能只能通过命令行使用,因此,最终您可能会写很多命令行。这时,“Team Foundation Sidekicks”工具就派上用场了。
我在网上搜索处理上述常见任务的图形化工具时,发现一个网站,该网站将其一款产品描述为“一套面向 Microsoft Team Foundation Server 管理员和高级用户的工具,为多用户 TFS 环境中的管理和高级版本控制任务提供图形用户界面”。而且,最棒的是它是一款免费软件套件,并可根据此许可证用于商业或非商业用途。
因此,我在 TFS 中创建了一个测试项目,并开始评估该产品的所有功能,在此处查看更多信息。经过一段时间的试用,我发现了很多很酷的功能,但最吸引我的是一个标有“Add Sidekick..”的菜单项。于是,我想,也许我可以编写自己的 TFS sidekick 并将其插入到该工具中。
问题所在
有时,出于磁盘空间考虑,我需要永久删除 TFVC 中的文件/文件夹(销毁文件/文件夹);我删除了可能为测试目的创建的项目等。此功能只能通过命令行界面使用。这取决于文件/文件夹在项目结构中的深度。我可能需要写很长的路径才能达到我的目的。因此,有一个文件浏览器(类似于文件系统的 Windows Explorer)可以让我销毁不需要的文件/文件夹,那将是很棒的。让我们尝试为从 TFVC“销毁”文件/文件夹创建一个用户友好的界面。
构建自己的 Team Foundation Sidekick
您需要做的第一件事是下载并安装 Team Foundation Sidekick 工具(必须在计算机上安装 Team Explorer 2005 或 2008 才能运行该应用程序,请参阅实现说明)。安装了 Team Explorer 和 Team Foundation Sidekick 后,您将获得用于扩展 Team Foundation 版本控制功能的 API。Team Foundation Sidekicks 控件必须继承自 BaseSidekickControl
基类,并且还必须重写公共 Image
属性,以便为您的 sidekick 入口点创建菜单和工具栏项,并初始化公共 Name
属性以为此类项命名。
namespace MySidekick.Control
{
public partial class DestroyFilesAndFoldersViewControl : BaseSidekickControl
{
DestroyFilesAndFoldersController _controller = null;
public DestroyFilesAndFoldersViewControl()
{
InitializeComponent();
base.Name = "Destroy Sidekick";
}
public override Image Image
{
get
{
return new Bitmap(@"c:\Test\Resources\Destroy.bmp");
}
}
}
}
还建议我们创建一个派生自 TfsController
的“Controller
”类,以便安全地使用 Team Foundation Sidekick 应用程序提供的连接和安全上下文。在此类中,我们将编写所有必要的方法来实现我们的目标。
namespace MySidekick.Controller
{
public class DestroyFilesAndFoldersController : TfsController
{
public DestroyFilesAndFoldersController(TfsController
baseController) : base(baseController)
{
}
}
}
然后,我们需要重写 Initialize
方法,以便在主窗体通过单击菜单或工具栏项加载控件时,在 DestroyFilesAndFoldersViewControlClass
中创建您的控制器类的实例。
namespace MySidekick.Control
{
public partial class DestroyFilesAndFoldersViewControl :
BaseSidekickControl
{
DestroyFilesAndFoldersController _controller = null;
public DestroyFilesAndFoldersViewControl()
{
InitializeComponent();
base.Name = "Destroy Sidekick";
}
public override Image Image
{
get
{
return new Bitmap(@"c:\Test\Resources\Destroy.bmp");
}
}
public override void Initialize(TfsController controller)
{
this._controller = new DestroyFilesAndFoldersController(controller);
}
}
}
此时,我们只需要编写实际从 TFVC 销毁文件/文件夹的方法。如果我们探索 Microsoft.TeamFoundation.VersionControl.Client 程序集中的 VersionControlServer
类,我们可以看到一个名为 Destroy
的方法。
public Item[] Destroy(ItemSpec itemSpec, VersionSpec versionSpec,
VersionSpec stopAt, DestroyFlags flags);
但是,在 Team Foundation Server 的 SDK 参考中,没有关于 Destroy
方法的信息。我们也可以尝试获取有关传递给该方法的参数(如 ItemSpec
)的信息。我们得到的所有信息是“此 API 支持 Team Foundation Server 基础结构,不应用于直接从您的代码中使用”。所有这些信息缺失是有道理的,因为 Destroy
是一个非常危险的操作;因此,我们需要消除关于将销毁哪些项的所有可能的歧义。(当然,我们需要在该项目上拥有管理员权限)。也许,最好只销毁我们先前已从项目中删除的文件。
public ItemSpec(string item, RecursionType recursionType, int deletionId);
在这里,item
是要销毁的项或文件夹的完整服务器路径(不允许本地文件路径),而 deletionId
则分配给文件/文件夹。
一旦我们可以创建一个 ItemSpec
类的实例
public ItemSpec GetItemsSpec(string path, int deletionID)
{
return new ItemSpec( path, RecursionType.Full, deletionID);
}
我们所要做的就是使用基类调用 Destroy
方法并满足其所有参数。
public void Destroy(string path, int deletionID)
{
base.VersionControl.Destroy(GetItemsSpec(path, deletionID),
VersionSpec.Latest, null, DestroyFlags.None);
}
有关 Destroy
方法的更多信息,请在此处查阅。
然后,我们只需编译该控件以构建程序集,然后使用“Add Sidekick..”菜单项将其加载到 Team Foundation Sidekick 框架中。
如下图所示,我们有了一个新的菜单项,标有“Destroy Sidekick”。
单击它,我们将看到以下屏幕。现在,我们只需要搜索要删除的文件/文件夹,然后在键盘上按 Delete 键。
就是这样,希望您喜欢这篇文章。