1. 环境是第一关:安装、配置与文件显示问题
如果让我说一个程序员电脑上最该提前收拾干净的工具,Git一定能排进前三。很多人不是不会用,而是从一开始环境就没捣鼓明白,导致后面每敲一条命令都像踩地雷。这篇帖子不聊虚的,就按实际工作流走一遍:怎么装、怎么配、底层怎么想、日常命令怎么用、企业里怎么协作,以及出了事故怎么把代码捞回来。
先说句实在话:Git不是“会用add、commit、push就算会了”的工具。面试时问分支原理、协作流程、冲突恢复,能讲清楚的人其实不多。这篇文章适合刚准备入门的同学,也适合已经提交过几百个commit但仍然被reset、rebase、quotepath这些词绕晕的老同事。我会把Git安装、配置、常用命令、免密设置,以及IDE经常在你背后偷偷执行的那条带-c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks的命令一起讲明白。文章里所有经验都来自真实项目和实际踩坑,你可以直接照着操作。
1.1 不同操作系统的安装路径
先解决“能不能跑起来”的问题。Git的安装其实没有太多技术含量,但不同系统各有各的坑。
-
Windows:最省事的方式是下载Git for Windows,默认安装一路点Next也没太大问题,但我建议你在安装向导里多看一眼“Adjusting your PATH environment”这一步,务必选择“Git from the command line and also from 3rd-party software”。很多人后来在VS Code或JetBrains系列IDE里找不到Git,就是因为这一步选了中间那个“only from Git Bash”,导致系统PATH里没有Git的可执行文件。选择行结束符转换时,如果项目是纯Windows环境,选第二个“Checkout as-is, commit as-is”也可以;如果团队跨平台,直接用默认的“Checkout Windows-style, commit Unix-style”就好,省得后期为CRLF问题吵架。
-
macOS:以前大家习惯用Homebrew装,
brew install git一条命令搞定。新版Mac自带的git其实是Apple Command Line Tools的版本,版本偏老,遇到新协议或者某些企业级配置会莫名其妙出问题。我的建议是别偷懒,还是用Homebrew统一管理版本,装完以后执行git --version确认一下路径在/usr/local/bin或者/opt/homebrew/bin下面,而不是/usr/bin/git。 -
Linux:Debian/Ubuntu系用
apt install git,CentOS/RHEL系用yum install git。如果系统自带版本太老,还可以通过源码编译,但不推荐在没有特殊需求的情况下折腾,除非你要体验最新特性或者定制编译参数。
装完之后第一件事不是在项目里commit,而是打开终端执行一遍git --version确认安装成功,然后立刻做用户配置。很多人装完直接推到GitHub,结果贡献记录里显示的不是自己的名字,就是因为漏了user.name和user.email。
1.2 把用户级配置一次配好
Git的配置分三个层级:系统级/etc/gitconfig、用户级~/.gitconfig、仓库级.git/config。优先级从低到高,也就是说仓库级配置会覆盖用户级,用户级会覆盖系统级。理解这个顺序特别重要,比如你公司电脑上设了全局用户名,但某个开源项目想用个人邮箱提交,只需要在该仓库里单独覆盖一次。
基础的用户级配置至少要包含以下内容:
bash复制git config --global user.name "你的名字"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global core.autocrlf input
git config --global core.quotepath false
git config --global pull.rebase false
user.name和user.email会写进每一个commit的author信息里,这个信息是永久性的,后期虽然能改,但会重写历史,相当麻烦。如果你有公司项目和个人项目,建议在各自仓库目录里使用git config user.name/user.email做局部覆盖,避免把公司邮箱提交到个人开源仓库里。
init.defaultBranch main是近几年才推荐的配置,因为“master”这个词本身没有技术问题,但新仓库默认用main更符合当前主流平台的默认习惯,团队内部也少一些无意义的歧义。core.autocrlf input是我个人比较偏好的换行符策略,在Windows上提交时自动转成LF,避免整个文件被标记为modified。pull.rebase false则是把默认的pull行为固定成merge,对不熟悉rebase的团队比较友好。
另外建议设置一个顺手一点的别名,尤其是git log那串常写的参数:
bash复制git config --global alias.lg "log --oneline --graph --all --decorate"
之
