搞定Git中文乱码、用TortoiseMerge实现Diff/Merge

本文提供了一种简单的方法来配置Git,包括解决中文乱码问题、图形化差异与合并工具的配置,以及还原英文界面等,适合MsysGit安装版与绿色版。

首先要说明的是:这里介绍的方法都是大部分是本人“悟”出来的,所以网上难有流传!
好方法不能自己私藏,否则就白忙乎这几天了,分享给有需要的朋友们。如果有转载,敬请注明来自*优快云老邓*作品。
呵呵,给自己打广告,实在是无耻之极,权当无聊之时打字之用。
欢迎流传,为最优秀的分布式版本管理系统Git做宣传!!

步骤:
1. 下载:http://loaden.googlecode.com/files/gitconfig.7z
2. 解压gitconfig.7z的全部内容到:<MsysGit 安装目录>/cmd/,例如:D:\Program Files\Git\cmd

3.打开BashGit,进入步骤2所说的目录下 cd /d/"Program Files"/Git/cmd回车执行
4. 输入gitconfig回车执行

搞定什么了?
看看gitconfig的内容先:

 

#!/bin/sh

# 全局提交用户名与邮箱
git config --global user.name "Yuchen Deng"
git config --global user.email 邮箱名@gmail.com

# 中文编码支持
echo "export LESSCHARSET=utf-8" > $HOME/.profile
git config --global gui.encoding utf-8
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding gbk

# 全局编辑器,提交时将COMMIT_EDITMSG编码转换成UTF-8可避免乱码
git config --global core.editor notepad2

# 差异工具配置
git config --global diff.external git-diff-wrapper.sh
git config --global diff.tool tortoise
git config --global difftool.tortoise.cmd 'TortoiseMerge -base:"$LOCAL" -theirs:"$REMOTE"'
git config --global difftool.prompt false

# 合并工具配置
git config --global merge.tool tortoise
git config --global mergetool.tortoise.cmd 'TortoiseMerge -base:"$BASE" -theirs:"$REMOTE" -mine:"$LOCAL" -merged:"$MERGED"'
git config --global mergetool.prompt false

# 别名设置
git config --global alias.dt difftool
git config --global alias.mt mergetool

# 取消 $ git gui 的中文界面,改用英文界面更易懂
if [ -f "/share/git-gui/lib/msgs/zh_cn.msg" ]; then
rm /share/git-gui/lib/msgs/zh_cn.msg
fi

 这个脚本解决了:
1. 中文乱码
2. 图形化Diff/Merge
3. 还原英文界面,更好懂
其中最有价值的,就是Git的Diff/Merge外部工具TortoiseMerge配置。
安装MsysGit后,一个命令即可完成配置。
适用于MsysGit安装版与绿色版。

网上关于为Git配置TortoiseMerge来进行diff和merge的介绍几乎没有(反正我没有搜索到),但我认为TortoiseMerge是最好用的,单文件(一个可执行程序,绿色版,下载地址:http://sourceforge.net/projects/tortoisesvn/files/Tools/1.6.7/TortoiseDiff-1.6.7.zip/download ),实在是绝配!

为什么不使用TortoiseGit?他们不是集成了TortoiseMerge吗?
理由:TortoiseGit只有Windows才有,我更喜欢git gui,结合gitk,跨平台实在相同的操作方式,更爽!
如果您离不开TortoiseGit,这篇文章就直接无视吧。

 

转载地址:

http://topic.youkuaiyun.com/u/20110113/19/b0d5d506-4307-428b-a61d-7974aa66a2da.html

<think>我们正在讨论的是如何使用 `git diff` 命令来查看特定文件(`gpu/drm/panel/Kconfig`)的差异。用户之前提供了一些引用,但看起来这些引用和当前问题关联不大,因此我们将专注于如何回答用户的问题。 ### 步骤分析 1. **理解用户的需求**:用户想要查看 `gpu/drm/panel/Kconfig` 文件的差异。在Git中,`git diff` 用于显示提交之间、工作区和暂存区之间的差异。 2. **基本命令格式**:`git diff [<options>] [<commit>] [--] [<path>...]` 3. **常见场景**: - 比较工作区和暂存区:`git diff -- <file>` - 比较暂存区和最新提交:`git diff --cached -- <file>` - 比较两个提交之间:`git diff <commit1> <commit2> -- <file>` - 比较当前工作区和某个提交:`git diff <commit> -- <file>` 4. **具体到用户的问题**:用户想查看 `gpu/drm/panel/Kconfig` 文件的差异,但没有指明比较对象。因此,我们需要提供几种常见情况的命令。 ### 详细解答 #### 1. **查看工作区与暂存区的差异** 如果修改了 `gpu/drm/panel/Kconfig` 文件但还没有 `git add`,可以使用以下命令查看工作区与暂存区的差异: ```bash git diff -- gpu/drm/panel/Kconfig ``` #### 2. **查看暂存区与最新提交的差异** 如果已经执行了 `git add`,那么可以查看暂存区与最新提交(HEAD)的差异: ```bash git diff --cached -- gpu/drm/panel/Kconfig ``` #### 3. **查看工作区与最新提交的差异** 直接比较工作区中的文件与最新提交(HEAD)的差异: ```bash git diff HEAD -- gpu/drm/panel/Kconfig ``` #### 4. **比较两个历史提交之间的差异** 如果想查看两个历史提交(比如commit1和commit2)之间该文件的差异,使用: ```bash git diff <commit1> <commit2> -- gpu/drm/panel/Kconfig ``` 其中 `<commit1>` 和 `<commit2>` 可以是提交的哈希值、分支名、标签名或相对引用(如 `HEAD~1`)。 #### 5. **查看某次提交引入的差异** 如果想查看某次提交(比如提交哈希为`abc123`)相对于其父提交对`Kconfig`文件的修改: ```bash git diff abc123^ abc123 -- gpu/drm/panel/Kconfig ``` 或者使用: ```bash git show abc123 -- gpu/drm/panel/Kconfig ``` ### 高级选项 - **输出格式**:使用 `--color-words` 可以按单词高亮变化,`-U<n>` 可以设置上下文行数(例如 `-U0` 只显示变化部分)。 - **查看分支间的差异**:比如比较当前分支与`main`分支的差异: ```bash git diff main -- gpu/drm/panel/Kconfig ``` ### 注意事项 - 路径中的目录分隔符使用正斜杠(`/`),即使在Windows上也是如此。 - 如果路径包含空格,需要用引号括起来,或者使用转义符。 ### 示例 假设我们在Linux内核源代码树中,想查看工作区相对于`HEAD`的`gpu/drm/panel/Kconfig`文件的修改: ```bash git diff HEAD -- gpu/drm/panel/Kconfig ``` ### 相关问题 1. 如何查看Git中某个文件的修改历史? 2. `git diff` 和 `git status` 命令有什么区别? 3. 如何忽略空白字符的差异进行比较? 希望这些信息能帮助用户解决问题。 </think>### 使用 `git diff` 查看 `gpu/drm/panel/Kconfig` 文件差异的方法 #### 1. **基本查看命令** ```bash git diff -- gpu/drm/panel/Kconfig ``` - **作用**:显示工作目录中该文件与暂存区的差异 - **输出说明**: - `-` 开头行:被删除的内容(红色) - `+` 开头行:新增的内容(绿色) - `@@ ... @@`:差异区块的行号范围 #### 2. **比较特定提交版本** ```bash # 比较当前与最近一次提交 git diff HEAD^ HEAD -- gpu/drm/panel/Kconfig # 比较两个具体提交 git diff commit1_id commit2_id -- gpu/drm/panel/Kconfig ``` - **适用场景**:验证补丁提交效果(如引用[1]的lane_swap修改) - **参数说明**: - `HEAD^`:上一次提交 - `commit_id`:通过 `git log gpu/drm/panel/Kconfig` 获取 #### 3. **与分支对比** ```bash # 比较当前分支与main分支的差异 git diff main..HEAD -- gpu/drm/panel/Kconfig # 比较本地与远程分支 git diff origin/main -- gpu/drm/panel/Kconfig ``` - **典型场景**:检查功能分支修改(如DRM驱动开发)[^2] #### 4. **高级过滤选项** | 选项 | 命令示例 | 用途 | |------|----------|------| | 查看修改统计 | `git diff --stat gpu/drm/panel/Kconfig` | 快速查看变更行数 | | 忽略空白修改 | `git diff -w gpu/drm/panel/Kconfig` | 排除空格/缩进干扰 | | 分页查看 | `git diff -- gpu/drm/panel/Kconfig \| less` | 长内容分页浏览 | #### 5. **典型输出解析示例 ```diff diff --git a/gpu/drm/panel/Kconfig b/gpu/drm/panel/Kconfig index ac25dff..24b15fe 100644 --- a/gpu/drm/panel/Kconfig +++ b/gpu/drm/panel/Kconfig @@ -10,7 +10,7 @@ config DRM_PANEL_SIMPLE tristate "通用面板支持" depends on OF depends on BACKLIGHT_CLASS_DEVICE - depends on PM + depends on PM && !ANDROID select VIDEOMODE_HELPERS help 支持无需特殊配置的通用面板 ``` - **解读**: 1. 移除了对 `ANDROID` 的依赖(`-` 行) 2. 增加了电源管理条件组合(`+` 行) 3. 修改位于文件第10行附近 #### 6. **调试技巧** 1. **结合 `git blame`**: ```bash git blame gpu/drm/panel/Kconfig | grep -C 3 "关键配置项" ``` 2. **图形化工具**: ```bash git difftool -y HEAD~1 HEAD -- gpu/drm/panel/Kconfig ``` 推荐工具:`meld` 或 `vimdiff` > **注**:在驱动开发中(如引用[1]的LT8912B修改),通常配合 `git apply` 测试补丁效果: > ```bash > git diff commit_id > patch.diff > git apply --check patch.diff > ``` ### 相关问题 1. 如何查看Git中某个文件的修改历史记录? 2. 在Linux内核开发中,如何正确提交DRM驱动补丁? 3. `git diff` 和 `git show` 命令在查看文件修改时有什么区别?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值