ARTICLE DETAIL

资讯详情

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

国内Git安装与配置避坑指南:从镜像下载、换行符到SSH密钥排查

国内Git安装与配置避坑指南:从镜像下载、换行符到SSH密钥排查 1. 安装前想清楚的三件事为什么国内装Git这么折腾打开浏览器搜索“Git下载”排在前面的永远是Git官网和GitHub的release页面。问题来了Git官网的下载链接放在GitHub上而GitHub的release附件在国内的下载速度用“玄学”来形容一点也不过分。有时候一个60多MB的安装包能下一晚上下到一半还断掉第二天一看进度条还在原地踏步。这不是你的网络问题是Git的官方分发机制决定了它没有做国内CDN加速。所以在国内安装Git第一步不是下载而是选对下载渠道。我自己的习惯是一切从国内镜像走。1.1 官网下载慢是老生常谈镜像源怎么选才稳Git在Windows下的官方发行版叫Git for Windows它的安装包发布在GitHub的git-for-windows/git仓库的releases页面。国内直接访问这个页面加载很慢点开一个exe链接之后速度基本在几十KB每秒到一两百KB每秒之间浮动偶尔还会出现连接重置。国内常用的镜像源有这几个镜像源地址更新速度备注阿里云镜像mirrors.aliyun.com/git-for-windows/跟官网几乎同步国内速度最快我首选这个清华TUNA镜像mirrors.tuna.tsinghua.edu.cn/git-for-windows/稍有延迟教育网访问效果极好腾讯软件源mirrors.cloud.tencent.com/git-for-windows/延迟不大速度稳定华为云镜像mirrors.huaweicloud.com/git-for-windows/延迟不大备选方案镜像的路径结构一般是按版本号分目录比如v2.45.2.windows.1/进去之后找Git-2.45.2-64-bit.exe就是64位系统的安装包Git-2.45.2-32-bit.exe是32位的。还有个Git-2.45.2-64-bit.tar.bz2是免安装的便携版我自己偶尔会用便携版做U盘工具但日常开发还是老老实实装完整版因为完整版带Git Bash、Git GUI、右键菜单这些配套功能。下载完安装包之后强烈建议顺手做个校验。Git官方release页面会提供SHA-256哈希值如果镜像站也提供了对应的校验文件可以核对一下。虽然国内镜像被篡改的概率微乎其微但安全习惯是从小处养成的。1.2 便携版和安装版怎么选小乌龟又是什么Git有几种形态安装版Windows installer、便携版Portable、源码版从源码编译安装。Windows用户绝大多数场景直接用安装版就够了。顺便说下“Git小乌龟”。这个词在搜索量里出现频率很高它指的是TortoiseGit——一个Windows下的Git图形化客户端。因为它的图标是个小乌龟大家习惯这么叫。小乌龟不是替代Git的它只是Git的GUI外壳底层还是要依赖Git环境。所以在装小乌龟之前先装好Git本体顺序不能反。macOS用户更简单直接用Homebrew装brew install git一条命令搞定比Windows省心太多了。Linux用户各发行版都有自己的包管理方式Ubuntu/Debian用apt install gitCentOS/RHEL用yum install git或者dnf install git源码编译这种事非重度玩家一般不碰。等一下主题是“国内安装Git”我主要把Windows这条线说透这是因为国内绝大多数初学者和办公开发场景都是Windows机器。macOS和Linux我只是带一嘴你们按官方渠道装就行不存在什么国内国外的问题因为包管理器走的是各发行版的软件源速度本来就快。2. Windows平台安装实操从下载到Git Bash能跑起来下载完成只是一个开始真正决定后续使用体验的是安装过程中那些选项怎么勾选。很多人不看说明一路“Next”装完之后发现右键没有Git Bash菜单或者Git命令不能在PowerShell里直接用又回头折腾半天。这些坑我全部踩过现在把理由写清楚。2.1 从阿里云镜像下载安装包版本怎么挑进入阿里云镜像的git-for-windows目录后会看到一堆版本号目录。Git的Windows版命名规律是vX.YZ.W.windows.N其中X.YZ.W是Git的版本号N是Windows版的修订号。版本选择有个原则不是越新越好但也不能太老。最新的版本可能带了新特性和安全修复但偶尔也有bug太老的版本可能不支持新的服务端协议比如GitHub在2022年就移除了对弱加密算法的支持老版本Git连接会出现fatal: unable to access之类的报错。我个人的做法是选当前年份发布的稳定版中看着顺眼且不是刚发布一周内的版本。比如发稿时最新版本是2.45.x系列那我就会选v2.45.1.windows.1或者v2.45.2.windows.1这种给新版本留一周的“观察期”等社区反馈没大问题再升级。不过Git for Windows这个项目成熟度已经很高了正常用最新版问题也不大。下载的时候注意区分64-bit和32-bit。现在大多数电脑都是64位系统怎么看自己系统的位数右键“此电脑”选“属性”看“系统类型”一栏就知道。拿到安装包后双击运行接下来进入安装向导每一步都有讲究。2.2 安装向导每一项我怎么勾从PATH到换行符安装向导从选择安装路径开始我建议装在默认路径C:\Program Files\Git下不要去改它。改到带空格的路径或者中文路径后面配合一些工具的时候容易出怪问题。安装选项的页面比较多重点在两个地方第一个是Select Components页面默认勾选的选项基本都保留。有一个Git LFSLarge File Storage默认不勾我建议手动勾上。Git对大文件的处理能力很弱仓库里放超过几十MB的文件会让仓库体积爆炸LFS就是为了解决这个问题设计的现在不少团队已经用起来了提前装好不亏。第二个重中之重是Choosing the default editor页面这里选默认编辑器给Git用。默认是Vim对不熟悉Vim的初学者来说简直是噩梦。很多人git commit之后卡在一个黑底界面里出不来就是被这个Vim坑了。如果你装了VS Code直接选Use Visual Studio Code as Gits default editor没有的话选Use Notepad也行实在没有就选Nano至少操作比Vim直观。然后是Adjusting your PATH environment页面这个必须选中间那一项Git from the command line and also from 3rd-party software什么意思呢它会把Git的可执行文件添加到系统PATH环境变量中这样你在CMD、PowerShell、任意终端里敲git命令都能用。如果你选第一项Use Git Bash only那只能在Git Bash里用git命令出了Git Bash就是“未找到命令”。选第三项会把Git的Unix工具也加入PATH可能会跟系统自带命令冲突不建议。后面的Choosing HTTPS transport backend页面默认选Use the OpenSSL library就行。再有Line Ending Conversions页面这个学问最大我单独开一节说。2.3 换行符选择这个选项为什么让无数人栽跟头Windows系统里文本文件的换行是CRLF回车换行Linux/macOS是LF换行。Git出现之前代码跨平台协作不频繁这个问题很少有人注意。Git出现之后它默认会在checkout代码时把仓库里的LF转成CRLF在commit时把CRLF转回LF这样就能保证仓库里存的是统一的LF但工作目录里是Windows习惯的CRLF。安装向导里三个选项分别是选项行为适合场景Checkout Windows-style, commit Unix-style line endingscheckout时CRLFcommit时LF纯Windows开发但不清楚概念的初学者Checkout as-is, commit as-is不转换多平台协作、团队有统一规范Checkout as-is, commit Unix-style line endingscheckout不转commit时转LF介于两者之间的折中方案我在实际工作中踩过一次坑团队里有人用Windows有人用macOS结果Windows同事提交的代码换行符变成了CRLFmacOS同事一打开文件发现整片代码的格式乱了diff的时候满屏都是红色根本没法review。后来我们统一的做法是所有人安装后运行git config --global core.autocrlf false关闭自动转换然后仓库里放一个.gitattributes文件纯文本文件明确指定* textauto二进制文件标记*.png binary。这样Git根据文件类型自己判断既不乱转也不会不转。对新手来说安装向导里选第一项Checkout Windows-style, commit Unix-style line endings也不会出大问题Git会在提交时自动处理。但如果你要跟用macOS/Linux的同事协作还是建议选as-is并统一规则。安装完成之后桌面右键菜单应该能看到Git Bash Here和Git GUI Here两个选项如果没有说明安装过程哪里出了问题要么是没选对组件要么是右键菜单注册失败卸载重装一次一般就好。3. 安装之后必须做的配置身份、换行符、SSH密钥一条龙装完Git并不代表万事大吉。如果直接git commitGit会报错说Please tell me who you are因为Git需要知道你是谁才能做提交记录。这是身份配置还有一个更关键的是SSH密钥配置它决定了你能不能通过SSH协议push代码到Gitee、GitHub这样的代码托管平台。这一节是我认为全文最实用的部分国内大部分“Git装不上、配置不了、push不了”的问题都出在这一步。3.1 配置用户身份和换行符两条命令解决两个大坑打开Git Bash依次执行git config --global user.name 你的名字 git config --global user.email 你的邮箱注意这里的名字和邮箱要跟你在Gitee或GitHub上注册的信息一致这样你的提交记录才会关联到你的账号上。很多人随便填了一个昵称提交之后发现代码托管平台上不显示那个绿色的commit小方块就是名字没对齐。--global参数表示全局生效对当前用户的所有仓库都有效。如果你想针对某个仓库单独设置不同的名字在仓库目录里去掉--global再设置一遍就行。然后是换行符这是我自己强烈推荐统一执行的一步git config --global core.autocrlf false我前面说了autocrlf默认在Windows安装时会被设成true让你checkout代码时自动转CRLF。但多平台协作时这个默认值就是炸弹。把它设成false再配合仓库里的.gitattributes文件一切交给Git的text属性自动处理比人肉判断靠谱得多。还有一个国内用户高频问题——中文文件名在Git命令里显示成八进制的转义字符。比如\345\233\276\347\211\207.png这种看起来像乱码。这个其实不是乱码是Git对非ASCII字符所做的转义显示。如果你看着难受关掉它git config --global core.quotepath false这个配置就是我看到热搜词里那条core.quotepathfalse的来历设置完之后中文路径就能正常显示了。3.2 生成SSH密钥并配置到Giteepush不再要密码很多人第一次配置SSH的时候会卡一下其实流程很简单分四步。第一步在Git Bash里执行ssh-keygen -t ed25519 -C 你的邮箱-t ed25519是密钥类型。老教程会让你用rsa但ed25519更安全、更短、速度也更快而且Gitee和GitHub都支持。执行过程中会问你保存路径和密码短语一路回车就行不要额外设置密码短语否则每次push都要输一次很烦。第二步查看公钥内容cat ~/.ssh/id_ed25519.pub出来的就是你的公钥一段以ssh-ed25519开头、以邮箱结尾的字符串。第三步登录Gitee右上角头像 → “设置” → “安全设置” → “SSH公钥”把公钥内容粘贴进去标题随便起比如“我的电脑”确认保存。第四步验证是否配置成功ssh -T gitgitee.com如果看到Hi 你的用户名! Youve successfully authenticated, but GITEE.COM does not provide shell access.恭喜你SSH通了。如果你既用Gitee又用GitHub同样的公钥可以在两个平台都添加一劳永逸。3.3 多账号多平台并行同机器同公钥的心得我在实际中遇到过一个问题公司的代码在GitLab个人项目在GitHub还有些练习项目放Gitee。这种情况下所有平台都添加同一个公钥是可以的生成一对密钥就够了。但如果你想某个平台用独立的密钥那就需要改~/.ssh/config文件来限定。比如为GitHub单独指定另一个密钥Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github再加一个GiteeHost gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519保存之后各自的SSH连接会按域名自动选对应的密钥文件。这个配置里有个隐含的坑如果你只有一个密钥但为了多平台都写了一段config记得到最后确保没有把邮箱、用户名写错否则会报Permission denied (publickey)。碰到这个报错先跑ssh -vT gitgithub.com看详细日志大部分时候都是密钥路径指错了。4. 日常用得最多的操作和第一波报错排查安装和配置完成接下来就是实实在在的使用了。这一节我结合自己团队里新人上手时最常问的问题把高频命令、Git Bash和CMD的选择、还有IDE集成这三个方面串起来说。4.1 高频命令速查和“fatal: not a git repository”的来龙去脉Git命令非常多初学者不用一次性全学先把下面这套最核心的流程跑通# 克隆远程仓库 git clone gitgitee.com:用户名/仓库名.git # 查看状态 git status # 查看文件差异 git diff # 把所有改动加入暂存区 git add . # 提交到本地版本库 git commit -m 提交说明 # 推送远端 git push origin main # 拉取远端更新 git pull origin main这套流程包含了Git的使用主线克隆 → 修改 → 暂存 → 提交 → 推送 → 拉取。新手照着敲两遍基本就上手了。热搜词里有一条特别显眼fatal: not a git repository (or any of the parent directories): .git。这个报错是所有Git初学者必踩的坑之一我来拆一下。这个报错的意思是“当前目录不是Git仓库上级目录里也没有.git目录”。为什么会这样分几种情况你在一个普通文件夹里执行了git status或git commit但这个文件夹从来没有git init过也没有被git clone下来过。你cd进了一个子目录而仓库根目录并不是它的父级比如你从GitHub下载了zip并解压这个解压出来的文件夹根本没有.git。你把.git目录误删了或者移动了仓库位置但漏了.git目录。排查方法是先ls -a看一眼当前目录下有没有.git目录没有就一路向上找。如果确实不在仓库内要么git init初始化要么cd到正确的仓库目录再操作。另外有一条相关的高频命令git -c diff.mnemonicprefixfalse -c core.quotepathfalse --no-optional-locks。这条长命令看着吓人其实它是某些IDE尤其是Android Studio系列在底层调用Git时自动加上的参数用来指定diff行为的。mnemonicprefixfalse让diff不使用a/和b/这类前缀缩写--no-optional-locks告诉Git在执行diff时不加锁、不刷新索引这样可以避免一些高IO环境下的性能问题。普通用户不用手动去敲它但看到IDE终端里出现这条命令时不用慌它没有坏作用。4.2 Git Bash和CMD/PowerShell该用哪个我的建议Git安装后自带一个终端叫Git Bash它模拟了Linux的Bash环境让你在Windows上也能使用Linux风格的命令比如ls、pwd、grep、sed这些。很多人装好Git之后习惯性继续用CMD或者PowerShell其实这对新手来说绕了远路。我强烈建议新手一律在Git Bash里练习git命令。原因很简单网上90%的Git教程和命令示例都是Linux风格路径~/.ssh/id_ed25519.pub、/c/Users/xxx这种写法你只有用Git Bash才能和教程一模一样地敲出来。在CMD里你得写C:\Users\xxx\.ssh\id_ed25519.pub路径写法不一致照着教程敲都会报错。PowerShell是个好终端但它有自己的语法体系比如别名的定义方式、管道的用法学问很多对只想学Git的新手来说是额外的认知负担。等你Git用熟了再去研究PowerShell也不迟。如果你实在想升级体验装个Windows Terminal然后默认开Git Bash也行这个就看个人喜好了。4.3 IDEA里提交代码从VCS到Push以及“login failed”怎么查后端Java开发、前端开发很多人在IDE里做Git操作。IDEA内置了完善的Git集成但新手第一次用会遇到几个问题。在IDEA里打开一个从Git克隆下来的项目底部或者右侧会出现一个“Git”窗口。日常提交走这个路径右键文件 →Git→Commit Directory或者直接用快捷键CtrlK打开提交窗口。提交窗口里左侧勾选要提交的文件中间写提交信息下面有个“Commit”和“Commit and Push”按钮。“Commit”只提交到本地“Commit and Push”提交后直接推送远端。新手建议先点“Commit”看下效果再按CtrlShiftK手动推送。有人第一次操作发现IDEA报了一个挺唬人的错误login failed. check api token or gitlab version. log in via git if the versi...。这个报错通常出现在IDEA自带的GitLab集成插件上它默认会尝试用自己的方式登录GitLab但你可能没配置API Token或者GitLab版本太旧不兼容。遇到这个报错冷静一点它不影响你用SSH方式执行git操作。解决思路有几个如果项目是用SSH方式克隆的IDEA里的git pull/git push走的是本地SSH密钥跟这个login failed提示无关忽略它即可。如果你用的是HTTP方式克隆的IDEA会让你输入账号密码这个提示可能是在这个环节弹出来的。那就需要去仓库的remote地址看看改成一串带token的地址。清掉IDEA里保存的旧密码File → Settings → Appearance Behavior → System Settings → Passwords删掉对应记录重新拉取一次。最简单的保底方案是在Terminal里用Git命令推送绕开IDE的登录态问题。Git客户端本身是不存在“login failed”这种概念的它要么用SSH密钥要么用HTTP凭据管理器顶多弹一个小窗让你输入账号密码输错了会直接报认证失败不会出现API token和GitLab version这种混在一起的玄学报错。5. GUI工具和进阶操作小乌龟、worktree、commit --amendGit装好、基础命令跑通这只能算“能用”。真正提升效率的是那些图形化工具和进阶命令。我观察到很多开发者的日常习惯是IDEA里能点就不敲命令右键能看到小乌龟就不进终端。完全没问题工具本身就是为这个需求存在的。5.1 小乌龟TortoiseGit的安装和配置要点小乌龟的下载官网在tortoisegit.org国内访问速度一般。搜“小乌龟下载”能找到各种下载站但要留个心眼优先选择官网和可信软件站。安装小乌龟前先确认Git已经装好因为小乌龟是依赖Git的GUI外壳它自己不带Git核心。安装过程中会有一个“Select SSH Client”的选项默认是PuTTY的plink.exe我建议选“OpenSSH”——也就是Git自带的SSH客户端。别小看这个选择如果选了PuTTY那你在Gitee/GitHub上添加公钥时就要用PuTTY的puttygen.exe生成PPK格式的密钥否则认证会失败这是个非常经典的坑。安装完成后在Windows资源管理器里右键任意文件夹菜单里会出现“Git 同步”“Git 提交”“TortoiseGit”等选项。小乌龟的核心操作就是右键选择要提交的文件右键 → “Git 提交”填提交信息后点“提交并推送”。它的右键菜单功能几乎覆盖了所有git操作日常用起来非常顺手。另外小乌龟默认会开启图标覆盖overlay icons让文件夹上显示已修改、已暂存等状态图标。但如果你的系统里图标覆盖不生效去TortoiseGit → Settings → Icon Overlays里检查一下Windows对每个文件最多显示15个覆盖图标装了很多网盘类软件时会相互挤占导致部分图标不显示这属于正常现象不影响功能。5.2 git worktree多分支并行开发的利器git worktree是Git 2.15之后引入的功能作用是用同一个仓库同时checkout出多个工作目录。这是个非常实用的场景项目需要做新功能时你在dev分支改到一半突然线上有个bug要紧急修复这时候需要切换回master分支。如果按老办法你得先git stash暂存或git commit保存当前进度再切换分支修bug修完再切回来恢复。用worktree直接给修复分支开一个全新的工作目录互不干扰# 在项目根目录执行修复bug时用 git worktree add ../hotfix -b hotfix/urgent-fix # 切换到那个目录去改代码 cd ../hotfix git add . git commit -m fix: 紧急修复线上bug git push origin hotfix/urgent-fix # 修完回到主项目目录清理不需要的worktree git worktree remove ../hotfix这个命令的本质是同一份仓库数据开出了两个工作副本各自有各自的分支和未提交改动。你不用stash、不用commit半成品两个分支各自安好这是worktree最大的价值。一个限制忘了说同一个分支不能开两个worktree也就是说如果你原目录在master分支新开worktree想再切master是不行的报错信息会直接告诉你branch already checked out。5.3 git commit --amend改提交信息但不建议乱用热搜词里有一条git commit --amend怎么使用这个命令用途有两个修改最近一次提交的提交信息或者把当前暂存区的改动合并到最近一次提交里。使用方法是git commit --amend不带参数时它会打开默认编辑器让你修改提交信息带上-m参数则直接指定新信息git commit --amend -m 新的提交信息如果忘记包含某个文件用git add暂存之后再跑git commit --amend --no-edit就能把新改动补充进上一次提交而且不修改提交信息。但这里有个重要警告amend会改写提交历史。它本质上不是“修改”而是把上一次提交替换成一个新的提交对象提交哈希值会变。如果这个提交已经被你push到了远端其他人也已经pull走了这时候再amend然后强制推送会造成历史分叉别人拉代码会出现一堆奇怪的冲突。所以我的经验是准备push之前发现提交信息写错了或者忘记加文件了放心用amend推送之后才发现就不要amend了老老实实再提交一次写个“fix: xxx”的新commit虽然历史记录里多一条但不会连累队友。6. 进阶过程中容易忽视的两个隐患目录泄露和安装源安全写到这里我想到一个所有装完Git的人都不该忽略的话题跟环境有关也跟安全意识有关。Git本身是一个开发工具但“Git环境”这件事在国内场景下有一些容易被忽视的坑。6.1 .git目录泄露部署不当把源码拱手送人先讲一个真实案例。我有一次帮朋友排查他公司官网的异常访问日志发现有人在请求/.git/config这个路径一看就是扫描器在自动探测。.git目录是Git仓库的核心里面存了所有提交历史、分支信息、配置信息。正常情况下这个目录只存在于开发者的本地机器或服务器上的项目根目录不应该对外网暴露。但如果部署过程中出了差错——比如直接把项目文件夹复制到Web服务器的根目录而没有排除.git目录——攻击者就能通过浏览器访问到.git/config从而下载整个.git目录里的对象文件再用工具还原出完整源码。更可怕的是如果开发者在某个历史提交里把数据库密码、API密钥当成配置文件提交过即使后来在最新版里删掉了攻击者依然可以通过Git历史把那份包含密钥的旧版本扒出来。所以检查自己项目是否正确部署的方法很简单在浏览器里访问https://你的域名/.git/config如果返回的不是403或者404而是一段文本内容说明你的.git目录暴露了必须立即处理。处理方式有几个一是部署时明确排除.git目录很多CI/CD平台比如Gitee Go、Jenkins都有发布前清理的选项二是把Web服务器根目录指到项目的public或dist目录让应用代码和Git元数据物理隔离三是定期检查生产环境的URL入口确认没有敏感路径可以直接访问。这个话题严格来说不属于“安装Git”的范围但它是安装Git之后很多人忽略的安全隐患我认为有必要写出来提醒一句。版本控制工具是你的资产的保管者但也可能成为泄露资产的通道关键在于部署时干不干净。6.2 正规镜像和校验习惯从源头避免供应链风险再回到安装这个主题。国内下载Git绕不开镜像但镜像的选择也有讲究。我前面推荐的阿里云、清华TUNA、腾讯、华为云这几家都是正规大厂或高校维护的基础软件镜像可信度有保障。有些第三方下载站比如那种下载速度非常快、还附带各种“高速下载器”的资源站就非常不推荐。它们的安装包里可能捆绑了推广软件或者干脆就是旧版本旧版本Git的已知漏洞可能直接被利用。判断一个镜像是否可信除了看网站归属还要看它是否提供了哈希校验文件。正规镜像一般会同步官网的*.sha256或*.sha256.txt文件下载完比对一下能对上说明文件没有被改动过。Windows下检验哈希值的命令是certutil -hashfile Git-2.45.2-64-bit.exe SHA256把输出的哈希值和官网上公布的对比一下。如果镜像站没有校验文件那至少对比一下版本号和安装包体积体积跟官网差了几个MB就要警惕了。还有一个容易被忽略的点很多包管理工具也提供了Git安装渠道。比如用winget install --id Git.Git可以自动装最新版Git用choco install git也很多人用。这些工具走的下载源大部分是官方渠道如果它们在国内下载速度慢可以考虑给winget和choco配置代理镜像不过那就是另一个话题了。有经验的用户也可以配置好winget的镜像源后用winget来装Git装出来的环境一样管理起来还方便。我个人实际操作中的体会是安装Git这件事本身很简单——下载、下一步、下一步——难的是安装之后那几次与环境的磨合换行符、SSH密钥、IDE集成、目录泄露意识。这些问题都是“不遇到不知道一遇到就很头疼”的类型。如果你正在看这篇博文说明你也被这些问题折磨过或者准备提前避坑。回到开头那句话Git是一个工具但把它用顺需要的不仅仅是那几条命令这是我在帮同事处理了无数次Git环境问题之后最深的感受。希望这篇内容能帮你少走我走过的那些弯路。
返回列表