是否可以使用 winmerge 查看 cygwin 的 git diff?

2023-12-29

我喜欢在 cygwin 上使用 git,但唯一的缺点是当我想这样做时git difftool我无法使用任何有用的东西。git diff大多数时候对我来说很好,但有时我想使用 winmerge 通过以下方式查看这些差异git difftool有什么办法可以设置这个吗?


对于 cygwin,SO 问题“如何在 cygwin 下配置 Mercurial 以使用 WinMerge 进行合并? https://stackoverflow.com/questions/548520/how-can-i-configure-mercurial-to-use-winmerge-for-merges-under-cygwin“ 可以应用于 git (当将以下 winmerge 脚本与旧问题结合使用时”使用 Git 内部的 Winmerge 来归档 diff https://stackoverflow.com/questions/1881594/use-winmerge-inside-of-git-to-file-diff")

#!/bin/sh
"/cygdrive/c/Program Files/WinMerge/WinMergeU.EXE" /e /ub /dl other /dr local `cygpath -aw $1` `cygpath -aw $2` `cygpath -aw $3`

Process

您可以在这篇文章中了解更多详细信息“Git + WinMerge + Cygwin http://www.codeproject.com/Tips/83230/Git-plus-WinMerge-plus-Cygwin.aspx" (from 蒂鲁·蒂鲁纳乌卡拉苏 http://www.codeproject.com/script/Membership/View.aspx?mid=4900650):
(但我仍然会推荐WinMergeU.exe上面的选项)

将以下行添加到您的 .gitconfig 文件中:

  [diff]
    tool = winmerge
  [difftool "winmerge"]
    cmd = git-difftool-winmerge-wrapper.sh \"$LOCAL\" \"$REMOTE\"
  [difftool]
    prompt = false

最后一个选项(prompt = false) 是可选的。如果您确实希望 Git 在打开每个差异之前提示您,则可以省略它。

创建一个名为git-difftool-winmerge-wrapper.sh并将其放在您的路径中。
我只是将它放在我的主目录中。您可以通过修改 .bash_profile 文件(也在您的主目录中)并添加来更改默认的 Cygwin 路径以包含您的主目录PATH=${PATH}:${HOME}

添加以下内容到git-difftool-winmerge-wrapper.sh:

  #!/bin/sh
  echo "Launching WinMergeU.exe \"$(cygpath -aw "$1")\" \"$(cygpath -aw "$2")\""
  if [ -f "$1" -a -f "$2" ]
  then
    "C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -u -wl -dl "Base" -dr "Mine" "$(cygpath -aw "$1")" "$(cygpath -aw "$2")"
  else
    echo "skipping as one file doesn't exist"
  fi

(再次,使用这些 WinMerge 选项进行一些测试)


Scripts

如果你想使用“所有 WinMerge”,无论是 diff 还是 merge git 功能,你都有这个要点页面 https://gist.github.com/509918 from ecerulm(鲁本·拉古纳) https://github.com/ecerulm:

diffmerge-diff.sh

#!/bin/sh
# Use SourceGear DiffMerge as mergetool for git in cygwin.
#   git config --global mergetool.diffmerge.cmd "diffmergetool.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\""
#   git config --global mergetool.diffmerge.trustExitCode false
#   git difftool -t diffmerge branch1..branch2

# Reference: http://www.tldp.org/LDP/abs/abs-guide.pdf

library=githelperfunctions.sh

#[ -f $library ] && . $library
. $library

echo Launching DiffMerge.exe - diffmerge-diff.sh: 

set_path_vars "$1" "$2" "$3" "$4"

echo "$diffmergewinpath" -t1=FROM_VERSION -t2=TO_VERSION --caption=$caption $localwinpath $remotewinpath
"$diffmergewinpath" -t1=FROM_VERSION -t2=TO_VERSION --caption="$caption" "$localwinpath" "$remotewinpath"

diffmerge-merge.sh

#!/bin/sh
# Use SourceGear DiffMerge as mergetool for git in cygwin.
#   git config --global mergetool.diffmerge.cmd "diffmergetool.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\""
#   git config --global mergetool.diffmerge.trustExitCode false
#   git mergetool -t diffmerge

# Reference: http://www.tldp.org/LDP/abs/abs-guide.pdf

library=githelperfunctions.sh

#[ -f $library ] && . $library
. $library

echo Launching DiffMerge.exe - diffmerge-merge.sh: 

set_path_vars "$1" "$2" "$3" "$4"

"$diffmergewinpath" --merge -t1=FROM_VERSION -t2=MERGED -t3=TO_VERSION --result="$mergedwinpath" --caption="$caption" "$localwinpath" "$basewinpath" "$remotewinpath"

unix2dos "$merged"

githelperfunctions.sh

# Helper functions


convert_path () {
    file=$1

    if [ "$file" == '/dev/null' ] || [ ! -e "$file" ]
        then 
           file="/tmp/nulla"
           `echo "">$file`
    fi
    echo `cygpath -w -a "$file"`
}


set_path_vars () {
    local=$1
    remote=$2
    base=$3
    merged=$4

    echo ========= Cygwin paths =======
    echo "LOCAL   :  $local"
    echo "REMOTE  :  $remote"
    echo "BASE    :  $base"
    echo "MERGED  :  $merged"

    localwinpath=$(convert_path "$local")
    remotewinpath=$(convert_path "$remote")
    basewinpath=$(convert_path "$base")
    mergedwinpath=$(convert_path "$merged")

    echo ========= Win paths =======
    echo "LOCAL   :  $localwinpath"
    echo "REMOTE  :  $remotewinpath"
    echo "BASE    :  $basewinpath"
    echo "MERGED  :  $mergedwinpath"

    caption=`basename "$merged"`
    diffmergewinpath="C:/Program Files/SourceGear/DiffMerge/DiffMerge.exe"
    winmergewinpath="C:/Program Files/WinMerge/WinMergeU.exe"
#   diffmergewinpath=`cygpath -u C:/Program Files/SourceGear/DiffMerge/DiffMerge.exe`
#   winmergewinpath=`cygpath -u \"C:\Program Files\WinMerge\WinMergeU.exe\"`
}

winmerge-diff.sh

#!/bin/sh
# Use winmerge as mergetool for git in cygwin.
#   git config --global difftool.winmerge.cmd "winmerge-diff.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\""
#   git config --global mergetool.winmerge.trustExitCode false
#   git difftool -t winmerge branch1..branch2   

# Reference: http://www.tldp.org/LDP/abs/abs-guide.pdf
# Reference: http://winmerge.org/docs/manual/CommandLine.html


library=githelperfunctions.sh

#[ -f $library ] && . $library
. $library

echo Launching winmerge.exe - winmerge-diff.sh: 

set_path_vars "$1" "$2" "$3" "$4"

"$winmergewinpath" /dl "LOCAL.$caption" /dr "TO_VERSION.$caption" "$localwinpath" "$remotewinpath" 

winmerge-merge.sh

#!/bin/sh
# Use winmerge as mergetool for git in cygwin.
#   git config --global mergetool.winmerge.cmd "winmerge-merge.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\""
#   git config --global mergetool.winmerge.trustExitCode false
#   git mergetool -t diffmerge

# Reference: http://www.tldp.org/LDP/abs/abs-guide.pdf
# Reference: http://winmerge.org/docs/manual/CommandLine.html

library=githelperfunctions.sh

#[ -f $library ] && . $library
. $library

echo Launching winmerge.exe - winmerge-merge.sh: 


set_path_vars "$1" "$2" "$3" "$4"

# -- use WinMergeU conflictFile
"$winmergewinpath" "$mergedwinpath"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用 winmerge 查看 cygwin 的 git diff? 的相关文章

  • 如何从 Java 访问 Windows 设备管理器中的信息?

    我有一个串行 USB 设备 并且其中多个设备可以连接到计算机 我需要查询和检索设备连接到的 COM 端口列表 在 Windows 设备管理器中 您可以获得当前连接的设备的 COM 端口 友好名称 该列表是动态的 从注册表中读取不工作 htt
  • 在 git 中记录前 10 个

    两个问题 如何从头到尾显示 git 中的前 10 个提交 无分行 如何指定提交索引并记录它 显示第二个或第三个 我知道 git 使用父级来链接提交 很容易从头到尾记录提交 喜欢 git log HEAD 10 但我需要从头到尾查询 可以吗
  • TCHAR 仍然相关吗?

    我是 Windows 编程新手 在读完 Petzold 的书后 我想知道 使用TCHAR类型和 T 函数来声明字符串或者我应该使用wchar t and L 新代码中的字符串 我将仅针对现代 Windows 截至撰写本文时版本 10 和 1
  • 如何将一个文件存储库上传到 Gist,并保留历史记录?

    我的计算机上有一个包含单个文件的 Git 存储库coins py 我如何才能将其作为 Github 上的要点来保存历史 这其实很简单 您可以将现有历史记录移动到 Gist 存储库中 就像将其移动到任何其他存储库中一样 创建要点 只需输入一些
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您
  • 如何使用 git-tfs 清理损坏的历史记录

    我不确定我是如何进入这种状态的 但我的 tfs 默认远程分支中有一些 TFS 中不存在的提交 所以我想摆脱它们 所以我的历史是这样的 A B C D tfs default 但提交 B 和 C 实际上并不是 TFS 中的变更集 因此 当我签
  • Git rebase --继续而不打开编辑器

    调用时git rebase continue在正常的变基冲突之后 编辑器 GIT EDITOR 打开并要求修改提交消息 因为提交消息可能包含前导 所以这可能会失败 export GIT EDITOR true git rebase cont
  • 从 Powershell 更新计划任务脚本

    我正在尝试编写一个每天运行一次的 Powershell 脚本 它将执行的众多功能之一是确保脚本本身是最新的 我的问题是 由于我对脚本进行了版本控制 因此我需要更新从脚本中创建的计划任务 我在这里考虑了两种不同的方法 其中我也无法弄清楚 我最
  • 从预提交挂钩中排除某些文件类型

    我想要一个预提交 git 钩子来检查 如果可能的话 自动删除 尾随空格 In 让 git 在提交之前自动删除尾随空格 https stackoverflow com questions 591923 make git automatical
  • ReadProcessMemory 上出现错误 299

    尝试从游戏内存中读取实体名称 使用 ce 检查时指针 100 正确 读取 写入浮点 整数值没有问题 32 位进程 游戏也是如此 尝试在 x64 中编译代码 但没有帮助 GetLastError 返回 nr 299 错误 部分 复制 299
  • 为什么我的存储库的 github 页面中没有出现问题选项卡?

    我想在 github 存储库中创建问题来纠正存储库中的技术债务 我看不到问题选项卡 对于其他存储库 问题选项卡显示在拉取请求选项卡下方 如何为我的存储库启用问题选项卡 您必须先启用问题 您可以通过点击来做到这一点Settings并启用 问题
  • Windows 控制台支持 ANSI 吗?

    Windows 控制台支持 ANSI 控制字符吗 默认情况下它不支持许多 ANSI 控制字符 维基百科文章中也提到了这一点 http en wikipedia org wiki ANSI escape code http en wikipe
  • 无法快速删除 Git 中的许多文件

    我删除了 Git 分支中的 777 个文件新功能 by rm example 我愿意承诺 Git 要求我手动删除每个已删除的文件 git rm file 对于所有名称不相似的 777 个文件 编写上述命令将花费大量时间 如何删除我的 Git
  • 如何在 Windows 上安装 PHP 的 PDO 驱动程序?

    我在 Windows 服务器上安装了 Apache PHP 5 6 和 MySQL 5 7 在 php ini 中 我启用了以下内容 extension php mysql dll extension php mysqli dll exte
  • git reword 在变基期间显示合并冲突,但是 pick 工作正常

    我正在尝试用很少提交的另一个分支来重新建立一个分支 虽然提交包括合并提交 但我可以使用以下命令成功地对其进行变基git rebase i r m
  • 如何克隆没有提交的裸 git 存储库并在克隆过程中获取正确的 HEAD 引用?

    这个答案 https stackoverflow com a 26898059 438273声称该问题已在版本中修复1 8 4 3 但是我在版本中还是遇到了2 25 1 它似乎在版本中按预期工作2 32 0 所以我不确定它是什么时候真正修复
  • 如何在Windows 7中使用批处理脚本获取本地连接名称

    我正在编写一个简单的批处理脚本来检索 Windows 上的所有网络接口 但我只需要本地连接名称 本地连接接口名称不是默认名称 有没有办法使用批处理脚本仅检索本地连接名称作为字符串 不完全确定您在问什么 但我认为您的问题是您想要获取网络接口的
  • 我应该如何将更改从一个提交转移到另一个提交?

    我在同一个分支上有两个提交 一个接一个 我在第一次提交中添加了对文件 A 的更改 然后对其他文件进行了一些更改 然后进行了另一次提交 现在我希望对文件 A 的更改是在第二次提交而不是第一次提交 最优雅的方式是什么 我知道这是一个老问题 但我
  • 微软怎么能说WinAPI中一个字的大小是16位呢?

    我刚刚开始学习WinAPI 在MSDN中 对WORD数据类型提供了以下解释 WORD16 位无符号整数 范围是十进制 0 到 65535 该类型在 WinDef h 中声明如下 typedef 无符号短 WORD 很简单 而且它与我一直在使
  • Git 用户配置文件 - 自定义忽略

    我们有一个由 5 名开发人员组成的团队致力于硬件项目 我们有一个 user config h 文件 其中包含每个用户的特定环境和偏好的 defines 例如他们使用的硬件版本 是否应该打开声音等 目前 该文件位于我们的 gitignore

随机推荐

  • jQuery 检查元素是否具有以某个字符串开头的类

    我需要循环访问页面中的一些元素 然后 对于每个元素 如果它有一个以 C 开头的类 则执行某些操作 dialog li each function if this hasClass C do something 这可能听起来很愚蠢 但是我应该
  • R 中的困难聚合,对球队篮球统计数据进行分组

    预先感谢您对此的任何帮助或建议 这是我正在使用的数据框的简短示例 boxscore stats structure list game id c 157046L 157046L 157046L 157046L 157046L 157046L
  • WCF WebGet 和 ICollection<>

    我正在尝试从 REST WCF 服务返回通用 ICollection 以下应该可行吗 ServiceContract public class WebConfigurationManager WebGet OperationContract
  • 有什么相对简单的方法来确定一个句子是英语的概率?

    我有许多字符串 字符集合 它们代表不同语言的句子 例如 你好 我叫乔治 Das brot is the gut etc 我想为每个句子分配分数 从 0 1 表明它们是英语句子的可能性 是否有一个公认的算法 或Python库 可以做到这一点
  • Java中删除字符串中的重复行

    我的字符串是 EEE EEE AAA BBB CCC BBB DDD CCC 但我需要这个字符串没有相同的行 像这样 EEE AAA BBB CCC DDD 我该怎么做 这是一个简单的答案 StringBuilder builder new
  • C# 异步任务无限期等待

    我正在尝试使用 异步 和 等待 提供的功能来异步下载网页内容 但我遇到了任务永远等待完成的问题 您能否让我知道以下代码片段有什么问题 protected void Page Load object sender EventArgs e va
  • Python 中的静态数组

    我正在学习如何用 python 编程 同时也在学习理论作为计算机科学课程的一部分 在编程中 我知道我可以通过使用 append 函数向数组添加其他变量 但是在我的理论课程中 我们被告知数组的大小既不能增加也不能减少 这在Python中是如何
  • 我希望我的 pre('save') 猫鼬函数只运行一次

    我不知道标题中的确切要求是否可能 但如果不可能 我真的很感激一个替代解决方案 我有猫鼬的预保存方法 ownerSchema pre save function next const owner this bcrypt genSalt 10
  • 创建对象时出现错误“存在显式转换(是否缺少强制转换)”:

    我有兴趣学习 OOP 概念 在尝试使用继承的简单程序时 我注意到这个错误 我不明白为什么会出现这个错误 我给出了下面简单的 C 代码 class Animal public void Body Console WriteLine Anima
  • *onbeforeunload* 是否在 Safari (macOS) 上缓存?

    我添加了一个事件监听器beforeunload 按照惯例 https developer mozilla org en docs Web API WindowEventHandlers onbeforeunload在我的 JS ReactJ
  • 重新使用现有 Microsoft Identity 用户表时密码(哈希)不匹配

    我们有一个现有的 SQL 数据库微软身份表 最初由 ASP NET Core 应用程序生成 我们还有一个 ASP NET 4 应用程序 它也使用 Microsoft Identity 我们希望 ASP NET 4 应用程序能够使用同一数据库
  • subversion中“让深度粘性”有什么作用?

    我很难找到有关在 SVN 工作副本上使用粘性深度设置的行为的明确文档 在 SVN 中 当使用 更新到修订版本 对话框时 会有一个 使深度粘性 复选框 使深度粘性和非粘性之间有哪些有效区别 当深度为粘性时 您每次更新时都将使用相同的设置进行更
  • PHP以真正的二进制方式读取二进制文件

    我在谷歌上搜索了我的问题 但没有找到解决方案 我想读取一个文件并将缓冲区转换为二进制 例如 10001011001011001 如果我从文件中有这样的东西 bmoov lmvhd tF tF K T trak tkh d tF tF K e
  • Symfony 2:安装并启用 intl 扩展

    我在用着XAMPP for Windows并决定尝试一下Symfony 2 当我到达时Symfony Configuration它建议我安装并启用的页面intl 我尝试阅读PEAR s and PECL s指导 因为我完全0关于这个主题 开
  • std::ostringstream 覆盖初始化字符串

    以下代码会生成 0004567 铿锵 7 https repl it agustinf ostringstream bug or anti feature main cpp include
  • 连接到 Github 时“无法生成 ssh”,但 ssh -T [电子邮件受保护] 有效?

    我很难让 Github Netbeans 正常工作 我想将 ssh 与 git 在 Windows 7 上 结合使用来提交或克隆项目 但我不断收到此错误消息 git clone email protected cdn cgi l email
  • NSOutlineView 缩进问题

    我使用 NSOutlineView 对象来表示文件结构 并发现它不会正确缩进任何可扩展的子项 尽管它会缩进不可扩展的子项 这是一张图片来说明我的意思 在此示例中 AnotherFolder 是 Folder2 的子级 但它没有与其他缩进文件
  • F# 中的代码分析

    作为一名 C 开发人员 我从 Microsoft 的代码分析中受益匪浅 然而 在 F 中 代码分析似乎并不是开发周期的一个组成部分 我花了一段时间才在 F 项目上启用 CA 但这博客有帮助 http blog nikosbaxevanis
  • 将 div 水平和垂直居中,并在调整父级大小时保持居中[重复]

    这个问题在这里已经有答案了 我想始终将 div 水平和垂直居中 我可以减少 增加窗口的宽度 div 将通过始终保持在窗口的中心进行响应 cent height 50px width 50px background color black m
  • 是否可以使用 winmerge 查看 cygwin 的 git diff?

    我喜欢在 cygwin 上使用 git 但唯一的缺点是当我想这样做时git difftool我无法使用任何有用的东西 git diff大多数时候对我来说很好 但有时我想使用 winmerge 通过以下方式查看这些差异git difftool