Git高级配置:全局配置、别名配置、gitattributes、gitignore高级用法

说实话,很多人用了几年Git,还停留在git addgit commitgit push三板斧的阶段。我个人觉得,真正让Git用起来顺手的关键,其实是那些「看不见」的配置。今天我就把压箱底的高级配置经验拿出来聊聊。

一、全局配置:你的Git「出厂设置」

每次装好Git,我第一件事就是配全局配置。这就像给新手机装常用App一样,属于「必做清单」。

1. 用户信息配置

最基本的,你得告诉Git你是谁:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

嗯,这里要注意——邮箱最好和你的GitHub/GitLab保持一致。我见过有人公司邮箱和个人邮箱混用,结果commit记录里头像显示不出来,看着特别别扭。

2. 编辑器与换行符

我个人习惯用VS Code作为默认编辑器:

git config --global core.editor "code --wait"

换行符这个坑,我踩过好几次。Windows和Mac/Linux的换行符不一样,跨平台协作时经常出现「明明没改代码,但diff显示全红了」的诡异情况。我的建议是:

git config --global core.autocrlf input  # Mac/Linux
git config --global core.autocrlf true   # Windows
小技巧:如果你团队里Windows和Mac混用,建议在项目根目录放一个.editorconfig文件,比单纯靠Git配置更靠谱。

二、别名配置:把长命令变成快捷键

你想想看,每天要敲几十次git statusgit log --oneline --graph,手指不累吗?我给自己配了一套「快捷键」:

git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.lg "log --oneline --graph --all --decorate"

配完之后,git st就能看状态,git lg就能看分支图。说实话,这可能是性价比最高的配置——花5分钟配一次,以后每天省下几百次按键。

我的私藏别名:
git config --global alias.undo "reset --soft HEAD~1"  # 撤销上次commit
git config --global alias.last "log -1 HEAD"           # 看最后一次提交
git config --global alias.unstage "reset HEAD --"      # 取消暂存

三、gitattributes:给文件「贴标签」

这个功能很多人不知道,但用好了能解决大问题。.gitattributes文件可以告诉Git「某些文件该怎么处理」。我在项目中遇到过最典型的场景——二进制文件被Git当成文本去diff,结果每次看diff都是乱码。

一个标准的.gitattributes长这样:

# 文本文件统一用LF换行符
* text=auto

# 二进制文件标记
*.png binary
*.jpg binary
*.ico binary

# 特定文件指定换行符
*.sh text eol=lf
*.bat text eol=crlf

# 让Git对某些文件做特殊diff
*.ipynb diff=jupyter

为什么这个重要?我举个例子——你团队里有人用Windows,有人用Mac。如果没有.gitattributes.sh脚本被自动转成了CRLF,放到Linux服务器上直接报错。有了上面的配置,.sh文件永远保持LF,谁也改不了。

指令 作用 常用场景
text=auto 自动检测文本文件 大多数项目
binary 标记为二进制文件 图片、压缩包、可执行文件
eol=lf 强制使用LF换行 Shell脚本、Python文件
diff=... 自定义diff驱动 Jupyter Notebook、PDF

四、gitignore高级用法:不只是「忽略文件」

很多人以为.gitignore就是列几个文件名。其实它的规则比你想象的灵活得多。我曾经接手一个项目,里面各种编译产物、IDE配置、日志文件混在一起,光清理就花了一下午。

1. 模式匹配规则

# 忽略所有.log文件
*.log

# 但保留重要的日志
!important.log

# 忽略build目录下的所有内容
build/

# 只忽略根目录下的config,子目录的不忽略
/config

# 忽略任何目录下的temp文件夹
**/temp/

2. 全局gitignore

有些文件是「个人专属」的,比如IDE配置、操作系统文件。这些不应该放到项目里,而是配到全局:

git config --global core.excludesFile ~/.gitignore_global

然后在~/.gitignore_global里写:

.DS_Store
Thumbs.db
*.swp
.idea/
.vscode/
曾经踩过的坑:我曾经把.env文件加到.gitignore里,但忘了之前已经提交过了。结果Git根本不理会ignore规则——已经跟踪的文件,ignore无效。正确的做法是先git rm --cached .env解除跟踪。

五、知识体系总览

下面这张图,是我自己整理的高级配置知识结构。你可以把它当成一张「地图」,以后遇到配置问题,先看这张图定位:

Git高级配置 全局配置 • user.name / user.email • core.editor • core.autocrlf 别名配置 • st → status • ci → commit • lg → 图形化日志 gitattributes • text=auto 自动检测 • binary 标记二进制 • eol=lf 强制换行符 gitignore • 模式匹配 *.log !important.log • 目录忽略 build/ **/temp/ • 全局gitignore • 已跟踪文件需先 rm --cached 配置一次,受益终身

六、实战建议:配置文件的「分层管理」

最后分享一个我自己的配置哲学——分层管理

  1. 系统级--system):基本不用,除非你要给服务器上所有用户统一配置
  2. 全局级--global):放个人偏好,比如别名、编辑器、全局gitignore
  3. 项目级(不加参数):放团队约定,比如.gitattributes.gitignore

说白了,全局配置是你的「私人定制」,项目配置是团队的「共同契约」。两者分开管理,既不影响别人,又能让自己用得爽。

查看所有配置:git config --list --show-origin 可以告诉你每条配置来自哪个文件,排查问题特别好用。

公众号:蓝海资料掘金营,微信deep3321