首页> 疑难解答

如何配置Visual Studio以使用Beyond Compare

withpy 2021-06-19

简介我想配置Visual Studio默认情况下打开Beyond Compare作为diff工具。我怎样才能做到这一点?

我想配置Visual Studio默认情况下打开Beyond Compare作为diff工具。我怎样才能做到这一点?

542
投票

在Visual Studio中,转到“工具”菜单,选择“选项”,展开“源代码管理”,(在TFS环境中,单击“Visual Studio Team Foundation Server”),然后单击“配置用户工具”按钮。

单击“添加”按钮。

输入/选择以下选项进行比较:

  • 扩展名:.*
  • 行动:Compare
  • 命令:C:\Program Files\Beyond Compare 3\BComp.exe(替换为您机器的正确路径,包括版本号)
  • 争论:%1 %2 /title1=%6 /title2=%7

如果使用Beyond Compare Professional(3向合并):

  • 扩展名:.*
  • 行动:Merge
  • 命令:C:\Program Files\Beyond Compare 3\BComp.exe(替换为您机器的正确路径,包括版本号)
  • 争论:%1 %2 %3 %4 /title1=%6 /title2=%7 /title3=%8 /title4=%9

如果使用Beyond Compare v3 / v4 Standard或Beyond Compare v2(双向合并):

  • 扩展名:.*
  • 行动:Merge
  • 命令:C:\Program Files\Beyond Compare 3\BComp.exe(替换为您机器的正确路径,包括版本号)
  • 争论:%1 %2 /savetarget=%4 /title1=%6 /title2=%7

如果您在Beyond Compare中使用选项卡

如果在选项卡式模式下运行Beyond Compare,则在从Visual Studio中一次扩展或合并多个文件集时,可能会感到困惑。要解决此问题,您可以将参数/solo添加到参数的末尾;这可确保每个比较在新窗口中打开,解决选项卡问题。


1
投票

我使用BC3作为我的git diff,但我也是add vscode to the list of useful git diff tools。有些用户更喜欢vscode而不是ide体验。

Using VS Code for Git Diff

git config --global diff.tool vscode
git config --global difftool.vscode.cmd "code --wait --diff $LOCAL $REMOTE"

68
投票

Visual Studio with Git for Windows

如果你使用GIT作为你的source code management system而不是(相当过时)TFVC那么Visual Studio没有选项来配置这样的东西。 相反,它(在我看来正确)使用GIT config file's setting。因此,如果您已经使用GIT设置来使用Beyond Compare或任何其他第三方比较软件,它就会选择它并开始使用它。

如果没有,那么只需设置它(请参阅here以获得更多可能更新的帮助)。使用Beyond Compare 4设置Visual Studio的相关信息是:

  1. 打开Visual Studio。
  2. 从工具菜单中选择选项。
  3. 在左侧树控件的Source Control分支下选择Plug-In Settings。
  4. 在右侧窗格的Plug-In Settings下选择Microsoft Git Provider。
  5. 编辑全局git配置文件(位置是操作系统特定于Windows的%HOMEDRIVE%%HOMEPATH%/.gitconfig。请参阅here获取信息)或者如果您希望它是repo specifict,那么在Git存储库中启动项目后,编辑.git文件夹中的配置文件项目文件夹。
  6. 更改配置文件以反映以下更改: [diff] tool = bc4 [difftool "bc4"] cmd = \"C:\\Program Files (x86)\\Beyond Compare 4\\BComp.exe\" \"$LOCAL\" \"$REMOTE\" [merge] tool = bc4 [mergetool "bc4"] cmd = \"C:\\Program Files (x86)\\Beyond Compare 4\\BComp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"

如果使用64位安装程序,请验证可执行文件的名称。我是BCompare.exe

[diff]
    tool = bc4
[difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc4
[mergetool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"

问题:如果你创建一个新项目并让VS同时创建git repo,它会向.git/config文件添加一些覆盖,迫使它再次使用Visual Studio(感谢那个MS!)。在项目设置完成后通过其他方式创建git repo(如通过SourceTree或命令行等...)或编辑.git/config文件(在解决方案文件夹中)并删除上述设置的任何覆盖。 感谢minnow在评论中再次引起我的注意。

注意:我一直遇到这个,但我使用VS和GIT并且答案不正确,虽然有些评论提到了一个带正确答案的网址但不清楚,如果我一直不知道,我相信其他人会如此希望这能解决这个问题。


15
投票

如果您使用的是TFS,可以在diff/merge configuration in Team Foundation - common Command and Argument values中找到更多信息

它显示了如何配置以下工具:

  • WinDiff的
  • DiffDoc(用于Word文件)
  • 的WinMerge
  • 超越比较
  • KDiff3
  • Araxis
  • 比较吧!
  • SourceGear DiffMerge
  • 超越比较3
  • 如果TortoiseMerge
  • Visual SlickEdit

13
投票

当一个新版本的Visual Studio出现,或者我移动PC,或者一个新成员加入团队时,我每6个月就会厌倦这样做。那么,PowerShell:

# .Synopsys
# Sets up Beyond Compare professional as Diff tool for all instances of Visual Studio on this PC
# If you don't use TFS, change the sccProvider as appropriate
[CmdLetBinding()]
param(
    $bcPath = 'C:\Program Files (x86)\Beyond Compare 3\BComp.exe',
    $sccProvider = 'TeamFoundation'
)

$ErrorActionPreference = 'stop';
$baseKey = 'REGISTRY::\HKCU\Software\Microsoft\VisualStudio\*'

function SetRegKeyProperties($keyPath, [hashtable]$keyProps){
    if(!(Test-Path $keyPath)){
        Write-Verbose "Creating $keyPath"
        # Force required here to recursively create registry path
        [void] (new-item $keyPath -Type:Directory -Force);
    }
    foreach($prop in $keyProps.GetEnumerator()){
        Set-ItemProperty -Path:$keyPath -Name:$prop.Key -Value:$prop.Value;
    }
}

$configBases = dir $baseKey | ? { $_.PSChildName -match '^\d+\.\d$' }
foreach($item in $configBases){
    Write-Host "Configuring $item"

    $diffToolsKey = Join-Path $item.PSPath "$sccProvider\SourceControl\DiffTools"
    SetRegKeyProperties (Join-path $diffToolsKey '.*\Compare') @{Command=$bcPath;Arguments='%1 %2 /title1=%6 /title2=%7'}
    SetRegKeyProperties (Join-path $diffToolsKey '.*\Merge') @{Command=$bcPath;Arguments='%1 %2 %3 %4 /title1=%6 /title2=%7 /title3=%8 /title4=%9'}
}

适用于我的机器。因人而异。没有保证,也没有退款。 VS似乎没有缓存密钥,因此立即生效。


8
投票

在Visual Studio 2008 +中,转到

Tools menu -->  select Options 

在选项窗口 - >展开源代码管理 - >选择Subversion用户工具 - >选择超越比较

然后单击确定按钮..


2
投票

64位Windows 7上的VS2013需要以下设置:工具|选项|源控制|爵士源控制

检查复选框使用外部比较工具......(很容易错过)

双向比较可执行文件的位置:C:\ Program Files(x86)\ Beyond Compare 3 \ BCompare.exe

3路冲突比较可执行文件的位置:C:\ Program Files(x86)\ Beyond Compare 3 \ BCompare.exe


2
投票

BComp.exe也适用于多标签场景,因此除非您真的需要为每个文件比较单独的窗口,否则无需添加/ solo。在Beyond Compare 3和4上测试/验证。道德:使用BComp.exe而不是BCompare.exe,用于VS外部比较工具配置。


2
投票

@schellack发布的答案非常适合大多数情况,但我希望Beyond Compare模拟Visual Studio在其自己的合并窗口中使用的“2 Way merge with a result panel”视图。

此配置隐藏了中间面板(在大多数情况下未使用AFAIK)。

 %1 %2 "" %4 /title1=%6 /title2=%7 /title3="" /title4=%9

感谢Morgen


1
投票

我在Visualstudio.com托管(msdn)上使用VS 2017与Git托管的项目

上面的链接为我提供了“GITHUB FOR WINDOWS”说明。

http://www.scootersoftware.com/support.php?zz=kb_vcs#githubwindows

配置文件位于“c:\ users \ username.gitconfig”中指示的位置,我只是根据我的情况将BC4更改为BC3,并使用了相应的路径:

C:/ Program Files(x86)/ Beyond Compare 3 / bcomp.exe

上一篇:编辑词典列表中的值?

下一篇:如何在不重构的情况下处理Angular 2+(7)路由更改?

相关文章

  • Spring Boot @WebMvcTest中的Mocked方法返回值为null

    以下测试失败:org.json.JSONException:Unparsable JSON字符串。我尝试了各种各样的模拟saveAndFlush方法// doAnswer(returnsFirstArg())。当(这....

  • 反向OpenVPN连接

    我即将开始工作,但需要一些帮助。我在数字海洋的Droplet上运行OpenVPN Access服务器。我的网络上有一个带有无线连接的RaspberryPi。 IP = ......

  • 将快照移动到S3

    我的要求:每天创建必须存储在S3中的快照,然后在7天后将其移动到Glacier。这就是我所做的:我在AWS中有三个虚拟机。一世 ...

  • Hardcoded Bounds中的ArrayIndexOutOfBoundsException

    处理一项任务,我应该将文件中的数据读入数组,以进行一些搜索/排序演示。公共类A5 {public static void main(String [] args)抛出...

  • 如何用Python漂亮地打印ASCII表? [关闭]

    我正在寻找一种漂亮打印这样的表的方法:======================= |第1栏|第2栏| ======================= | value1 | value2 | | value3 | value4 | ======================= ...

  • 如何防止不可变对象中的可变对象的更改

    任何人都可以告诉我们如何阻止用户修改不可变类中定义的可变对象的值?示例:我们有一个不可变的Student类,其中包含最终引用...