ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

TortoiseGit Windows 图形化 Git 操作与报错排查

TortoiseGit Windows 图形化 Git 操作与报错排查 Git 这套版本控制体系在团队协作里几乎是绕不过去的但真正让很多人卡住的并不是分支模型有多复杂而是命令行那一堆参数记不住、拼错一个字母就得重来。TortoiseGit 就是为这类场景准备的——它是 Windows 资源管理器的一个外壳扩展装上之后你的文件夹右键菜单里会多出一整套 Git 操作入口提交、拉取、推送、切换分支全都能用鼠标点出来同时它还会在文件图标上叠加绿色对勾、红色感叹号来告诉你当前文件的状态。这篇内容主要面向三类人刚接触版本控制、被命令行劝退的新手用惯了命令行但想在 Windows 上做一些可视化对比和合并的老手以及需要给团队统一一套操作规范的技术负责人。我会从安装顺序、首次配置、日常高频操作一直讲到那些让人抓狂的报错把踩过的坑和绕过去的办法都摊开说清楚。1. 先搞清楚 TortoiseGit 在协作链条里的位置1.1 图形外壳和命令行的真实分工很多人对 TortoiseGit 有个误解以为装了它就不用装 Git 了这是个非常典型的认知偏差。TortoiseGit 本质上是一个壳它自己不实现任何版本控制逻辑所有实际动作都是它在后台调用git.exe完成的。所以你的机器上必须先有一套完整的 Git for WindowsTortoiseGit 才有东西可以调。这个关系类比一下就清楚了Git 是发动机TortoiseGit 是方向盘和仪表盘你把仪表盘拆下来装到一台没有发动机的车架上它一样不会动。理解这层关系之后很多报错就自动解释通了。比如你最常看到的git.exe 无法识别根源基本都在于 TortoiseGit 找不到那个真正的可执行文件再比如某些操作命令行里能跑通、右键菜单里却失败多半是两者用了不同的配置来源或者不同的 SSH 客户端。我个人的习惯是日常提交、拉取、看日志、解决简单冲突用 TortoiseGit批量操作、脚本化、处理复杂 rebase 的时候回到命令行。两者不是替代关系是互补关系。顺带说一句TortoiseGit 的右键菜单是分层级的一级菜单里是常用的几个动作Git Commit、Git Sync、Git Pull、Git Push、Show Log二级子菜单里才是指向更多操作的入口。刚上手的时候建议先在设置里把菜单项调成自己常用的那几项否则一屏几十条中文菜单能看花眼。1.2 三类人适合用两类人不必勉强第一类是 Windows 上的新手。用鼠标点比记命令快得多而且 TortoiseGit 的提交窗口会把哪些文件改动了哪些是新文件用勾选框的方式列出来不容易漏提交或者误提交。第二类是经常要做代码对比和分支合并的人TortoiseGitMerge 这个可视化合并工具是三路合并里我用过最顺手的之一冲突区块左右中三栏一摆谁改了哪一行一目了然。第三类是需要给团队做操作规范化的人TortoiseGit 的每个动作都能在设置里预置参数团队统一配置之后新同事上手成本会低很多。哪两类不必勉强一是长期在 Linux 或者 macOS 上工作的人这些系统上的图形客户端生态跟 Windows 完全不同硬套 TortoiseGit 的操作思路反而会别扭。二是已经在命令行里形成了肌肉记忆、并且大量使用脚本自动化的人图形界面在这种场景下反而会拖慢节奏毕竟批量处理一百个仓库的时候一个 for 循环比点一百次右键高效得多。还有一个容易忽略的点TortoiseGit 的图标覆盖功能会跟其他云盘客户端打架。Windows 能注册的图标覆盖处理器数量是有上限的如果你的同步盘、压缩软件、网盘客户端也注册了覆盖图标那 TortoiseGit 的绿色对勾很可能就显示不出来。这个问题后面第五章会专门讲怎么排查。2. 安装顺序和环境准备Git for Windows 先落地2.1 为什么 TortoiseGit 不能独立工作再强调一遍这个顺序问题因为它是新手翻车率最高的一环。正确的安装顺序是Git for Windows → TortoiseGit → TortoiseGit 中文语言包。少装第一步第二步装完之后你会发现右键菜单能出来但所有操作都报错语言包的顺序如果颠倒中文界面也可能不生效因为语言包本质上是一个需要被主程序识别的资源文件。Git for Windows 安装包里带的东西比你以为的多除了git.exe还有 Git Bash一个模拟类 Unix 环境的终端、Git GUI官方自带的简易图形界面、以及 OpenSSH 客户端和curl等一堆工具。后面你在 TortoiseGit 里配置远程仓库连接、生成密钥对用的都是 Git for Windows 带过来的这套工具所以它装得完整不完整会直接影响后面的体验。版本选择上我一般建议 Git for Windows 用当前稳定版就行不必刻意追最新也不必用特别老的版本太老的版本可能在处理某些字符集或者大文件时会有问题。TortoiseGit 的版本要跟 Git 的版本大致对得上比如你用的是较新的 TortoiseGit它内部调用 Git 的方式可能依赖较新版本才有的参数。两个都从各自官网下载就行安装包体积都不大。2.2 下载和安装包选择上的几个细节下载的时候注意区分 32 位和 64 位。现在的机器基本都是 64 位直接选 64 位版本。如果你实在分不清在系统设置里看一眼系统类型就知道了。TortoiseGit 还提供单独的语言包下载项这个不用下载安装包主体等你确认主程序跑起来了再回头装语言包也不迟我甚至建议先不装语言包用英文界面把基本流程走通一遍因为大量的中文教程和报错信息在搜索引擎里的原始英文关键词匹配度更高遇到问题更容易搜到答案。安装路径上有个小建议路径里不要带中文和空格。虽然现在的软件对中文路径的支持已经好很多了但 Git 这套工具链里有不少地方会对路径做转义处理中文路径在某些边缘场景下仍然可能出问题。默认的C:\Program Files\Git就挺好别为了整洁特意装到D:\我的软件\版本控制\这种路径下面去。安装类型选择上Git for Windows 会问你用哪个默认编辑器。这个选项很多人随手就选了 Vim结果后面 Git 需要你输入提交信息的时候弹出一个黑框不知道按什么键退出直接卡死在那儿。如果你不熟悉 Vim 的操作强烈建议选 Notepad 或者 VS Code实在没有就选 NanoNano 至少在界面底部会提示你按什么键保存退出。这个选择可以在安装之后用git config --global core.editor改掉但一开始就选对能省不少事。2.3 Git for Windows 安装选项逐条过一遍安装向导里有几页选项是值得停下来看一眼的我按顺序说。第一页是 PATH 环境变量。这里三个选项分别是仅 Git Bash 内可用从命令行和第三方软件中使用 Git推荐使用 Windows 默认终端。选中间那个它会把 Git 的命令目录加进系统 PATH这样你在 PowerShell 或者 CMD 里敲git --version才有反应。很多人后面遇到git 不是内部或外部命令就是因为这里选了第一项或者装完之后没重启终端导致环境变量没刷新。第二页是换行符处理。Windows 用 CRLFLinux 和 macOS 用 LF这个差异会让 Git 误以为整个文件都被修改过。三个选项里我一般选Checkout Windows-style, commit Unix-style line endings也就是core.autocrlftrue。这个配置的效果是文件落到你硬盘上的时候是 CRLFWindows 编辑器打开不会出现整篇挤在一行的情况提交到仓库的时候自动转成 LF。如果你的团队里全是 Windows 机器、而且没人用脚本处理这些文本文件那选不转换也问题不大但只要涉及跨平台协作就得统一。第三页是终端模拟器选择用 MinTTY 就行。第四页是凭证管理器的选择现在默认就是Git Credential Manager它能把你的账号密码或者令牌存到 Windows 凭据管理器里不用每次推送都输一遍。这一项一定要勾上后面免密推送靠的就是它。剩下几页关于文件系统缓存和符号链接的选项保持默认即可。装完之后打开一个新的终端窗口敲git --version能打印出版本号说明这一步彻底完成了。3. 首次配置语言包、git.exe 路径与身份信息3.1 中文语言包装了但界面还是英文语言包装完之后不生效这是搜索量特别高的一个问题原因基本集中在三个地方。最常见的是装完语言包没有去设置里切换。语言包只是把中文资源文件拷贝到了 TortoiseGit 的安装目录下的 Languages 文件夹里具体用哪个语言还是要在主程序里选。路径是随便找个文件夹右键 → TortoiseGit → Settings → 左侧 General → 右侧 Language 下拉框 → 选中文简体。改完之后要点 Apply 然后 OK而且必须重启一次资源管理器或者注销重登因为右键菜单的文本是资源管理器加载的它不会实时刷新。第二种情况是语言包版本和主程序版本对不上。TortoiseGit 的语言包是跟主程序版本号严格对应的你装了 2.15 的主程序却装了 2.13 的语言包那资源文件加载就会失败表现就是下拉框里根本没有中文这个选项或者选了之后菜单还是英文。解决办法就是回到官网找到跟你主程序版本号一致的那个语言包重新下载。第三种比较少见是权限问题导致语言文件没写进去。如果你把 TortoiseGit 装在了C:\Program Files下面而安装语言包的时候没有用管理员权限运行文件可能只写到了一个虚拟化目录里主程序读不到。这种时候用管理员身份重新装一遍语言包就行。如果以上都排查过了还是不行还有个粗暴但有效的办法直接在 TortoiseGit 的安装目录里手动建一个 Languages 文件夹把语言包里的.po或者.qm文件复制进去然后重启。我遇到过几次自动安装路径识别错误的情况手动放反而最稳。3.2 configure git.exe 无法识别 git.exe path 的三种成因这个报错的原话一般是 TortoiseGit 弹窗提示找不到git.exe或者在设置页里那个路径栏是空的、填了也不认。三种常见成因按概率排一下。第一种Git for Windows 确实没装或者装到了一个 TortoiseGit 猜不到的位置。TortoiseGit 的自动探测逻辑是去找注册表里记录的 Git 安装路径以及几个默认位置。如果你装 Git 的时候手滑改到了一个很偏的目录它可能探测不到。这时候手动填路径就好但填哪个目录有讲究要填到bin目录也就是C:\Program Files\Git\bin让它找到bin\git.exe。如果你填的是cmd目录下的那个git.exe功能上也能用但每次执行操作都会弹出一个黑色的命令行窗口闪一下体验很差因为cmd\git.exe是一个包装脚本而不是真正的可执行文件。第二种Git 装了但没加进 PATH也就是前面 2.3 里说的那个选项选错了。这种情况下 TortoiseGit 的自动探测也会失败你可以在设置里手动指路径绕过去但更彻底的做法是重新跑一遍 Git for Windows 的安装程序选上那个从命令行和第三方软件中使用 Git的选项。第三个原因比较隐蔽路径里有中文、空格或者特殊字符。TortoiseGit 在调用外部程序时对路径的转义处理并不总是完美C:\Program Files里的空格它一般能处理但中文目录名就未必了。这也是我前面建议安装路径别用中文的原因。配置的位置在Settings → General → 右侧的 Git.exe Path 一栏。填完点一下 Check now如果弹出来一个版本号信息框就说明通了。3.3 用户名邮箱和免密凭证的一次性配置user.name和user.email这两个配置看着不起眼但它是你每一次提交的身份标识配错了会导致提交记录里作者信息混乱后面想改很麻烦。配置入口有两处一是在 TortoiseGit 的 Settings → Git 页里直接填Name和Email它会写到全局配置里二是直接在命令行里执行git config --global user.name 你的名字和git config --global user.email 你的邮箱。两者效果一样改的是同一个文件。git config --global user.name Zhang San git config --global user.email zhangsanexample.com git config --global core.autocrlf true git config --global credential.helper manager注意邮箱建议用你代码托管平台上账号绑定的那个邮箱这样提交记录才能正确关联到你的账号头像和贡献统计上。用公司内部邮箱还是个人邮箱问题不大关键是团队内部统一。免密这部分HTTPS 方式靠的是 Git Credential Manager第一次推送的时候输一次账号密码现在很多平台要求用访问令牌而不是登录密码之后它就存在 Windows 凭据管理器里了。如果你想清掉重新输去控制面板的凭据管理器 → Windows 凭据里找到对应的条目删掉即可。SSH 方式稍微麻烦一点但它的好处是不受令牌过期影响。流程是用 Git Bash 执行ssh-keygen -t ed25519 -C 你的邮箱生成密钥对一路回车然后在C:\Users\你的用户名\.ssh\下会得到id_ed25519和id_ed25519.pub两个文件。用记事本打开.pub那个把里面的全部内容复制出来粘贴到托管平台的 SSH 公钥设置页面里。Gitee 和 GitHub 的配置入口都在个人设置的安全设置或者SSH 公钥分类下粘贴完保存就行。TortoiseGit 这里有个坑它默认可能使用自带的TortoiseGitPlink作为 SSH 客户端而这个客户端读的密钥格式跟 OpenSSH 生成的略有差异。如果你配好了公钥却一直提示认证失败去 Settings → Network → SSH client 里把客户端路径改成 Git 自带的 OpenSSH也就是指向C:\Program Files\Git\usr\bin\ssh.exe。改完再试一次基本就通了。4. 日常高频操作全流程实操4.1 克隆仓库和目录第一次变绿克隆的入口在右键菜单的Git Clone...。弹窗里要填三样东西仓库地址URL、本地目录Directory、以及分支Branch一般留空表示默认分支。URL 有 HTTPS 和 SSH 两种形式如果你已经配好了公钥就用 SSH 的没配就用 HTTPS 加凭证管理器。点 OK 之后它会显示一个进度窗口传输完成会提示成功然后你打开那个目录里面的文件图标应该就开始出现绿色对勾了。这里有个细节值得说图标不是瞬间出现的。TortoiseGit 需要扫描目录状态首次扫描会比较慢尤其是仓库文件多的时候。如果五分钟过去了图标还是普通样式那就要去查图标覆盖的设置不是它坏了是没显示出来。克隆下来的目录里会有一个隐藏的.git文件夹这里面装着完整的版本历史、分支引用、配置和对象数据库。这个目录千万不要手动删改里面的任何文件很多人硬盘空间紧张想去清理它删完之后整个仓库就废了你本地那些已经提交的东西也一起没了因为工作区里的文件只是某个版本的快照真正的历史全在.git里。想清理空间应该用 Git 自己的垃圾回收命令而不是手动删。4.2 提交、推送、拉取这条链路怎么走才不出错日常的循环是三步拉取、修改、提交推送。TortoiseGit 里对应的操作是Git Pull→ 改文件 →Git Commit→Git Push。很多人省掉第一步结果推送的时候被拒绝提示远端有你没有的提交只能被迫做一次合并多出一堆麻烦。提交的正确姿势右键选Git Commit - 当前分支名弹出的窗口上半部分是改动文件列表每个文件前面的勾选框决定是否纳入本次提交。双击某个文件可以看具体的行级差异这个功能比命令行的git diff直观太多。下半部分是提交信息输入框写清楚这次改了什么、为什么改一句话说清。写完之后点 Commit 是提交到本地这时候界面上可能出现Commit and Push按钮点了它就会把你本地的提交直接推到远端。推送失败最常见的两种情况一是远端有新提交解决办法是先拉取再推送二是没权限这时候会弹认证窗口检查账号是否属于该仓库的协作成员。如果远端是受保护的默认分支还可能直接禁止推送需要走合并请求的流程。拉取的注意事项TortoiseGit 的Git Pull默认行为在不同版本里不太一样有的是拉取后自动合并有的是拉取后弹出合并窗口让你确认。我建议在 Settings → Git 里把拉取行为明确设成拉取后如果无法快进就弹窗口这样你能在合并前看到冲突情况而不是糊里糊涂产生一个自动合并提交。另外如果你本地有未提交的改动拉取可能会失败或者产生混乱动手拉之前先把改动提交或者暂存起来。4.3 切换分支、新建分支和冲突处理切换分支的入口是右键菜单里的TortoiseGit → Switch/Checkout。这个窗口有个Branch下拉框列出所有本地和远程分支选一个点 OK 就切过去了。下面有个勾选项叫Create New Branch需要新建分支的时候勾上它在 Branch 框里输入新分支名它会创建并直接切过去。有个容易被忽略的地方切换分支前要保证工作区干净。如果当前分支有未提交的改动切换可能会失败或者把改动带到新分支上去搞出一堆莫名其妙的差异。TortoiseGit 在检测到这种情况时一般会提示你但它的提示不一定醒目很容易点是然后糊里糊涂过去。养成习惯切分支之前先看一眼有没有红色感叹号的文件。冲突处理是 TortoiseGit 最出彩的地方。当拉取或者合并产生冲突时冲突文件会带上特殊的图标提示右键点那个文件选择Edit conflicts会弹出三路合并工具。窗口大致分成三栏左边是我的版本右边是对方的版本中间是合并结果。每一处冲突区块上方都有按钮让你选择采用左边、采用右边、或者两个都保留。逐块处理完之后保存回到主窗口标记为已解决然后提交这次合并。整个过程可视化的好处是你能明确看到每一处冲突的来龙去脉不会像命令行那样用一堆尖括号标记把自己看晕。注意合并冲突时不要图省事全选采用我的版本那等于把别人的改动全丢了。也不要在没看懂对方意图的情况下直接删某一方的内容。遇到不确定的地方先把两边都保留下来提交前找同事确认一下比事后回滚便宜得多。4.4 修改历史提交、撤销操作和误删恢复修改最近一次提交在Git Commit窗口里勾选右下角的 Amend 选项这时候提交信息框里会填上最近一次提交的内容你可以改信息也可以顺便把新改动的文件勾上一起合并到那次提交里。这个操作本质上是把上一次提交从历史里拆掉、用新内容重新提交一遍所以只对还没推送出去的提交用。已经推送到远端公共分支的提交再 amend会导致本地和远端历史不一致下次推送必然冲突。撤销某次提交的改动在Show Log窗口里找到那次提交右键 →Revert change by this commit。这个操作不是从历史里删掉它而是新生成一次反向提交把那次改动抵消掉。这是处理已经推送出去的提交的标准做法历史记录保持完整可追溯。撤销本地未提交的改动右键文件 →TortoiseGit → Revert会弹窗问你要恢复哪些文件确认之后文件回到上次提交时的状态改动就没了。这个操作不可撤销动手前想清楚。恢复被删掉的文件如果是已经提交过、后来被删的在Show Log里找到删除之前的那次提交右键那个文件 →Revert change by this commit或者用Save revision to...把它另存出来再放回去。如果文件从来没提交过就被删了那 Git 无能为力只能靠系统回收站或者备份。误删了分支本地分支删掉之后只要提交对象还在可以用git reflog找到那个提交的哈希值然后git branch 分支名 哈希值把它拉回来。命令行操作TortoiseGit 里没有直接入口。这也是我一直说两者要配合用的原因图形界面覆盖 90% 的日常剩下 10% 的救火还得靠命令行。5. 疑难杂症和报错速查5.1 git 不是内部或外部命令也不是可运行的程序这个报错的完整形态有好几种在 CMD 里是不是内部或外部命令在 PowerShell 里是无法将git项识别为 cmdlet、函数、脚本文件或可运行程序的名称。本质都是同一个问题系统在 PATH 里找不到git.exe。排查顺序按这个来先确认 Git for Windows 到底装没装去C:\Program Files\Git\bin下面看一眼有没有git.exe有就说明装好了。然后确认 PATH 里有没有这个目录命令行里敲echo $env:PATHPowerShell或者echo %PATH%CMD看看输出里是否包含 Git 的 bin 目录。没有的话去系统环境变量里手动加一条路径指向C:\Program Files\Git\bin。还有一个非常常见的原因是装了之后没重开终端。环境变量的修改对已经打开的终端窗口是不生效的必须关掉重新开。我见过有人排查了半小时最后发现只是窗口没关。极端情况下PATH 加对了、目录里也有git.exe但还是报错那可能是系统里有另一个同名的程序抢先被匹配到了。用where git命令能列出所有匹配到的路径看看第一个是不是你预期的那一个。5.2 那一长串-c diff.mnemonicprefixfalse到底是什么经常有人在 TortoiseGit 的执行日志或者弹出的命令预览里看到这么一长串git -c diff.mnemonicprefixfalse -c core.quotepathfalse --no-optional-locks status -uall --porcelain不少人以为是中病毒了或者软件出问题了。其实这几个参数的作用都很明确参数作用不加会怎样-c diff.mnemonicprefixfalse让差异输出统一用前缀标识不同操作会输出不同前缀解析结果不稳定-c core.quotepathfalse中文文件名直接显示不做八进制转义中文文件名显示成一串\346\226\207这样的编码--no-optional-locks执行只读操作时不尝试抢占索引锁后台状态扫描可能跟你的提交操作抢锁导致操作失败--porcelain输出机器可解析的稳定格式人类可读格式会随版本变化程序解析容易出错这几个参数是 TortoiseGit 为了稳定解析 Git 的输出而临时加上的只对当次调用生效不会写进你的配置文件。所以看到它们完全不用担心也不要手动去改。相反如果你自己在写脚本解析 Git 输出完全可以照抄这套参数尤其是core.quotepathfalse这一条能省掉大量处理中文文件名的麻烦。5.3 凭证反复弹窗和认证失败的排查HTTPS 方式反复弹窗说明凭证没有被正确保存。检查git config --global credential.helper的输出应该是manager或者manager-core。如果输出是空的说明凭证管理器没配上手动设一下就行。如果配上了还弹窗去控制面板的凭据管理器里看看是不是存了多条冲突的记录全删掉重新输一次。SSH 方式认证失败先确认公钥确实粘贴到了托管平台上而且粘贴的是.pub文件的内容不是另一个没有后缀的私钥文件——这个错误非常高频私钥泄露出去是有安全风险的粘贴前务必看清楚文件名。然后确认 TortoiseGit 用的 SSH 客户端是不是 OpenSSH前面 3.3 讲过路径改成C:\Program Files\Git\usr\bin\ssh.exe。推送提示权限不足先去平台上确认账号在仓库里的角色。如果你的账号是通过团队加入的可能只有读权限。另外有些平台的默认分支开启了保护任何人不允许直接推送只能走合并请求。还有一个跟账号无关的原因仓库地址本身填错了比如把别人的仓库地址复制过来了或者组织名拼错了。这种情况一般报的是仓库不存在而不是权限不足但两者有时候会混在一起提示排查的时候顺手核对一下地址。5.4 图标覆盖不显示和状态刷新慢图标是 TortoiseGit 最直观的价值之一但也是问题最多的功能。图标完全不显示最可能的原因是 Windows 的图标覆盖处理器数量被占满了。系统对能注册覆盖图标的程序数量是有限制的先注册的优先。如果 OneDrive、坚果云、压缩软件已经占满了名额TortoiseGit 的注册就会失败。检测方法是在注册表里搜ShellIconOverlayIdentifiers这个路径你看看里面有多少条目、排在前面的都是谁。TortoiseGit 开头的条目一般是一个空格加名字就是为了排到前面去如果还是排在很后面可以手动给它的名字前面多加几个空格把优先级提上去然后重启资源管理器。图标显示但状态更新很慢或者你明明改了文件图标还是绿的这是缓存策略的问题。去 Settings → Icon Overlays → Status Cache 里把它调成Default或者None。None的意思是每次刷新都实时扫描最准但最慢Default是折中。如果仓库特别大你可以在同一个页面里配置排除目录把编译产物、依赖包这些不需要监控的目录排除掉扫描速度会快很多。图标显示成灰色的问号说明这个文件是被忽略或者未跟踪。如果它是你应该提交的文件检查.gitignore是不是写得太宽了误伤了它。如果确实该忽略那这个状态就是正常的。6. 协作习惯和仓库安全防护6.1.git目录意外暴露的防护这是一个安全层面的问题值得单独拎出来讲。前面说过.git目录里装着完整的版本历史包括所有历史版本的文件内容、提交者信息、甚至曾经被提交过又删掉的敏感内容。如果这个目录在你部署网站的时候被一起传到了公网可访问的目录下并且服务器没有做访问限制那么只要有人访问.git/config这类路径就能确认这个目录的存在进而还原出整个项目的源代码和历史记录。防护措施分两块。部署侧打包部署产物的时候要排除.git目录不管是手动打包还是脚本打包都加一条排除规则。用 Git 自身的导出命令git archive打包它天然不会包含.git目录比手动复制文件安全得多。服务器侧在 Web 服务器的配置里显式拒绝访问以点开头的目录。Nginx 里加一条针对隐藏目录的拒绝规则Apache 里限制.htaccess和.git目录的访问权限。同时在项目根目录放一个.gitignore把日志、配置文件、密钥文件这些不该进仓库的东西挡在外面。如果已经发生了暴露光加访问限制是不够的因为历史已经泄露出去了必须把敏感信息从整个历史里清除掉并且强制推送覆盖同时轮换所有可能泄露的凭证。提示检查一下你的项目根目录有没有把数据库配置文件、云服务密钥、内部接口地址这类东西提交进去。这类文件一旦进了仓库历史即便后来删掉了历史记录里依然能翻出来。6.2.gitignore的写法和仓库瘦身.gitignore的写法看着简单实际有坑。基本语法是每行一条匹配规则#开头是注释/开头表示从仓库根目录开始匹配否则会匹配到任意层级的同名目录*是通配符!开头表示排除某条规则的反向操作。最容易出错的是!的用法。它的逻辑是取消前面已经忽略的规则但有个限制如果某个目录整体被忽略了那么目录里的文件就不能再用!单独放出来。举个例子你写了build/然后又写!build/keep.md这个keep.md是不生效的因为整个目录都被排除了Git 根本不去看它里面的内容。正确写法是先排除再逐项放回# 忽略整个构建目录 build/* # 但保留这个说明文件 !build/keep.md仓库瘦身是另一个实际需求。仓库变大通常是三种原因提交了大体积的二进制文件、反复提交同一批大文件导致历史里堆了很多份、或者引入了体积很大的依赖目录。第一种和第三种好处理把该忽略的加进.gitignore然后用git rm --cached把已经进仓库的从索引里移除但保留本地文件。第二种才是麻烦的因为历史里每一份副本都还在仓库体积不会因为你现在删掉了就变小需要重写历史才能彻底清理这个操作影响面很大团队协作的仓库做之前必须通知所有人。定期做一次垃圾回收也有帮助git gc会把松散的对象打包压缩清理掉不可达的对象。对普通项目这个操作自动就会触发不用太操心。7. 一些长期用下来形成的习惯用了这些年下来有几个习惯我觉得很值。第一个是提交前一定看一遍差异。TortoiseGit 提交窗口里双击文件就能看行级对比花十秒钟扫一眼能避免九成的提交了不该提交的东西。特别是配置文件里夹带的本地调试参数这种东西进了主分支再发现就麻烦了。第二个是提交信息写清楚为什么而不是做了什么。代码本身已经说明做了什么提交信息里再写修改了登录逻辑其实信息量很低。写成修复登录超时后没有清理本地缓存导致的下次登录失败半年后回头看才知道当时在解决什么问题。第三个是给 TortoiseGit 的执行窗口做设置。默认情况下它执行某些命令会弹一个命令行黑框一闪而过虽然不影响结果但很影响观感。在 Settings 的 Dialogs 相关配置里可以调整这些窗口的显示方式把常用操作设成始终显示进度对话框出问题的时候能看到具体执行的命令排查起来方便很多。第四个是定期备份未推送的本地提交。本地提交在推送之前只存在于你的硬盘上硬盘坏了就全没了。我现在养成的习惯是每天收工前把所有分支的本地提交都推到一个自己的备份分支上哪怕是个临时的分支名也行成本很低但真出事的时候能救命。第五个是关于学习路径的先把 TortoiseGit 的日常操作跑熟再回头补命令行的基础。原因很实际图形界面能让你在没有心理负担的情况下快速建立起对提交、分支、合并这些概念的直觉等你对我现在的操作在版本图上处于什么位置有了感觉再去理解reset、rebase、cherry-pick这些命令就轻松多了。反过来先啃命令很容易记住语法但不知道什么时候该用哪个。我自己就是这么过来的先点了小半年右键菜单某天突然发现那些命令的意义全都自然通了。
返回列表