Git高级配置:全局配置、别名配置、gitattributes、gitignore高级用法
说实话,很多人用了几年Git,还停留在git add、git commit、git 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
.editorconfig文件,比单纯靠Git配置更靠谱。
二、别名配置:把长命令变成快捷键
你想想看,每天要敲几十次git status、git 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解除跟踪。
五、知识体系总览
下面这张图,是我自己整理的高级配置知识结构。你可以把它当成一张「地图」,以后遇到配置问题,先看这张图定位:
六、实战建议:配置文件的「分层管理」
最后分享一个我自己的配置哲学——分层管理:
- 系统级(
--system):基本不用,除非你要给服务器上所有用户统一配置 - 全局级(
--global):放个人偏好,比如别名、编辑器、全局gitignore - 项目级(不加参数):放团队约定,比如
.gitattributes、.gitignore
说白了,全局配置是你的「私人定制」,项目配置是团队的「共同契约」。两者分开管理,既不影响别人,又能让自己用得爽。
git config --list --show-origin 可以告诉你每条配置来自哪个文件,排查问题特别好用。
公众号:蓝海资料掘金营,微信deep3321