ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Mac安装Git全攻略:三种方式、必做配置与高频报错排查

Mac安装Git全攻略:三种方式、必做配置与高频报错排查 长话短说Mac上装Git这件事乍一看简单到不行网上随便一搜全是教程但真到自己动手的时候卡在“到底用哪种方式装”“装完怎么配”“报错了怎么办”这些环节上的人我见过太多了。这篇就把Mac安装Git的完整链路从头到尾拆开揉碎讲一遍包括三种安装方式的取舍、装完必做的配置、新手高频踩坑的排查思路以及一些日常命令的进阶玩法尽量做到看完就能动手动手就能装成。适用的读者很广刚接触Mac的新手、从Windows转过来的开发者、用公司电脑且没有管理员权限的同事还有那些“Git明明装过但git --version就是报错”的倒霉蛋。这篇能帮你把事情彻底搞清楚。1. 装Git之前先把安装逻辑理清楚1.1 提前确认三件事在动手敲命令之前我建议你先花两分钟确认三件小事能省下后面一多半的麻烦。第一件事是确认系统里是不是真的没有Git。macOS从老版本开始就自带了Git的“残留模块”但它不一定在PATH路径里或者版本很老导致你敲git --version的时候报command not found但系统深处又确实有Git的痕迹。这种状态最容易让人蒙圈。所以先打开“终端”App执行一下git --version如果输出类似git version 2.39.3 (Apple Git-145)说明系统里已经有一个能用的Git你只需要考虑要不要升级到最新版。如果报command not found说明确实没装或者没被系统识别接着往下看。第二件事是确认Mac的芯片型号。2020年之后的Mac大多是Apple SiliconM1/M2/M3/M4之前的多数是Intel芯片。这个信息决定了你用哪种安装包——虽然Git官方安装器和Homebrew都能自动适配但搞清楚芯片型号能让你在选pkg安装器的时候不抓瞎。点击左上角苹果图标→“关于本机”就能看到。第三件事是确认你有没有管理员权限。装Git的两种主流方式里官方安装器需要你输密码Homebrew也需要向/opt/homebrew或/usr/local目录写入文件。如果你用的是公司配的电脑、没有管理员权限那就只能走“用户级安装”路线这个我后面会专门讲。1.2 三种主流安装方式对比Mac装Git市面上的教程基本都绕不开这三种方式Xcode Command Line Tools、Git官方安装器、Homebrew。我先把它们的核心区别摆出来。安装方式命令行工具更新难度依赖后台服务适合场景Xcode CLTxcode-select --install跟随系统更新无追求零配置、只想要基础Git官方pkg安装器git-scm.com下载手动下载新版本无想要独立可控、所见即所得Homebrewbrew install git一条命令完成需要brew环境想要多工具统一管理、长期使用Xcode Command Line Tools其实是苹果提供给开发者的“命令行全家桶”里面包含了Git、SVN、make、clang等一堆工具。它最省心苹果帮你把编译器、Git、系统库都打包好了。Git官方pkg安装器git-scm.com是Git项目组自己出的安装包装到/usr/local/git目录下。它和系统自带的东西完全隔离想卸就卸、想换版本就换干净利落。Homebrew是Mac上的包管理器装完它之后Git只是你brew仓库里众多软件之一。以后每次想升级一条brew upgrade git搞定不用记安装包的下载地址何况现在很多人本来就要用brew装Node、Python之类的开发环境顺手把Git也收编进来很合理。1.3 为什么我不推荐“哪个顺手用哪个”很多人说“Git嘛随便装一个就能用”这话对了一半。日常的git add、git commit确实哪个版本都跑得动但一旦你遇到下面这些场景选错安装方式会非常痛苦你从网上复制一段Git命令结果某个参数功能需要Git 2.23才支持老版本直接不认你升级了macOS大版本结果是Xcode CLT自带的Git跟着出了兼容问题而你根本不知道它是什么时候被改掉的你同时在用IDEA、VS Code、命令行三个入口提交代码结果三个入口指向了三个不同版本的Git行为不一致排查起来头大。我的原则是如果是新电脑、新环境优先考虑Homebrew如果公司机器权限受限或者你不想折腾brew用官方pkg如果你连“为什么要有Git”都还不清楚那用Xcode CLT最快先把流程跑通后面再换也不迟。这是一个很现实的决策思路装的本质不是“让系统里有git”而是“让git在你的工作流里长期、稳定、可控地存在”。2. 三种安装方式逐个实操2.1 最快路径Xcode Command Line Tools一键安装这个方法没啥前置依赖只要你有网络打开了终端就够。xcode-select --install执行后Mac会弹出一个图形化的安装确认框点“安装”之后它会在后台下载Command Line Tools。下载时间取决于网速装完不会给你任何提示但终端里的命令会开始“有反应”。装完验证git --version xcode-select -pxcode-select -p会打印出当前Command Line Tools的安装路径正常情况是/Library/Developer/CommandLineTools。如果这一步输出了路径说明工具链生效了。这种方式的优缺点都很突出。优点是快、干净、不占用额外空间而且很多编译工具都会依赖Command Line Tools你装别的开发环境时也省得再装一次。缺点是Git版本会和苹果的发布节奏绑定通常不会第一时间更新到最新版而且出问题时不容易单独“重装”Git——系统会把它看成整体的一部分。如果你只是想快速搭好环境后面也不打算频繁升级Git这款是最合适的。后面我会专门讲“怎么把Xcode CLT的Git卸掉/换掉”虽然不推荐但万一你后悔了也知道路怎么走。2.2 最稳妥方案官方pkg安装器官方安装器适合两种人一种是不想装brew这一整套依赖只想要一个干干净净的Git另一种是公司电脑权限有限但至少能让你安装pkg包的。安装过程很简单浏览器访问git-scm.com点击下载macOS版本的安装包下载的是一个.dmg文件双击打开再双击里面的git-xxx-intel-universal.pkg按提示一直下一步这里注意安装界面会出现一个“Git Credential Manager”的可选项默认勾选。这个组件能让你在HTTPS克隆时免密操作建议保留安装完成后打开终端验证。git --version which git正常情况下which git会输出/usr/local/git/bin/git这就是官方安装器的安装位置。这个方案有个隐藏优点官方安装器不会覆盖系统自带的Git它把自己独立安装在/usr/local/git下。你可以通过/usr/local/git/bin/git访问它也可以通过常规的git命令访问前提是PATH里优先找到了它。有个细节容易漏如果你之前装过旧版官方安装器新版安装完成后终端里的git可能还是旧版。原因大概率是PATH环境变量里旧路径排在前面。检查一下echo $PATH看看是不是存在多个git路径比如/usr/local/git/bin和/usr/bin。如果which git指向了/usr/bin/git需要把/usr/local/git/bin加到PATH的前面。具体修改方法我放在第3章讲配置的时候一起说。2.3 最一劳永逸方案Homebrew安装Homebrew是Mac开发者的“软件超市”里面能装的工具数不胜数。它的安装命令是/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)但这行命令有个现实问题在国内网络环境下下载Homebrew仓库经常慢到让人怀疑人生。我自己印象最深的一次是装Homebrew卡在“Updating Homebrew...”这一步整整半小时没动静。这里的解决办法是用国内镜像源。在跑安装命令之前先设置环境变量把GitHub源换成清华或中科大的镜像export HOMEBREW_BREW_GIT_REMOTEhttps://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git export HOMEBREW_CORE_GIT_REMOTEhttps://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git export HOMEBREW_BOTTLE_DOMAINhttps://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles镜像镜像设置好以后再执行安装命令下载速度会有质的飞跃。装完brew之后安装Git就是一条命令的事brew install git装完同样验证git --version which gitHomebrew在Apple Silicon Mac上安装的默认路径是/opt/homebrew/bin/gitIntel Mac上是/usr/local/bin/git不用担心which git会告诉你答案。Homebrew的好处是后续升级非常舒服brew update brew upgrade git一条命令把所有软件包都更新到最新版包括Git。对于经常需要最新版本特性的开发者来说这几乎是完美的方案。2.4 装完先验证版本、路径、连通性一次性查清不管用哪种方式装的装完以后我建议你做一次“三连验证”确认Git真的能用了# 查看版本 git --version # 查看实际路径 which git # 查看Git安装目录确认没有版本冲突 ls -l $(which git)这三条命令分别是确认Git存在、确认用的是哪个Git、确认它指向的是真实文件而非软链接或系统兼容层。如果你用的是Homebrew但which git指向了/usr/bin/git说明PATH里系统目录排在了brew目录前面。解决办法是把brew的路径插到PATH最前面。在zsh里macOS默认shell就是zsh编辑~/.zshrc加一行export PATH/opt/homebrew/bin:$PATH然后source ~/.zshrc再重新执行which git看到路径变成brew目录就对了。这里还有一个很容易被忽略的点终端窗口如果是在修改PATH之后才打开的读到的环境变量才会是最新的如果是从旧窗口直接继续操作它读到的还是旧PATH。所以改完之后建议直接开一个新终端窗口别省这个步骤。3. 装完Git后第一件事不是写代码是配置3.1 配置提交身份user.name和user.emailGit提交代码时每次commit都会记录两个信息提交人名称和提交人邮箱。不配置的话Git会尝试用系统用户名和主机名去猜结果就是你的提交记录永远长这样Unknown unknownlocalhost.localdomain看着就头大。配置方法非常简单git config --global user.name 你的名字 git config --global user.email 你的邮箱--global表示全局生效对当前用户的所有仓库有效。如果不加就是只对当前仓库生效适合“公司项目用工作邮箱、个人项目用私人邮箱”的场景。验证配置是否生效git config --global --list你会看到类似这样的输出user.nameYour Name user.emailyouexample.com3.2 配置SSH密钥和Gitee、GitHub安全连线日常使用Git两种常见协议是HTTPS和SSH。HTTPS每次推送都要输入账号密码虽然可以调用系统钥匙串缓存但总归麻烦。SSH则是通过密钥交换自动完成身份认证配置一次之后推送和拉取都不用输密码。生成SSH密钥的命令ssh-keygen -t ed25519 -C youexample.com这里我推荐用ed25519算法比老的rsa更安全、更短。执行后会问你保存路径和密码短语直接一路回车就行。生成的默认路径是~/.ssh/id_ed25519密码短语可以为空如果设了每次用密钥时都要输一次。然后查看公钥内容cat ~/.ssh/id_ed25519.pub把输出的整段字符串复制下来然后如果你用Gitee登录Gitee → “设置” → “SSH公钥”粘贴保存如果你用GitHub登录GitHub → Settings → SSH and GPG keys → New SSH key粘贴保存如果你有多个平台都要用同一个公钥可以配置到多个平台不会有冲突。测试连通性ssh -T gitgitee.com如果配置正确Gitee会返回类似Hi xxx! Youve successfully authenticated的提示。有个坑要提醒如果终端里同时存在多个私钥比如你公司一个、个人一个SSH可能不知道该用哪个。解决办法是在~/.ssh/config里显式指定Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519 Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github这样一来访问不同的域名时SSH就会自动选用对应的私钥互不干扰。3.3 配置换行符和凭据缓存这里还有两个“不是建议、是必须”的配置项很多人忽略之后会在团队协作时出大问题。第一个是换行符。Windows和Mac/Linux的换行符不一样如果不对Git进行配置就可能在代码仓库里混入大量换行符变更记录整个diff看起来血海一片git config --global core.autocrlf inputinput的意思是提交时把CRLF转成LF但检出时不转。这是Mac/Linux用户的标准配置。Windows用户通常用true但你是Mac就用input。第二个是凭据缓存。如果你实在不想配SSH坚持用HTTPS那至少让Git记住密码git config --global credential.helper osxkeychain这个配置会调用macOS自带的“钥匙串”来保存Git的账号密码。第一次推送时输入一次用户名密码之后就不用再输了。实测下来这个方案在公司和个人的多账号场景下都挺稳的。3.4 用户级配置文件一览以上所有配置最终都会汇总在用户目录下的~/.gitconfig文件里。你随时可以用下面的命令直接查看完整内容cat ~/.gitconfig这个文件还支持你手动改比如直接给不同的仓库配置不同的用户信息。假如你公司和个人用的仓库都在同一台电脑上可以在某个仓库目录下手动修改它的配置文件git config --local user.name Company Name git config --local user.email workcompany.com--local的作用是仅对当前仓库生效。这种灵活度就是Git配置的精髓全局一套默认值局部按需覆盖。4. 新手最容易踩的坑我帮你一个个排掉4.1 常见报错与排查速查表下面这些报错我都在自己机器或帮别人处理时遇到过整理成表格方便你直接对照。报错信息出现场景主要原因解决方案xcrun: error: invalid active developer path装完Git或更新macOS后Command Line Tools路径失效sudo xcode-select --reset或sudo xcode-select --switch /Library/Developer/CommandLineToolsgit: command not found刚打开终端Git未安装或不在PATH按第2章任一方式安装或检查PATH路径Permission denied (publickey)SSH连接远程仓库公钥没配好或私钥路径不对检查~/.ssh下的文件重新配置公钥查看ssh -T gitgitee.com输出fatal: not a git repository在目录里执行Git命令当前目录不是Git仓库先执行git init或确认cd到了正确目录error: src refspec main does not match any首次推送还没有任何提交先git add、git commit再推送brew: command not foundHomebrew装完还是找不到PATH没生效或安装在中途失败检查/opt/homebrew/bin/brew是否存在重新执行安装脚本4.2 最经典的坑command not found到底怎么破这个报错在Mac上出现的频率极高绝大多数人第一次看到都会懵。其实它表达的意思很直白系统在当前PATH路径列表里找不到一个叫git的可执行文件。MAC的PATH机制可以理解成“查找目录列表”。你敲命令时系统按照一个固定顺序去这些目录里找找到就执行全找完都没有才报错。排查分三步第一步先确认git到底有没有装在某个目录里ls -l /usr/local/bin/git ls -l /opt/homebrew/bin/git ls -l /usr/bin/git哪个路径下存在文件说明Git确实装在哪个位置。第二步看PATH环境变量里有没有包含这个路径echo $PATH比如你发现/opt/homebrew/bin不在其中就要加进去。第三步把路径加入shell配置文件。macOS默认用zsh所以编辑~/.zshrc加一行export PATH/opt/homebrew/bin:$PATH保存后执行source ~/.zshrc或者干脆重开终端问题就解决了。4.3 Homebrew安装时卡住、报错、慢到崩溃Homebrew在国内网络环境下经常出问题这是不争的事实。最常见的报错是curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused出现这种问题不要硬扛直接走镜像源。官方文档和清华、中科大镜像都提供了详细的设置说明核心思路就是把Homebrew的“仓库地址”和“下载bottle地址”全都指向国内镜像。设置完镜像后再执行brew install git如果还是慢或者提示“Updating Homebrew”可以先关掉自动更新export HOMEBREW_NO_AUTO_UPDATE1这样每次安装都不会先去更新homebrew-core仓库安装速度会快不少。还有一个更隐蔽的坑如果你之前安装过部分Homebrew文件但安装中断了重装时会报“It seems Homebrew is already installed”之类的提示但brew命令又完全用不了。解决方案是彻底清理残留的/opt/homebrew目录或/usr/local下的相关目录再重新安装。这一步需要小心操作建议先把重要数据备份好。4.4 macOS系统升级后Git“神秘失效”这种情况我在新旧系统上都遇到过。现象是升级前Git用得好好升级后一敲git就报xcrun: error: invalid active developer path。原因在于macOS大版本升级时/Library/Developer/CommandLineTools目录下的文件可能被系统重新部署导致xcode-select指向的路径失效。解决办法一般是重新安装Command Line Toolssudo rm -rf /Library/Developer/CommandLineTools sudo xcode-select --install先删除可能损坏的旧版本再重新安装装完后再执行git --version就正常了。需要注意如果你不只是用Git还依赖Apple Clang等编译工具那重装xcode-select可能会影响这些工具的运行建议重装前先确认工具链的依赖关系。4.5 Git版本太老想升级但不敢乱动用Xcode CLT方式安装的Git版本一般不会最新。我遇到过同事的Mac上Git版本是2.30而项目要求使用2.40才有的git switch语法为了用某个新功能只能升级Git。安全可靠的升级路径是继续用Homebrew装一份新的Git而不是去动系统自带的。brew install gitHomebrew会把新版本装到/opt/homebrew/bin/git而系统旧的Git在/usr/bin/git两个不冲突。只要PATH里/opt/homebrew/bin排在/usr/bin前面git命令就会指向新版本。如果不想用brew那就在~/.zshrc里把/usr/local/git/bin手动放到PATH最前面也能达成“优先使用官方新版本”的目的。4.6 多版本共存导致“git到底是谁”的迷惑这个坑比较进阶但很实际。很多人电脑里存在多个Git系统自带一个、官方装了一个、Homebrew又装了一个。当你遇到诡异行为时第一件事别猜先跑which git如果输出的是/usr/bin/git你那套操作全走的是系统自带Git如果输出/opt/homebrew/bin/git走的是Homebrew Git。两个版本的文件路径不同行为可能有细微差别。排查思路就是把不需要的路径从PATH里移除保留唯一入口问题通常就消失了。5. 从装好到熟练日常必用命令与进阶技巧5.1 新手必会的8个Git命令装好Git只是开始真正会用才是目的。以下8个命令覆盖了90%的日常操作命令作用说明git init初始化仓库在目录里创建.git文件夹git status查看工作区状态了解文件是新增、修改还是已暂存git add 文件名把文件加入暂存区告诉Git我要提交哪些修改git commit -m 说明提交暂存区内容生成一条提交记录git log --oneline查看提交历史简洁模式一行显示一条记录git branch查看分支当前分支前会有*标记git pull拉取远程更新把远程的最新提交同步到本地git push推送本地提交把本地提交推送到远程仓库这几个命令的组合使用就是一套完整的开发循环改代码 →git status看一眼 →git add暂存 →git commit提交 →git push推送。很多新手会纠结“什么时候commit”“一个commit应该多大”。我的经验是保持提交粒度细一点每个commit只做一件事写清楚它做了什么。这样以后排查问题、回滚版本时都会非常舒服。5.2 提交信息写错了用amend和rebase来补救如果你刚提交完就发现message写错了或者漏了一个文件可以直接用git commit --amend它会打开编辑器让你修改最后一次提交的信息也能把暂存区的补充修改合并进上一次提交。--amend的本质是“替换最后一次提交”而不是新建一条提交。所以如果已经push到远程再amend之后推送时要用git push --force-with-lease才能覆盖远程提交。这个操作对团队的其他人是有影响的使用前务必确认没人基于这条提交继续开发。git commit --amend还可以修改提交作者git commit --amend --authorNew Name newexample.com --no-edit有时候公司要求提交邮箱和账号邮箱一致这个命令就能快速修正。5.3 管理多个远程仓库origin不够用怎么办一个项目同时对应多个remote场景其实很常见。比如代码要同时推送到公司内网仓库和托管的Gitee仓库或者你想把代码同步到GitHub备份。查看当前远程仓库git remote -v添加新的远程仓库git remote add github gitgithub.com:username/repo.git推送到指定的远程仓库git push github main拉取指定远程仓库的分支git pull github main如果你想让“推送”这个动作一次推多个远程Git也支持给remote配置多个pushurl。这个技巧对“一键双推”很实用配置方法是在.git/config文件里加多行url。时间原因不再展开记住有这招就好。5.4 同时管理Gitee和GitHub等多平台账号当你同时使用Gitee和GitHub时最方便的方式是像3.2节那样为两个平台生成不同的密钥并在~/.ssh/config里做映射。这样在命令行里的体验几乎一致git clone gitgitee.com:xxx/yyy.git和git clone gitgithub.com:xxx/yyy.git都能自动找到对应的私钥互不干扰。难点在于你需要在两个平台都配置公钥。Gitee的设置入口是“设置→SSH公钥”GitHub是“Settings→SSH and GPG keys”。操作都一样把~/.ssh/id_ed25519_github.pub的内容粘贴到GitHub把~/.ssh/id_ed25519.pub的内容粘贴到Gitee保存即可。如果你使用Sourcetree、Fork等图形化客户端它们一般会读取系统SSH配置和钥匙串配置好后也能无缝对接。5.5 图形化工具与IDE集成很多人习惯在IDE里操作Git比如IDEA、VS Code、Cursor。这些工具本质上都是调用命令行的Git只是给了你一个可视化界面。IDEA里提交代码的流程是打开“Commit”面板勾选文件、写提交信息、点Commit或Commit and Push。IDEA的优势是会高亮显示新增、修改、删除的行也能直接看到diff比命令行直观很多。VS Code则轻量一些左侧边栏的源代码管理图标能完成暂存、提交、推送、拉取、解决冲突等操作。对于不习惯命令行的新手来说这种方式上手成本低很多。但我个人的建议是图形化工具可以日常用命令行必须会。因为图形工具报错时给出的信息经常被简化而命令行给出的完整报错信息才是排查问题的钥匙。6. 一些没用但好用的冷门技巧6.1 用git worktree同时开多个分支这个功能可能很多老手都没用过。git worktree允许你在同一个仓库里同时检出多个分支到不同目录互不干扰。git worktree add ../project-feature feature-branch这条命令会在../project-feature目录下检出一个新的工作树关联的是feature-branch分支。你可以在主目录开发一个功能另一个目录同时在开发另一个功能两边互不影响。不需要频繁切分支、暂存再恢复非常省心。用完可以删掉git worktree remove ../project-feature6.2 用git stash临时保存手头工作切分支前遇到“代码没写完但需要切到别的分支处理紧急bug”这种场景太常见了。git stash就是为这个设计的。git stash这条命令会把当前未提交的修改包括已暂存和未暂存的打包保存起来然后清理工作区让你能干净地切分支。处理完bug后切回来再git stash pop改动就全部恢复了。如果想保留stash但是恢复到工作区git stash apply区别在于pop会从stash列表里删除最近一条apply则保留。6.3 配置alias让常用命令缩短一半Git命令写多了之后你会发现最费时间的不是命令本身而是打字。用alias配置别名是个很划算的投入git config --global alias.st status git config --global alias.co checkout git config --global alias.cm commit git config --global alias.br branch git config --global alias.lg log --oneline --graph --all --decorate配置完以后git st就是git statusgit cm -m message就是git commit -m message效率提升肉眼可见。如果你愿意接受更多自定义可以直接编辑~/.gitconfig在[alias]一节里批量写[alias] st status co checkout ci commit br branch lg log --oneline --graph --all --decorate unstage reset HEAD --写完之后存盘新开的终端窗口立即生效。7. 写在最后也是我最想强调的几点经验装Git这件事本身不难难的是装完之后你愿不愿意花十分钟把基础配置做完。很多人在网上搜完教程brew install git跑完就以为大功告成了结果第一次提交时发现用户名不对、SSH连不上、换行符乱改各种问题一窝蜂涌上来体验极差。我自己的习惯是每次在新Mac上搭建开发环境不管项目多急配置Git的时间一定要留够。先配user.name、user.email再生成SSH密钥并配置到托管平台最后调一下~/.gitconfig里的alias和凭据缓存整个过程也就五六分钟但能让后面两三年的开发体验都舒服很多。另外如果你遇到网上教程和你的实际环境对不上的情况不要硬套命令。先跑which git和echo $PATH看清当前环境到底是谁在工作再对症下药。90%的Git安装配置问题都能通过这两条命令找到头绪。最后分享一个小技巧Mac上如果因为环境变量改动太乱导致怎么调都不对可以直接开一个全新的终端窗口它只读取登录时最新的配置。很多时候你折腾半天解决不了的问题开个新窗口自己就好了。
返回列表