65.9K
CodeProject 正在变化。 阅读更多。
Home

Visual Studio 中的 Bazaar:外部工具

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (7投票s)

2011 年 8 月 3 日

CPOL

9分钟阅读

viewsIcon

29141

如何使用 IDE 的外部工具将 Bazaar 集成到 Visual Studio 中。

引言

Bazaar 是一个现代化的、分布式的版本控制系统。在撰写本文时,还没有提供与 Visual Studio 集成的 Bazaar 插件包。本文将展示如何使用 Visual Studio 的外部工具将 Bazaar 集成到 Visual Studio 集成开发环境 (IDE) 中。

背景

TortoiseBzr(见下图)是一个图形用户界面 (GUI),它将 Bazaar 集成到 Windows 操作系统文件管理器 Explorer 中(请勿与 Internet Explorer 混淆)。默认的 Bazaar Windows 安装程序包括 TortoiseBzr、Python 和 Bazaar。这是推荐的安装方式。在安装过程中,将提供选择要安装的插件、语言和选项。跳过您不说的语言,但安装所有其他内容。如果您不安装 TortoiseBzr,本文的指南将无法提供令人满意的结果。您仍然可以配置外部工具来使用 Bazaar,但所有输出都将转到 Visual Studio 的纯文本输出窗口。当我们配置“状态”命令时,将提供一个示例,演示如何为其他命令执行此操作,但输出结果类似。

Bazaar.png

TortoiseBzr Explorer

Bazaar001.png 在线论坛上的快速 Google 搜索会发现许多反对安装 Tortoise 的论点,原因是 Explorer 中更新缓慢,导致信息不可靠。虽然 Tortoise 与 Explorer 的集成确实很慢,但我们在这里需要它来提供图形用户界面。在这方面,性能是可以接受的。(Tortoise Explorer 窗口中的状态也足够了。在浏览“我的电脑”时看到的仅是文件和文件夹上的复选标记和感叹号图标很慢。请参见右侧的图标,其中一个文件夹有待处理的更改,一个文件已标记为最新。)

集成

安装

有关如何安装 Bazaar如何配置 TortoiseBzr 的产品说明相当充分。存储库(或 repo)的设置取决于管理软件更改所需的流程,这超出了本文的范围。有关如何配置各种流程选项以及创建共享或其他存储库的信息,请阅读Bazaar 用户指南。那里对设置和安装的覆盖足够详细,这里几乎没有什么可以补充的——本文将侧重于集成。

Code Bazaar 菜单

打开 Visual Studio,右键单击任何菜单项,然后选择“自定义...” 当“自定义”对话框打开时,选择“命令”选项卡。在右侧,您会看到一系列按钮,包括“添加新菜单”按钮。单击“添加新菜单”按钮,将添加一个名为“新菜单”的新菜单项。选择该菜单并单击“修改选定内容”按钮。将名称更改为更有用的名称,例如“Code Bazaar”。

现在查看“自定义”对话框的“命令”选项卡顶部的“菜单栏”下拉列表。“菜单栏”默认会选中,但您可以单击下拉列表并浏览所有可用的菜单和菜单命令。选择新创建的菜单项以将命令添加到菜单中。单击“上移”和“下移”按钮来更改菜单在菜单栏上的位置。默认情况下,新菜单会插入到顶部,出现在“文件”菜单之前;但是,对于本文,假定 Code Bazaar 菜单位于 Debug 菜单之后,如下所示

Bazaar004.png

添加了 Code Bazaar 菜单的 Visual Studio 菜单栏

在下拉列表中选择新添加的菜单后,单击“添加命令”按钮,“添加命令”对话框将出现,左侧列出“类别”。浏览并选择“工具”类别。右侧列出的命令将更改为反映该类别可用的命令。添加“外部命令 1”到“外部命令 11”。其中一些已经配置了 Microsoft 工具。(Spy++、Create GUID 等会随着新外部命令向上移动而向下移动。如果您喜欢现有的菜单命令保持在原位,请调整添加到 Code Bazaar 菜单的外部命令。)完成后,单击“自定义”对话框底部的“关闭”按钮。

Bazaar002.png

已选择 Code Bazaar 菜单并添加了外部工具命令的“自定义”对话框

接下来,找到并单击新添加的菜单以验证外部命令是否存在。默认情况下,未配置的命令被禁用,并具有“外部命令”和命令编号的默认文本。单击“工具”菜单,大约在底部四分之一处,单击“外部工具”菜单命令,“外部工具”对话框将出现。单击“添加”按钮在列表底部添加一个新命令。

外部工具

从一个简单的状态命令开始——在“外部工具”对话框中选择“状态”作为标题。状态命令显示当前存储库中待提交的项目列表。由于命令的简单性,Bazaar 命令行工具足够了,并且输出结果可以重定向到 Visual Studio 的输出窗口。那么,命令将是 Bazaar 可执行文件,它默认位于 C:\Program Files\Bazaar\ 并名为 bzr.exe。对于命令,键入 C:\Program Files\Bazaar\bzr.exe。(如果您将 Bazaar 安装到其他目录,请相应调整此命令。)

要在命令行中运行 bzr.exe,您可以使用 C:\bzr status 生成状态列表。那么,状态列表的参数就是 status。初始目录将是您打开解决方案文件的目录。我们目录的Visual Studio 参数$(SolutionDir),因此将其键入“初始目录”。最后,通过设置“使用输出窗口”复选框来验证输出是否将重定向到输出窗口。接下来,选择“状态”命令,单击“上移”按钮,直到它是列表中的第一个命令:外部命令 1。完成后,结果应与下图类似

Bazaar010.png

显示状态命令配置的“外部工具”对话框

初始配置测试

还需要更多外部命令,但现在,单击“确定”按钮返回 Visual Studio,单击“Code Bazaar”菜单,并验证我们在顶部是否有一个“状态”菜单命令。如果您已经打开了一个 Bazaar 管理的解决方案,并且自上次提交以来有待处理的更改,则“状态”菜单命令会显示修改文件的列表。(见下文。)如果没有更改,输出将为空——这并不表示错误,只是没有待处理的更改。(修改一个文件,保存更改,然后再次尝试以验证 Bazaar 是否已识别出文件已更改。)

Bazaar008.png

显示状态命令结果的 Visual Studio 输出窗口

剩余配置

其余大部分命令使用 TortoiseBzr 提供图形界面。对于提交命令(见下文),打开“工具”菜单的“外部工具命令”,单击“添加”按钮,并将标题设置为“提交”。对于命令,浏览到 tbzrcommand.exe 文件(如果您将 TortoiseBzr 安装到默认目录,则位于 C:\Program Files\Bazaar\)。对于参数,键入 --command=commit,并将初始目录设置为 $(SolutionDir)。在这种情况下,您可以选择使用输出窗口,但这只会收到 Python 错误和警告消息,应忽略这些消息(除非 Bazaar 开发人员指示您查看它们以进行故障排除)。如果您不选中“使用输出窗口”复选框,则会打开一个单独的命令窗口,关闭 TortoiseBzr 窗口时您需要关闭此窗口,因此请选中“退出时关闭”复选框。完成后,将“提交”命令移到“状态”命令(外部命令 2)的正下方。

Bazaar011.png

显示提交命令配置的“外部工具”对话框

重复此操作以实现“所有差异”,将 tbzrcommand 用作命令,--command=diff 用作参数,$(SolutionDir) 用作目录,并选中“退出时关闭”复选框。对于“文件差异”,命令变为 --command=diff --file=$(ItemPath)。这里,file 是在 Visual Studio 的“解决方案资源管理器”窗口中选择的文件。对于“日志”,命令是 --command=log,对于“文件日志”,命令是 --command=log --file=$(ItemPath)。对于“添加”,命令是 --command=add。

撤销(将文件恢复到以前保存的状态)有点棘手。撤销单个文件,Visual Studio 会显示一个警告,表明文件已在 IDE 外部被修改(如预期)。在 Visual Studio 中重新加载文件以完成该过程。但是,Visual Studio 会锁定解决方案文件——要完全恢复到上一次提交,包括对解决方案的更改,请关闭解决方案并从 TortoiseBzr 或 Bzr 执行命令。由于这个限制,无法实现“撤销解决方案”命令。对于“撤销文件”命令,参数是 --command=revert --file=$(ItemPath)。这只会撤销单个文件(当前在 Visual Studio 的“解决方案资源管理器”窗口中选中的文件),并且只会撤销到最近一次提交的版本。(要恢复到另一个版本,请使用“浏览”命令,如下所述。)

对于“浏览”,参数是 --command=explorer。这更像是一个万能命令,而不是一个特定的命令。这将打开 TortoiseBzr 的 Explorer,即主界面——本质上,TortioseBzr 在 Visual Studio 中运行。最后,Bazaar 允许在特殊修订版上创建标签。这些是简单的命令,可以直接在 bzr.exe 中执行,并将输出重定向到 Visual Studio 的输出窗口。要列出标签,参数是 tags;要标记最近一次提交的修订版,参数是 tag。在每种情况下,都将命令重定向到输出窗口。

下图显示了运行“所有差异”并显示更改时应看到的内容。显然,具体的更改会不同,但差异弹出窗口的外观应相似。注意在差异弹出窗口和 Visual Studio 的编辑窗口之间打开的附加命令窗口。如果一切设置正确,当差异窗口关闭时,此窗口也应该关闭。

Bazaar009a.png

所有差异输出

历史

  • 2011 年 8 月 16 日:更新了首字母下沉以适应新的 CSS
  • 2011 年 8 月 10 日:更新了图像以显示 $(SolutionDir)
  • 2011 年 8 月 9 日:使用 $(SolutionDir) 修正了文本(图像待定)
  • 2011 年 8 月 8 日:添加了图像标题。刚刚意识到我错误地使用了 $(ProjDir)
  • 2011 年 8 月 6 日:首次发布
© . All rights reserved.