当前位置: 首页 > article >正文

每天一个小技能——GitHub入门

GitHub简介什么是GitHub及其核心功能GitHub 基于 Git 的代码托管 协作开发平台。程序员的 “云端代码网盘 协作工作台 项目社区”。核心功能代码托管把项目代码存在云端版本管理记录每一次修改可回滚、可对比团队协作多人一起开发同一个项目Issue任务 / BUG 管理提需求、报 bug、分配任务Pull RequestPR提交代码改动让别人审核后合并GitHub Actions自动化测试CI\CD、打包、部署GitHub Pages免费搭建静态网站Star / Fork / Watch收藏、复制、关注别人项目GitHub与Git的关系与区别GitHub是云端服务用来存放 Git 仓库提供网页界面、协作、权限、社区必须联网Git是本地版本控制软件命令行 / 桌面工具记录代码历史、分支、合并不需要联网也能用关系GitHub 底层使用 Git你在本地用 Git 写代码 → push 到 GitHubGitHub 让 Git 从 “本地” 变成 “云端 协作”最简单区别Git 是工具GitHub 是平台。Git 版本控制工具GitHub 代码托管与协作平台下图直观展示了 Git 与 GitHub 的定位和协作关系GitHub在软件开发中的价值代码安全备份本地电脑坏了也不怕多人协作开发分工写代码不互相覆盖规范化开发流程提交 → 审核 → 合并 → 发布开源共享全球开发者一起贡献项目降低团队沟通成本代码、文档、任务都在一处自动化 CI/CD自动测试、自动部署个人 / 企业简历展示GitHub 就是程序员的作品集账号注册与SSH配置账号注册流程用户名、邮箱、密码设置国内QQ邮箱 网易邮箱、国外谷歌邮箱、苹果账号git基础配置下载git工具Git - Install for Windows打开git bash全局配置用户名和邮箱# 配置用户名替换成你的比如 zhangsan123git config--global user.nameYour GitHub Username# 配置邮箱替换成你的比如 zhangsanxxx.comgit config--global user.emailYour GitHub Email#例如我的git config--global user.nameqing********git config--global user.email194********qq.com局部配置用户名和邮箱# 进入具体的项目路径下cd /path/to/your/project# 配置用户名替换成你的比如 zhangsan123git config user.nameYour GitHub Username# 配置邮箱替换成你的比如 zhangsanxxx.comgit config user.emailYour GitHub Email#例如我的git config user.nameqing********git config user.email194********qq.com查看已经配置的内容# 全局配置查看git config--list# 或者git config-l#查看完成后如下图输入q快速退出局部配置查看查看当前仓库的局部配置进入仓库目录后执行git config --local --list- 可选配置好用、好看^ - ^ powershell # 开启彩色输出 git config --global color.ui auto # 扩大缓冲区 git config --global http.postBuffer 524288000 # 配置换行符规则 git config --global core.autocrlf true # 配置简写 和linux在bashrc中配置别名一样 git config --global alias.st status # git st 替代 git status git config --global alias.br branch # git br 替代 git branch修改已存在配置# 清空配置git config--global--unset user.email# 修改配置 直接重新输入命令覆盖即可ssh配置为了让本地 Git 和 GitHub 之间的通信更安全、更方便彻底摆脱每次操作都要输入账号密码的麻烦。HTTPS 方式的本质是 “用账号密码验证身份” 如果你的密码泄露别人就能操作你的仓库。而 SSH 是基于 “密钥对” 验证。下图展示了 SSH 配置的完整 6 步流程检查是否已有 SSH 密钥# 下载git后 搜索打开git bashls-al ~/.ssh生成新的ssh密钥执行下面的命令把邮箱换成你 GitHub 注册的邮箱ssh-keygen-t rsa-b 4096-Cyour_emailexample.com# 或者 这个格式ssh-keygen-t ed25519-Cyour_emailexample.com执行后终端会出现提示全程按「回车」即可不用输入任何内容第一步提示「Enter file in which to save the key」回车用默认路径第二步提示「Enter passphrase」回车设置密码的话每次用 SSH 都要输新手直接免密第三步提示「Enter same passphrase again」再回车。私钥~/.ssh/id_rsa或者~/.ssh/id_ed25519绝对不能泄露泄露后私钥会失效公钥~/.ssh/id_rsa.pub或者~/.ssh/id_ed25519.pub等下要复制到 GitHub。启动ssh代理# 启动 SSH 代理eval$(ssh-agent-s)# 将私钥添加到代理中ssh-add ~/.ssh/id_rsa or ssh-add ~/.ssh/id_ed25519#注意git bash中的引号要用英文的双引,不要用单引号把公钥复制到 GitHub复制公钥内容先把公钥文件里的内容全选复制不同系统命令不同# Windows (git bash)clip ~/.ssh/id_rsa.pub or clip ~/.ssh/id_ed25519.pub# Linuxxclip-sel clip ~/.ssh/id_rsa.pub or xclip-sel clip ~/.ssh/id_ed25519.pub# macospbcopy ~/.ssh/id_rsa.pub or pbcopy ~/.ssh/id_ed25519.pub登录 GitHub 粘贴公钥点击右上角的头像→ 选择「Settings」设置在左侧菜单栏找到「SSH and GPG keys」SSH 和 GPG 密钥点击右上角的「New SSH key」新建 SSH 密钥填信息Title随便填比如「我的笔记本电脑」方便识别是哪台设备Key type默认「Authentication Key」就行Key把刚才复制的公钥内容粘贴进去直接 CtrlV点击「Add SSH key」添加 SSH 密钥弹出验证密码的提示输入你的 GitHub 密码确认即可。验证 SSH 是否配置成功回到终端git bash执行命令ssh-T gitgithub.com第一次执行会提示「Are you sure you want to continue connecting」输入yes回车。成功后终端会显示Hi 用户名! You have successfully authenticated, but GitHub does not provide shell access.如果失败常见原因公钥复制错了比如少复制了最后一行或多了空格生成密钥时用的邮箱和 GitHub 不一致私钥没添加到 SSH 代理重新执行ssh-add ~/.ssh/id_rsa。端口放行问题# 例如LEGIONLAPTOP-NPHPG1HU MINGW64 ~ $ssh-Tgitgithub.com ssh: connect tohostgithub.com port22: Connection refused# 在config文件中指定端口为443即可。Host github.com HostName ssh.github.com Port443Usergitconfig文件在C盘下user/用户/.ssh下.ssh是隐藏文件需要你显示出来。解决方法1查看home路径是否正确echo$HOME#示例输出 /c/Users/***强制指定密钥进行连接测试# 请将路径替换为你实际的绝对路径ssh-i/c/Users/xxx/.ssh/id_ed25519-Tgitgithub.com orssh-i/c/Users/xxx/.ssh/id_rsa-Tgitgithub.com解决方法2在大模型中输入你的报错信息即可大概率会因为配置文件的原因跟着来即可。后续克隆项目选择 ssh版本即可# 例如git clone gitgithub.com:PLAYEROFMYLIFE/gitdir.git仓库创建与基本代码提交下图展示了从本地初始化到推送至 GitHub 的完整流程从本地开始追踪一个项目到GitHub进入本地项目文件夹初始化 Git 仓库(使用git bash)# 进入具体的项目文件夹 默认在c盘cdD:cdlearngit/# 初始化git仓库 会生成一个.git隐藏文件夹# 指定默认分支为 main和 GitHub 一致gitinit --initial-branchmain执行后终端提示Initialized empty Git repository in ...说明初始化成功。将本地所有文件添加到暂存区完成第一次提交# 创建.gitignore 文件(用于忽略一些不需要追踪或上传的文件)touch.gitignore# 把文件夹里所有文件添加到 Git 暂存区. 代表所有文件gitadd.# 提交暂存区的文件到本地仓库-m 后是提交说明必填写清楚这次提交的内容gitcommit-mfirst commit ^_^在 GitHub 上创建一个空的远程仓库这一步是给你的项目在 GitHub 上 “建个空文件夹”用来接收本地代码打开 GitHub 官网点击右上角「」号 → 选择「New repository」新建仓库填写仓库信息Repository name仓库名必须和本地项目文件夹名一致比如my-project方便识别Description可选项目描述比如「我的第一个 Python 项目」Visibility选「Public」公开或「Private」私有免费版也支持❗ 重点不要勾选「Add a README file」「Add .gitignore」「Choose a license」这些会导致远程仓库非空后续推送冲突点击「Create repository」创建仓库。创建完成后GitHub 会跳转到仓库页面显示仓库的 SSH 地址比如gitgithub.com:你的用户名/my-project.git先复制这个地址后面要用。关联本地仓库和 GitHub 远程仓库后续可以根据图上提示操作回到终端执行命令把本地仓库和刚创建的 GitHub 仓库绑定# 添加远程仓库origin 是远程仓库的别名默认用 origin 即可不用改# 替换成你刚复制的 GitHub SSH 地址gitremoteaddorigin gitgithub.com:PLAYEROFMYLIFE/learngit.git# 验证是否关联成功可选gitremote-v将本地代码推送到 GitHub# 把本地 main 分支推送到 origin远程仓库的 main 分支# -u 是绑定默认推送分支后续只需 git push 即可不用重复写分支名gitpush --set-upstream origin main打开github 验证即可。从仓库开始追踪一个项目打开github仓库克隆仓库到本地# 改成具体名字git clone gitgithub.com:PLAYEROFMYLIFE/learngit.git本地修改文件并提交# 查看修改状态git status# 添加修改到暂存区git add filename# 提交修改到本地仓库git commit-mmodify commit# 推送到远程仓库git push origin main注.idea/ 是 IDEA 的配置文件夹不建议提交到 GitHub 上。可以在项目根目录新建 .gitignore 文件写入下面的引用。然后再执行上图内容。.idea/*.imllearning/实践任务创建名为my-first-repo的个人仓库在本地仓库并添加一个名为hello-world.txt的新文件提交修改并推送到GitHubGit分支与版本控制分支管理策略、合并冲突解决、提交规范分支管理基础分支的概念与作用分支能让你在不影响主代码的前提下独立开发新功能、修复 Bug最后再把改动合并回去。GitHub Flow是一种轻量级的分支策略其核心是主分支main/master始终处于可部署状态所有新功能都在短期存在的功能分支上开发完成后通过Pull Request合并回主分支。分支的概念假设你在写一篇论文对应「主分支 main」你想加一个新章节但又怕写砸了影响已完成的内容 → 复制一份论文在副本上写新章节这就是「新建分支 feature - 新章节」写新章节时发现原论文有个错别字 → 切回原论文改错别字「切回 main 分支修复 Bug」新章节写完且没问题 → 把副本的内容合并回原论文「合并 feature 分支到 main 分支」。Git 分支的本质就是对代码库的一份 “独立快照”分支之间互不干扰你可以在任意分支上修改代码不会影响其他分支。main 分支A → B → C → D稳定的主代码 ↘ feature 分支 E → F → G开发新功能的代码 merge 后分支A → B → C → D → G核心作用隔离开发避免代码混乱最核心作用这是分支最根本的价值主分支main/master存放稳定、可发布的代码比如上线的产品代码绝对不能直接在上面改代码功能分支feature/*开发新功能比如「feature - 支付功能」「feature - 用户登录」Bug 修复分支bugfix/*/hotfix/*修复线上 Bughotfix 是紧急修复直接基于 main 分支测试分支test/dev用于测试未上线的功能。就算你在 feature 分支把代码改烂了main 分支的稳定代码也毫发无损不会影响团队其他人。支持多人并行开发团队协作时每个人都可以在自己的分支上开发你开发「支付功能」→ 分支feature-pay同事开发「评论功能」→ 分支feature-comment互不干扰开发完成后各自合并到主分支避免多人改同一文件导致的冲突。常用分支介绍分支类型命名规范用途主分支main或master存放稳定、可发布的代码核心分支开发分支dev/或develop/团队日常开发的分支所有功能先合到这功能分支feature/xxx开发单个新功能比如 feature-loginBug 修复分支bugfix/xxx修复开发中的 Bug紧急修复分支hotfix/xxx修复线上已发布版本的紧急 Bug分支的核心操作# 1. 查看所有分支* 表示当前所在分支gitbranch# 2. 新建分支比如新建 feature-login 分支gitbranch feature/login# 3. 切换到新建的分支gitcheckout/switch feature-login# 简写新建切换一步到位最常用gitcheckout-bfeature-login orgitswitch-cfeature-login# 4. 把 feature-login 分支合并到 main 分支先切回 maingitcheckout/switch maingitmerge feature-login# 5. 删除已合并的分支开发完成后清理gitbranch-dfeature-login合并分支解决冲突什么时候会触发合并冲突冲突的核心原因是两个不同的分支修改了同一个文件的同一行 / 同一部分代码Git 不知道该保留哪一个版本只能暂停合并等你手动决策。下图展示了分支创建、冲突触发与解决的完整流程常见场景场景 1多人改同一文件你在feature-login分支改了user.js的第 10 行同事在main分支也改了user.js的第 10 行你把feature-login合并到main时触发冲突。场景 2自己在不同分支改同一文件你在feature-pay分支改了config.js的配置又在bugfix-pay分支改了config.js同一处配置合并两个分支时触发冲突。场景 3分支长期未合并主分支已更新你的feature分支基于 1 个月前的main分支创建期间main分支的核心文件已被多次修改你合并时大量文件因内容差异触发冲突。创建测试目录和初始 Python 文件先搭建一个干净的 Git 仓库创建基础 Python 文件# 1. 创建测试文件夹并进入mkdirlearningcdlearning# 2. 初始化 Git 仓库指定 main 分支gitinit --initial-branchmain# 3. 创建一个 Python 文件功能计算两个数的和touchcalculator.py编辑calculator文件# calculator.py - 初始版本defadd(a,b):计算两个数的和resultabreturnresult# 测试代码if__name____main__:print(计算结果,add(10,20))提交代码到main分支# 1. 添加文件到暂存区gitaddcalculator.py# 2. 提交代码第一次提交gitcommit-m初始化添加加法函数创建 feature 分支并修改代码gitcheckout-bfeature-add-tax修改caculator.py# calculator.py - feature 分支版本def add(a, b):计算两个数的和含10%税费 result(a b)*1.1# 核心修改加了税费计算returnresult# 测试代码if__name____main__:print(计算结果含税费, add(10,20))提交feature 分支的修改gitaddcalculator.pygitcommit-mfeature分支加法函数增加税费计算切换回main分支gitcheckout/switch main修改calculator.py同样修改add函数的核心计算行和 feature 分支改了同一行# calculator.py - main 分支版本def add(a, b):计算两个数的和四舍五入 resultround(a b,2)# 核心修改四舍五入和 feature 分支冲突returnresult# 测试代码if__name____main__:print(计算结果四舍五入, add(10,20))提交 main 分支的修改gitaddcalculator.pygitcommit-mmain分支加法函数增加四舍五入合并分支触发冲突现在尝试把 feature 分支合并到 main 分支因为两个分支修改了calculator.py的同一行result ...会直接触发冲突gitmerge feature-add-tax冲突提示查看冲突后的 Python 文件打开calculator.py会看到 Git 插入的冲突标记核心冲突部分如下手动解决冲突解决思路融合需求既加税费又四舍五入修改冲突文件删除标记合并逻辑# calculator.py - 解决冲突后的版本def add(a, b):计算两个数的和含10%税费四舍五入 resultround((ab)*1.1,2)# 融合两个分支的逻辑 return result # 测试代码 if __name____main__:print(计算结果含税费四舍五入,add(10,20))# 预期输出33.0在github网站上Pull Request 可视化操作更建议方便。需要现在本地进行先执行merge一下。# 确保在main分支gitswitch main# 合并gitmerge feature-add-tax然后可以看见github上有pr然后创建一个pr请求手动解决冲突然后合并分支删除分支在本地执行回到原先状态gitmerge--abort# 然后将github上的代码pull下来同步gitpull分支删除本地分支删除查看本地分支gitbranch删除已合并分支# 删除单个分支-d 是 --delete只删已合并的分支gitbranch-dfeature-login# 强制删除未合并的分支谨慎-D 是 --delete --force会丢失代码gitbranch-Dfeature-unfinished批量删除本地已合并的分支# 先切到 main 分支再删除所有已合并到 main 的本地分支gitcheckout maingitbranch--mergedmain|grep-vmain|xargsgitbranch-dgit branch --merged main列出所有已合并到 main 的分支grep -v main排除 main 分支本身xargs git branch -d批量删除这些分支。远程分支删除终端删除远程分支# 删除远程的 feature-login 分支origin 是远程仓库别名gitpush origin--deletefeature-loginGitHub 网页删除远程分支打开仓库页面 → 点击顶部「Code」→ 右侧「Branches」找到要删除的分支 → 点击右侧「…」→ 选择「Delete branch」确认删除即可如果分支被保护会提示无法删除。误删分支的恢复方法如果不小心删了分支只要该分支有提交记录 / 远程备份就能恢复恢复本地已删除的分支# 第一步找到删除分支的最后一次提交记录用 reflog 查看操作历史gitreflog# 第二步从提交记录恢复分支替换成你的提交哈希值比如 abc123gitcheckout-bfeature-login abc123恢复远程已删除的分支# 先在本地恢复分支# 重新推送到远程即可gitpush origin feature-login提交规范与最佳实践下图展示了完整的提交类型规范与标准示例提交信息格式规范主题行限制50字符使用祈使句“Fix而非Fixed”提交类型标识feat:功能fix:修复docs:文档等类型说明示例feat新增功能featurefeat: 新增用户登录接口fix修复 Bugbugfixfix: 修复登录密码加密错误docs仅修改文档README / 注释等docs: 更新API文档示例style代码格式调整不影响逻辑如缩进 / 空格style: 格式化user.py代码refactor代码重构既不新增功能也不修复 Bugrefactor: 简化add函数逻辑test添加 / 修改测试代码test: 为add函数添加单元测试chore构建 / 工具配置修改如.gitignorechore: 新增Python依赖包提交信息模板配置在仓库创建时勾选Add a README file使用.github/COMMIT_TEMPLATE.md文件设置模板提交历史的管理与重写重做最近一次提交刚提交完发现提交信息写错比如类型填错、主题超长漏加文件比如忘了 git add 某个文件。gitcommit--amend重置最近一次提交撤销最近一次提交但保留工作区 / 暂存区的代码代码不会丢适合提交后发现代码有问题想修改后重新提交。gitreset--softHEAD^不同reset对比命令效果git reset --soft仅撤销提交保留暂存区 / 工作区代码git reset --mixed撤销提交 暂存区保留工作区代码默认git reset --hard撤销提交 暂存区 工作区代码直接丢失实践任务在my-first-repo仓库中创建一个功能分支在该分支上添加一个功能文件并提交尝试合并到主分支并制造一个冲突解决冲突并再次合并使用规范的提交信息格式进行一次提交GitHub协作开发Fork/PR工作流、Code Review、参与开源项目Fork与同步上游仓库Fork 是把别人的仓库复制一份到你自己的 GitHub 账号下你可以自由修改同步上游仓库是把原仓库上游的最新代码同步到你的 Fork 仓库避免你的代码和原仓库脱节。下图展示了 Fork Pull Request 的完整开源协作工作流Fork仓库的概念与适用场景Fork 的本质Fork 就是「一键复制」把 GitHub 上别人的仓库比如开源项目完整复制到你自己的 GitHub 账号下包括所有代码、分支、提交记录。你可以把它理解成你在开源项目的 “副本” 上做修改既不影响原项目又能自由折腾改好后还能通过 PR 把你的修改贡献给原项目。Fork 的核心场景贡献开源项目想给别人的开源项目提功能 / 修 Bug但没有直接修改原仓库的权限 → Fork 后改自己的副本再提 PR学习 / 二次开发想基于别人的项目做定制化开发比如改一个开源工具但不想影响原项目保存项目快照看到好用的项目Fork 到自己账号防止原作者删除 / 修改。Fork 仓库的操作步骤以 Fork 一个开源项目比如https://github.com/AUTOMATIC1111/stable-diffusion-webui为例打开原仓库的 GitHub 页面点击页面右上角的「Fork」按钮紫色按钮很显眼等待几秒GitHub 会自动跳转到你账号下的 Fork 仓库地址https://github.com/你的用户名/stable-diffusion-webui至此你已经拥有了原仓库的完整副本可自由修改。同步上游仓库更新方式GitHub 网页端同步方法 1GitHub 网页端同步适用场景原仓库更新少且无复杂冲突。步骤打开你 Fork 后的仓库页面找到「Sync fork」按钮点击点击「Update branch」按钮GitHub 会自动尝试合并原仓库的最新代码到你的 Fork 仓库如果无冲突同步完成如果有冲突会提示「Resolve conflicts」需手动解决和之前讲的合并冲突操作一致。终端同步适用场景原仓库更新频繁或网页端同步失败有冲突。克隆你的 Fork 仓库到本地gitclone gitgithub.com:PLAYEROFMYLIFE/stable-diffusion-webui.git添加上游仓库upstream地址# 添加原仓库为上游仓库替换成原仓库的 SSH 地址gitremoteaddupstream gitgithub.com:xxx/awesome-project.git# 验证是否添加成功会显示 origin 和 upstreamgitremote-v拉取上游仓库的最新代码gitfetch upstream切换到你的主分支比如 maingitcheckout main合并上游仓库的主分支到你的本地分支# 把 upstream/main 的最新代码合并到你的本地 main 分支gitmerge upstream/main把同步后的代码推送到你的 Fork 仓库origingitpush origin main本文持续更新欢迎 Star 收藏如有问题欢迎在评论区留言交流。找到「Sync fork」按钮点击点击「Update branch」按钮GitHub 会自动尝试合并原仓库的最新代码到你的 Fork 仓库如果无冲突同步完成如果有冲突会提示「Resolve conflicts」需手动解决和之前讲的合并冲突操作一致。终端同步适用场景原仓库更新频繁或网页端同步失败有冲突。克隆你的 Fork 仓库到本地gitclone gitgithub.com:PLAYEROFMYLIFE/stable-diffusion-webui.git添加上游仓库upstream地址# 添加原仓库为上游仓库替换成原仓库的 SSH 地址gitremoteaddupstream gitgithub.com:xxx/awesome-project.git# 验证是否添加成功会显示 origin 和 upstreamgitremote-v拉取上游仓库的最新代码gitfetch upstream切换到你的主分支比如 maingitcheckout main合并上游仓库的主分支到你的本地分支# 把 upstream/main 的最新代码合并到你的本地 main 分支gitmerge upstream/main把同步后的代码推送到你的 Fork 仓库origingitpush origin main本文持续更新欢迎 Star 收藏如有问题欢迎在评论区留言交流。

相关文章:

每天一个小技能——GitHub入门

GitHub简介 什么是GitHub及其核心功能 GitHub 基于 Git 的代码托管 协作开发平台。程序员的 “云端代码网盘 协作工作台 项目社区”。 核心功能 代码托管:把项目代码存在云端版本管理:记录每一次修改,可回滚、可对比团队协作&#xf…...

DeFi交易客户端开发指南:从协议抽象到套利监控实战

1. 项目概述:一个面向加密货币交易的开源客户端如果你在GitHub上搜索过加密货币相关的自动化交易工具,大概率会看到过各式各样的“client”或“bot”。今天要拆解的这个项目——messyvirgo-coin/messyvirgo-openclaw-client,从名字上就透着一…...

【基于 PyQt5 + PaddleOCR 的工业视觉型号检测系统开发】

目录 系统功能 技术栈 系统架构 1.硬件配置 2.软件架构 核心库安装 项目整体逻辑 完整代码逐段解析 模块1:导入所需库 模块2:辅助函数 2.1 定期释放USB摄像头资源 2.2 命令行参数设置 2.3 报警器控制指令 2.4 控制报警器 2.5 筛选列表中出…...

从芯片选型到PCB布局:手把手教你设计基于GS12170的SDI/HDMI转换板(避坑指南)

从芯片选型到PCB布局:手把手教你设计基于GS12170的SDI/HDMI转换板(避坑指南) 在音视频设备开发领域,SDI与HDMI信号转换一直是专业级应用的核心需求。无论是演播室设备、医疗影像系统还是广电级监控解决方案,都需要稳定…...

DenseGRPO:流匹配模型的密集奖励强化学习框架

1. 项目概述DenseGRPO是一种创新的强化学习框架,专门用于优化流匹配模型(如文本到图像生成系统)的对齐过程。传统强化学习方法在训练这类生成模型时面临一个根本性挑战:稀疏奖励问题。具体表现为仅在生成过程结束时提供单一反馈信…...

如何分析对象依赖关系_DBA_DEPENDENCIES防止删表导致视图失效

查DBA_DEPENDENCIES需DBA或SELECT_CATALOG_ROLE权限,否则应使用ALL_DEPENDENCIES并注意OWNER和NAME大小写;删表前重点查REFERENCED_TYPE为VIEW等的依赖,而非双向关系;动态SQL、JOB、APEX等隐式引用不会被捕获。查 DBA_DEPENDENCIE…...

避坑指南:在OpenHarmony上玩转Modbus RTU,RS-485接线和libmodbus配置那些事儿

OpenHarmony工业互联实战:RS-485硬件连接与libmodbus配置避坑手册 当温控器的数据突然跳变,当电表读数出现异常抖动,很多工程师的第一反应往往是检查代码逻辑——但真正的陷阱可能藏在那些被忽略的物理细节中。在工业现场,RS-485总…...

基于Ollama的本地大模型开发:handy-llama工具包详解与应用实践

1. 项目概述:一个让Ollama“听话”的本地AI工具箱如果你最近也在折腾本地大模型,大概率听说过Ollama。它确实是个好东西,一条命令就能把Llama、Qwen、Gemma这些主流模型拉到本地跑起来,对开发者来说门槛降低了不少。但用久了你会发…...

信息看了很多,判断力没有变——这才是真正的问题

最近每天早上我的 AgentOS 都会做一件事:把前一天的信息流,变成一套可以迁移的判断模型。 不是写文章。不是做总结。是让今天的新闻、案例、信号,真正改变我以后面对同类问题时的判断方式。 这件事叫知识合成。 它很重要,但以前几…...

超越点灯:用ESP32的10个触摸引脚和PWM函数做个智能调光台灯(附完整代码)

超越点灯:用ESP32的10个触摸引脚和PWM函数做个智能调光台灯(附完整代码) 引言 还记得小时候第一次按下台灯开关时那种"掌控光明"的兴奋感吗?如今,我们可以用一块比硬币还小的ESP32开发板,重新定义…...

D3KeyHelper终极指南:暗黑3图形化按键助手10分钟快速上手

D3KeyHelper终极指南:暗黑3图形化按键助手10分钟快速上手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款专为暗黑破坏…...

动态切换标题图片的顶部边距:基于导航栏状态的 CSS 样式控制

本文介绍如何通过 JavaScript 动态检测导航栏是否启用 navbar-fixed 类,并据此为 .title-img 元素添加或移除 margin-top: 20%,实现响应式布局适配。核心在于精准监听类名变化并执行样式切换,避免硬编码与冗余逻辑。 本文介绍如何通过 j…...

《全域数学:华夏术数文明公理升维大系》

《全域数学:华夏术数文明公理升维大系》【全书完整出版级目录|唯一底层公理:全域数学】作者:乖乖数学 体系归属:算法联盟ROOT全域数学公理体系 著作定位:华夏五千年术数第一次彻底公理化、数学化、物理场论…...

告别轮询!用STM32F103的TIM+DMA搞定DHT11,实测代码不到100行

极致精简:STM32F103的TIMDMA驱动DHT11实战指南 在嵌入式开发中,温湿度传感器DHT11的驱动实现常常让开发者头疼——官方提供的驱动代码往往臃肿复杂,不仅占用宝贵的Flash空间,还可能因为频繁的中断处理影响系统实时性。本文将展示如…...

告别‘抓瞎’!用CAPL的RS232函数自动抓取MCU Log保姆级教程

告别‘抓瞎’!用CAPL的RS232函数自动抓取MCU Log保姆级教程 每次测试结束后,面对MCU日志抓取这个重复性工作,你是否也感到疲惫不堪?特别是当遇到低概率复现的问题时,手动抓取日志不仅效率低下,还可能错过关…...

AssetStudio完全实战:Unity资源提取与AssetBundle解包的终极教程

AssetStudio完全实战:Unity资源提取与AssetBundle解包的终极教程 【免费下载链接】AssetStudio AssetStudio - Based on the archived Perfares AssetStudio, I continue Perfares work to keep AssetStudio up-to-date, with support for new Unity versions and a…...

Raspberry Pi Zero 2 W功耗优化与测试指南

1. Raspberry Pi Zero 2 W功耗深度测试:从满载到极致优化的完整指南 作为一名长期使用树莓派进行嵌入式开发的工程师,我一直对低功耗优化有着浓厚的兴趣。最近拿到Raspberry Pi Zero 2 W后,我决定系统地测试它的功耗表现,并探索各…...

Giga-snaP BGA适配器设计:解决高频信号与热膨胀挑战

1. Giga-snaP BGA SMT适配器设计解析在BGA封装测试领域,传统适配器面临三大核心挑战:热膨胀系数(CTE)不匹配导致的焊接失效、高密度互连带来的巨大插拔力、以及高频信号传输的完整性要求。Giga-snaP创新性地采用环氧树脂包覆成型技术,从根本上…...

如何高效管理RimWorld模组:终极模组管理器完全指南

如何高效管理RimWorld模组:终极模组管理器完全指南 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-managed…...

AI代理与Jina工具实现智能网页抓取方案

1. 项目概述这个标题描述了一个相当有趣的AI应用场景:AI代理如何利用Jina的URL转Markdown工具,在KaibanJS框架中实现更智能化的网页抓取方案。作为一名长期从事自动化工具开发的工程师,我最近在实际项目中深度应用了这套技术栈,发…...

【末轮截稿、快速发表、SPIE出版】第六届中国膜计算论坛暨2026年人工智能、大数据与电气自动化国际学术会议(CWMCAIBDEA 2026)

第六届中国膜计算论坛暨2026年人工智能、大数据与电气自动化国际学术会议(CWMC&AIBDE 2026)拟定于2026年5月12-14日在中国重庆举行。本次会议由重庆城市科技学院主办,重庆城市科技学院人工智能与大数据学院、重庆城市科技学院电气工程与智…...

分片 vs 分布式:弹性与高可用性背后的数学原理

分片 vs. 分布式:弹性与高可用性背后的数学原理 Chris Smith July 14, 2025 原文链接 概率论(Probability theory)是数学中研究不确定性的分支。它帮助我们理解不同结果发生的可能性。在本文中,我们将考虑两种水平扩展数据库的替…...

2026年量子计算与人工智能国际学术会议(ICQCAI 2026)

2026 年量子计算与人工智能国际学术会议(ICQCAI 2026)将于 2026 年5月8 - 10日在北京举行。本次会议聚焦量子计算与人工智能的融合发展趋势,为全球学者、研究人员和行业专家搭建交流平台。近年来,量子计算与人工智能的融合成为科技…...

《Python空间数据处理》教材发布了

由我主编的《Python空间数据处理》教材正式上架京东! 书中案例对应的数据、代码和教学中使用的课件可以在GitHub进行下载。 欢迎需要的朋友选购,欢迎批评指正!!!谢谢大家的支持!...

JavaScript窗口大小调整resize事件的适配方案

应节流控制并精准判断尺寸变化:设定100–250ms时间阈值限制resize触发频率,缓存并比对window.innerWidth/innerHeight避免无意义执行;局部变化优先用ResizeObserver;组件卸载时务必清除监听器防内存泄漏。监听窗口大小变化时&…...

设备维护系统功能拆解:它能解决哪些设备维护难题?

在现代工业生产中,高效的设备维护是企业生存的根本,但传统模式常面临响应慢、记录乱的困境,而数字化的设备维护系统正是解决这些难题的利器。以简道云为例,作为国内领先的零代码平台,它允许企业像搭积木一样快速搭建专…...

构建有益AI:价值对齐与工程实践框架

1. 项目概述"Building a Beneficial AI"这个标题背后蕴含着人工智能领域最前沿也最具挑战性的研究方向——如何确保AI系统的发展真正造福人类社会。作为一名在AI安全领域工作多年的从业者,我见证了太多技术突破带来的双刃剑效应。今天我想分享的&#xff…...

基于Simulink的无线充电系统LCC补偿网络建模与控制

目录 手把手教你学Simulink ——基于Simulink的无线充电系统LCC补偿网络建模与控制 一、引言:为什么需要LCC补偿? 二、LCC补偿原理与拓扑选择 1. 常见补偿拓扑对比 2. LCC等效电路分析 三、系统架构与控制逻辑 四、Simulink建模全流程 第一步:构建LCC主电路 1. 松耦…...

【大白话说Java面试题】【Java基础篇】第16题:HashMap中Key为null时,元素存放的位置

第16题:HashMap中Key为null时,元素存放的位置 📚 回答: 答案:当HashMap的key为null时,元素会被存放在数组的第0号位置(即索引为0)。 底层原理: HashMap在计算元素存储位…...

OpenEvolve:基于进化算法的AutoML实战指南

1. 项目背景与核心价值OpenEvolve这个开源项目复现了DeepMind提出的AlphaEvolve算法框架,这是一个基于群体智能的自动化机器学习(AutoML)系统。我在实际部署这类算法时发现,相比传统手工调参,它能将模型开发效率提升3-…...