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

Git版本控制工具(Linux运维CICD版)

git概述Git诞生分布式项目管理工具目前整个行业内最流行最受欢迎的项目版本管理工具开发者Linus TorvaldsLinux的创始人Linux诞生以后全球很多开发者开发了很多个版本的Linux提交给Linus TorvaldsLinus Torvalds 将优秀的代码集成在Linux内核中手动管理所有的代码Linus Torvalds 不喜欢传统的免费CVS等工具因为这些工具不好用好用的都收费Linus Torvalds 选择了一个商业化的工具达成协议可以免费使用于是团队中的一个哥们有个想法能不能破解这个东西被发现了Linus Torvalds 保证不再破解两周以后Linus Torvalds 自己用C语言开发了Git使用了类似于Linux的管理方式Linus Torvalds 将Linux的版本控制切换到Git上Git的开发汲取了其他的版本控制工具的优点避免了缺点用git原生的方式就相当于写Linux命令git安装官网: https://git-scm.com/Debian 戴比安git安装[rootvm1~]# yum install git[rootvm1~]# git --versiongit version2.43.5查看参数帮助查看参数帮助[rootvm1~]# git --helpgit的操作可以说只需要git一条命令加参数即可git应用git身份设置因为git是分布式版本控制系统,不同的人提交代码需要区分,所以每个人都要设置一个身份标识。如果不设置的话谁会知道你这个开发者是张三李四还是王五呢?[rootvm1~]# git config --global user.name daniel[rootvm1~]# git config --global user.email danielitcast.cn[rootvm1~]# git config --global color.ui true[rootvm1~]# git config --listuser.namedanieluser.emaildanielitcast.cncolor.uitrue创建本地仓库工作目录(working directory): 也可叫工作区.是存放项目代码文件的一个目录。注意它不是一个普通的文件仓库(repository) : 也可叫版本库.在git init命令初始化工作目录后会产生一个隐藏的子目录.git, 可以将其理解为git的仓库或版本库。仓库分为本地仓库与远程仓库创建本地仓库的步骤:创建工作目录[rootvm1~]# mkdir GitTest在对应的工作目录中创建本地仓库[rootvm1~]# cd GitTest/[rootvm1GitTest]# git initInitialized empty Git repositoryin/root/GitTest/.git/会产生一个.git子目录,所有除代码数据外的相关数据都在此目录,不要修改它.(它就是仓库或叫版本库)[rootvm1GitTest]# ls .git/branches config description HEAD hooks info objects refs小结:mkdir创建一个工作目录, 然后cd进去, 使用git init就创建好了本地仓库。开发者就可以在工作目录里开发项目代码文件了。暂存区暂存区(stage或index): 也有叫缓存区暂存区就看作是一个缓区区域临时保存你的改动。如果在工作目录创建了一个新文件需要将新文件添加到暂存区。添加文件到暂存区1, 准备一个文件[rootvm1GitTest]# cat 1.pyprint(hello world)2, 使用git add命令提交到暂存区逆向操作为git rm --cached 1.py)[rootvm1GitTest]# git add 1.py3, 提交第一个文件后,版本库.git子目录里就多了一个index[rootvm1GitTest]# ls .git/branches config description HEAD hooksindexinfo objects refs4, 使用strings命令查看可以看到git add的文件列表[rootvm2GitTest]# strings .git/indexDIRC1.py 这里可以看到1.py文件添加到了index文件里了git版本控制提交文件(第1个版本)代码文件需要commit提交后才能纳入版本控制。1, 可以使用git status查看工作目录里有哪些文件需要提交[rootvm1GitTest]# git status# On branch master## Initial commit## Changes to be committed:# (use git rm --cached file... to unstage)## new file: 1.py#2, 使用git commit提交; -m 后接提交的说明信息 -m 表示备注信息[rootvm1GitTest]# git commit -m 提交1.py[master(root-commit)4e67190]提交1.py1filechanged,1insertion()createmode1006441.py3, 再次git status查看状态,没有需要提交的文件了[rootvm1GitTest]# git status# On branch masternothingtocommit,working directory clean小结初始化本地仓库 git init把工作目录代码提交到暂存区git add文件名称只提交某个文件/git add . 提交当前目录的所有文件把暂存区代码发布到本地仓库git commit -m “备注/描述信息”查看是否有代码需要提交 git status修改再提交(第2个版本)1, 修改1.py文件,我这里加了一句print(“hello python”)[rootvm1GitTest]# cat 1.pyprint(hello world)print(hello python)2, 使用git status查看信息告诉我们1.py被修改了[rootvm1GitTest]# git status# On branch master# Changes not staged for commit:# (use git add file... to update what will be committed)# (use git checkout -- file... to discard changes in working directory)## modified: 1.py#nochanges addedtocommit(usegit addand/orgit commit -a)3, 使用git diff查看修改了什么这个命令是在修改内容后没有提交到仓库再执行才可以看到效果[rootvm1GitTest]# git diff 1.pydiff--git a/1.py b/1.pyindex8cde782..5da7641100644--- a/1.pyb/1.py -11,2print(hello world)print(hello python)4, 提交修改(addcommit)[rootvm1GitTest]# git add 1.py[rootvm1GitTest]# git commit -m 添加了一行代码打印hello python[master0e9371b]添加了一行代码打印hello python1filechanged,1insertion()再修改再提交(第3个版本)再增加一句代码print(hello linux)[rootvm1GitTest]# cat 1.pyprint(hello world)print(hello python)print(hello linux)[rootvm1GitTest]# git add 1.py[rootvm1GitTest]# git commit -m 添加了一行代码打印hello linux[master b679b01]添加了一行代码打印hello linux1filechanged,1insertion()小结:工作目录中写好的代码文件需要先git add 文件名添加到暂存区如果提交的多了再git commit 文件名 提交。以后每次修改都要重复前两步。git status查看工作目录中的状态git diff 文件名查看文件修改了什么查看提交历史1, 使用git log查看提交的历史版本信息[rootvm1GitTest]# git logcommitb679b01f2ee42c1c4a7e14ed5d37e02da131a98e Author: danieldanielitcast.cnDate: Wed Jan1614:00:4420190800添加了一行代码打印hello linuxcommit0e9371bfdbc27049c31017773248ae8333b5bf3f Author: danieldanielitcast.cnDate: Tue Jan1523:43:5820190800添加了一行代码打印hello pythoncommit4e67190ec3c57f1708702c9eca5aebe88017bdd2 Author: danieldanielitcast.cnDate: Tue Jan1523:23:2620190800提交1.py2, 使用git log –prettyoneline查看提交的历史版本信息, 查看的显示信息更简洁。前面字符串你可以看作就是一个版本号(commit id)。[rootvm1GitTest]# git log --prettyonelineb679b01f2ee42c1c4a7e14ed5d37e02da131a98e 添加了一行代码打印hello linux0e9371bfdbc27049c31017773248ae8333b5bf3f 添加了一行代码打印hello python4e67190ec3c57f1708702c9eca5aebe88017bdd2 提交1.py 说明 PrettyPrint表示美化打印版本回退与还原重点1, 使用git reset --hard HEAD^回退到上一个版本(也就是第2个版本)[rootvm1GitTest]# git reset --hard HEAD^HEADisnow at0e9371b 添加了一行代码打印hello python# --hard 表示强制提交[rootvm1GitTest]# cat 1.pyprint(hello world)print(hello python)说明假设提交历史为A ← B ← C当前 HEAD 指向 C执行 git reset --hard HEAD^ 后就变成了 A ← Bgit reset --hard HEAD^^ 等于 HEAD~2回退到上两个提交2, 使用git reset --hard 第3个版本号还原到第3个版本。但如果我忘了第3个版本号是什么了,使用git reflog查看所有的操作历史。[rootvm1GitTest]# git reflog0e9371b HEAD{0}: reset: movingtoHEAD^b679b01 HEAD{1}:commit: 添加了一行代码打印hello linux0e9371b HEAD{2}:commit: 添加了一行代码打印hello python4e67190 HEAD{3}:commit(initial): 提交1.pyref 是 reference 的缩写指引用命令意为引用日志记录所有引用如 HEAD、分支的移动历史。3, 还原到第3个版本[rootvm1GitTest]# git reset --hard b679b01HEADisnow at b679b01 添加了一行代码打印hello linux[rootvm1GitTest]# cat 1.pyprint(hello world)print(hello python)print(hello linux)4, 回退到上上一个版本, 也就是回退两个版本,使用git reset --hard HEAD^^回退三个版本,使用git reset --hard HEAD^^^, 以此类推。如果回退100个版本那用100个^符号不方便可以换成git reset --hard HEAD~100[rootvm1GitTest]# git reset --hard HEAD^^HEADisnow at4e67190 提交1.py[rootvm1GitTest]# cat 1.pyprint(hello world)小结:提交后的代码文件使用git log查看当前版本及以前的历史版本。使用git reset --hard HEAD^或者git reset --hard HEAD~100实现版本回退。使用git reflog查看提交的所有操作及版本号使用git reset --hard 版本号你可以自由的在不同版本之间来回切换。简单说这是个“时光倒流”命令能让你的 Git 项目直接回到某个版本连带着把工作区和暂存区的改动全扔了。它特别狠不留一点痕迹。git reset --soft只动版本库暂存区和工作区不动。git reset --mixed默认动版本库和暂存区工作区留着。git reset --hard全清啥都不留。git工作流再次理解与应用拓展工作目录里任何修改或增加的文件都要git add到暂存区让暂存区和工作目录的状态一致这样才能提交一个版本。git commit提交的是在暂存区里的所有文件状态。也就是说是整个工作目录里的状态保存为一个版本而不是某一个文件。git版本控制不仅仅是用于项目开发你也可以用于一个软件包仓库的版本控制。撤销修改如果开发者状态不好,今天写的代码一团乱,想吃后悔药,git也提供了撤销的方法。1, 准备一行或一段写错的代码[rootvm1GitTest]# cat 1.pyprint(hello world)print(hello python)print(hello linux)print(hey,xxx is a gay)这是写错的代码需要反悔想要撤销修改有以下方法:直接把写错的代码删除就好, 但如果改变的代码很多开发者自己都忘了具体改了哪些代码这种做法就不方便了使用git checkout – 文件名就可以直接撤销修改了把仓库中的代码拉取覆盖本地代码如果写乱了代码添加暂存区但还没有commit提交。git rm --cached 1.py /手工修复来撤销修改也可以使用命令 git restore --staged 1.py 从暂存区中删除git restore 1.py恢复工作区中的 1.py还可以一条命令搞定 git restore --sourceHEAD --staged --worktree 1.py2.23版本才支持如果写乱了代码添加暂存区并提交了。则使用版本回退 git reset HEAD^| 版本号误删恢复1, 只要文件git add到了暂存区, 无论有没有git commit提交。误删除后都可以使用 git checkout – 文件名来恢复。[rootvm1 GitTest]# touch 2.py[rootvm1 GitTest]# git add 2.py[rootvm1 GitTest]# rm -rf 2.py[rootvm1 GitTest]# ls1.py[rootvm1 GitTest]# git checkout -- 2.py[rootvm1 GitTest]# ls1.py 2.py 说明 工作中git checkout--*更常见星号*表示当前目录下所有的文件2, 如果文件没有git add到暂存区, 误删除了就没了。[rootvm1GitTest]# touch 3.py[rootvm1GitTest]# rm -rf 3.py下面命令恢复报错[rootvm1GitTest]# git checkout -- .error: pathspec2.pydidnotmatchanyfile(s)knowntogit.文件删除1, 没有git add到暂存区的文件直接rm删除就ok2, git add添加到暂存区,但没有git commit提交的文件。需要rm删除本地,还要git rm 文件名删除[rootvm1GitTest]# touch 3.py[rootvm1GitTest]# git add 3.py[rootvm1GitTest]# rm -rf 3.py[rootvm1GitTest]# git rm 3.pyrm3.py3, git add添加到暂存区,并且已经git commit提交的文件需要rm删除本地,再git rm 文件名删除,最后再提交删除[rootvm1GitTest]# touch 3.py[rootvm1GitTest]# git add 3.py[rootvm1GitTest]# git commit -m 提交了3.py[master0236aef]提交了3.py1filechanged,0insertions(),0deletions(-)createmode1006443.py[rootvm1GitTest]# rm -rf 3.py[rootvm1GitTest]# git rm 3.pyrm3.py[rootvm1GitTest]# git commit -m 删除了3.py[master dc4ee5e]删除了3.py1filechanged,0insertions(),0deletions(-)deletemode1006443.pygit rm 3.py这条命令会把 3.py 文件从工作区和暂存区里删掉并且告诉 Git“我要把这个文件从下次提交里去掉。” 它不直接改版本库但会影响下一次提交的内容。小结git分支管理先来考虑一个问题: 开发者A开发软件的某一个功能模块, 还没有开发完成但害怕进度丢失就提交。假设另一位开发者B并不知道A没有完成, 而直接使用了A开发的文件,这造成了问题。解决方法: 开发者A创建一个属于自己的分支(fork)这个分支只属于A不会影响其他人。开发完成后合并到项目主分支即可。分支可以看作为平行空间查看分支默认只有一个master分支, 前面有*号的代表为当前分支。[rootvm1GitTest]# git branch*master创建分支使用git branch 分支名来创建分支[rootvm1GitTest]# git branch dev[rootvm1GitTest]# git branchdev*master切换分支使用git checkout 分支名来切换分支[rootvm1GitTest]# git checkout devSwitchedtobranchdev[rootvm1GitTest]# git branch*dev master合并分支1, 在dev分支上新开发了一个代码文件,添加并提交[rootvm1GitTest]# git branch*dev 确认为dev分支 master[rootvm1GitTest]# echo new feature 4.py[rootvm1GitTest]# git add 4.py[rootvm1GitTest]# git commit -m 增加了新特性[dev4a0c78e]增加了新特性1filechanged,1insertion()createmode1006444.py2, 切换到master分支后,却发现根本没有这个文件[rootvm1GitTest]# git checkout masterSwitchedtobranchmaster[rootvm1GitTest]# cat 4.pycat:4.py:Nosuchfileordirectory3, 合并分支,再查看能在master分支上查看到了[rootvm1GitTest]# git merge devUpdating dc4ee5e..4a0c78e Fast-forward4.py|11filechanged,1insertion()createmode1006444.py[rootvm1GitTest]# cat 4.pynew feature分支冲突面试有些复杂的情况会造成冲突这个时候git就不能帮我们自动的合并分支。我们就要手动处理冲突。1, 在dev分支修改文件[rootvm1GitTest]# git checkout devSwitchedtobranchdev[rootvm1GitTest]# echo 冲突测试 4.py[rootvm1GitTest]# cat 4.pynew feature 冲突测试2, 提交dev分支上的修改[rootvm1GitTest]# git add 4.py[rootvm1GitTest]# git commit -m 冲突测试[dev de5075c]冲突测试1filechanged,1insertion()3, 切回master分支,也修改相同的文件[rootvm1GitTest]# git checkout masterSwitchedtobranchmaster[rootvm1GitTest]# echo master feature 4.py[rootvm1GitTest]# cat 4.pynew feature master feature4, 提交master分支上的修改[rootvm1GitTest]# git add 4.py[rootvm1GitTest]# git commit -m 冲突测试[master c17f325]冲突测试1filechanged,1insertion()5, 合并dev分支到master就会出现冲突了[rootvm1GitTest]# git merge dev # 把dev合并过来也就是合并到master上Auto-merging4.py CONFLICT(content):Mergeconflictin4.py Automaticmergefailed;fix conflictsandthencommitthe result.6, 手工解决冲突面试git使用,,符号分割冲突的内容手动删除这些符号并修改成你想要的内容解决冲突前:[rootvm1GitTest]# cat 4.pynew featureHEAD master feature冲突测试dev 解决冲突后:[rootvm1GitTest]# cat 4.pynew feature 冲突解决7, 解决冲突后添加并提交,最后再合并[rootvm1GitTest]# git add 4.py[rootvm1GitTest]# git commit -m 冲突解决[master fb05c2f]冲突解决[rootvm1GitTest]# git merge devAlready up-to-date.小结什么原因产生了分支冲突、代码冲突答往往是不同的开发人员同时修改了同一份文件或者程序如何解决方案一开发前期要进行合理规划不同开发人员开发不同的模块或者功能代码尽量减少冲突的情况。方案二如果的确出现了分支冲突可以手工修复重新提交重新合并问题就可以解决了删除分支使用git branch -d 分支名来删除分支。注意:不能删除当前使用的分支.[rootvm1GitTest]# git branchdev*master[rootvm1GitTest]# git branch -d devDeleted branch dev(was de5075c).[rootvm1GitTest]# git branch*master恢复分支如果你不小心删除了一个分支还是可以恢复的。# 1 查看该分支的最近一次操作找到 ID 值git reflog恢复语法git branch[新分支名称]之前提交的commit_ID# 2 创建一个分支指向原来的 IDgit branch master 459f9b4# 再次查看发现文件都回来了llTAG标签将commit id关联一个容易记忆的标签更加方便用于版本的更新或回退。打TAG指定 commit id 打TAG# git tag -a v1.0 xxxx -m 稳定版第1版xxxx 表示commit_id 说明-a 是-annotate 的缩写表示创建带注释的标签git log --oneline 可以用于查看commit id。如果不指定commit id则代表最新的commit id将最新的commit id打TAG# git tag -a v1.1 -m 稳定版第2版查看TAG# 查看 tag# git tag# 查看具体 tag 信息# git show v1.0删除TAG# git tag -d v1.0

相关文章:

Git版本控制工具(Linux运维CICD版)

git概述 Git诞生:分布式项目管理工具,目前整个行业内最流行最受欢迎的项目版本管理工具 开发者:Linus Torvalds Linux的创始人 Linux诞生以后,全球很多开发者开发了很多个版本的Linux,提交给Linus Torvalds Linus To…...

研一在雁栖湖,研二在中关村:中科院网信中心读研的真实体验与避坑指南

研一在雁栖湖,研二在中关村:中科院网信中心读研的真实体验与避坑指南 第一次踏入雁栖湖校区时,湖面泛起的粼粼波光与远处连绵的青山构成了一幅令人屏息的画面。作为中科院计算机网络信息中心(以下简称"网信中心"&#x…...

【Element】el-select远程搜索进阶:自定义搜索逻辑与后端接口高效联调实战

1. el-select远程搜索的核心场景与痛点 在实际企业级应用中,下拉选择器往往需要处理海量动态数据。比如电商平台的后台管理系统,可能需要从数十万商品中快速定位某个SKU;CRM系统要实时搜索客户数据库;城市选择器需要支持拼音首字母…...

Fortify SCA 24.4 安装与配置全攻略:从零开始搭建代码安全防线

Fortify SCA 24.4 安装与配置全攻略:从零开始搭建代码安全防线 在当今快速迭代的软件开发环境中,代码安全已成为不可忽视的重要环节。作为一款专业的静态代码分析工具,Fortify SCA 24.4能够帮助开发团队在早期发现潜在的安全漏洞,…...

从电位器到内部温度传感器:一个STM32 ADC多通道采集的完整项目实战(含代码与波形分析)

从电位器到内部温度传感器:一个STM32 ADC多通道采集的完整项目实战(含代码与波形分析) 当你第一次拿到STM32开发板时,可能会被它丰富的功能所吸引,尤其是内置的ADC(模数转换器)模块。这个看似简…...

Multisim仿真 vs 洞洞板实战:我的双路稳压电源项目翻车与复盘全记录

Multisim仿真与洞洞板实战:双路稳压电源的翻车启示录 仿真软件里完美的电路设计,在现实中却频频翻车——这几乎是每个硬件工程师的必经之路。去年冬天,我也经历了这样一场"理想很丰满,现实很骨感"的双路稳压电源项目。当…...

深入RK3588 DTS:从频率电压表看Rockchip芯片的能效设计思路与调试技巧

深入RK3588 DTS:从频率电压表看Rockchip芯片的能效设计思路与调试技巧 当工程师拿到一块RK3588开发板时,最先关注的往往是性能参数——四核Cortex-A76加四核Cortex-A55的配置,高达2.4GHz的主频,以及强大的NPU算力。但真正决定这颗…...

别再死记硬背了!用LM358电平灯电路,轻松搞懂运放‘电压比较器’模式

用LM358电平灯电路直观理解运放电压比较器 当教科书上密密麻麻的运算放大器公式让你头晕目眩时,不妨试试这个能"看得见"的学习方法——用LM358搭建一个电平灯电路。这个看似简单的小项目,却能让你对电压比较器的工作原理产生前所未有的直观理解…...

从Spring Security到Spring Security OAuth2:权限异常处理配置的‘平滑迁移’实战指南

从Spring Security到OAuth2资源服务器:异常处理架构的平滑升级策略 当你的应用从单体架构向微服务演进时,安全框架的升级往往成为最容易被忽视的痛点。特别是在处理401和403这类权限异常时,许多团队发现原本在Spring Security中运行良好的异常…...

实战避坑指南:用Confluence或SharePoint搭建符合FDA/ISO要求的DHFDMR数字文档体系

医疗器械数字文档体系实战:用Confluence/SharePoint构建合规DHF&DMR 在医疗器械行业,合规性从来不是可选项而是生存线。当FDA审核员敲开您公司大门时,能否在五分钟内调出三年前某款产品的设计验证报告?当ISO13485认证机构要求…...

别再一上来就写复位了!聊聊Xilinx FPGA里那些“不用复位”的寄存器

颠覆认知:Xilinx FPGA中那些无需复位的寄存器设计艺术 在FPGA设计领域,复位信号的使用几乎成了一种宗教仪式般的惯例——每个工程师在编写Verilog代码时,都会条件反射地为所有寄存器添加复位逻辑。这种"宁可错杀一千,不可放过…...

【多无人机路径规划】粒子群优化算法PSO求解复杂三维环境下多无人机动态避障路径规划问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

GooglePlay开发者风控规避指南:2026账号稳定性策略

如何有效规避 Google Play 开发者风控风险:2026账号稳定性实践思路随着 Google Play 审核与风控机制逐步升级,开发者在应用上架过程中面临的不确定性明显增加。尤其是新注册开发者账号,更容易在早期阶段触发风控检测,从而出现审核…...

Real-Anime-Z惊艳效果:不同肤色/人种/年龄在2.5D风格下的普适性表现

Real-Anime-Z惊艳效果:不同肤色/人种/年龄在2.5D风格下的普适性表现 1. 引言:探索2.5D风格的独特魅力 Real-Anime-Z是一款基于Stable Diffusion的写实向动漫风格大模型,它巧妙地在真实质感与动漫美感之间找到了平衡点。这种被称为"2.5…...

RWKV-7 (1.5B World) 部署教程:NVIDIA Container Toolkit配置指南

RWKV-7 (1.5B World) 部署教程:NVIDIA Container Toolkit配置指南 1. 项目概述 RWKV-7 (1.5B World) 是一款基于轻量级大模型开发的单卡GPU专属对话工具,专为RWKV架构优化设计。这款工具完美适配RWKV架构的原生特性,支持全球多语言对话、流…...

nli-MiniLM2-L6-H768实际效果:会议纪要片段在‘决策项/待办项/风险点/背景信息’标签下的结构化解析

nli-MiniLM2-L6-H768实际效果:会议纪要片段在"决策项/待办项/风险点/背景信息"标签下的结构化解析 1. 工具介绍 1.1 什么是nli-MiniLM2-L6-H768 nli-MiniLM2-L6-H768是一款基于cross-encoder/nli-MiniLM2-L6-H768轻量级NLI模型开发的本地零样本文本分类…...

华为OD机试真题 新系统 2026-04-19 PythonJS 实现【8位LED控制器】

目录 题目 思路 Code 题目 有一个8位LED控制器,包含8个LED灯(编号0-7),初始状态全灭,用8位二进制表示为:00000000。控制器可以接收以下三种指令: Lx:L表示点亮操作,x表示LED的编号(0一7),操作得到的结果是:点亮第x个…...

华为/小米手机改了分辨率就乱套?一个BaseActivity搞定Android字体缩放适配

Android字体缩放适配终极方案:BaseActivity解决华为/小米分辨率修改乱象 每次测试报告里出现"华为手机改了分辨率后界面崩了"的反馈,我都忍不住想摔键盘。去年我们团队就因为这个看似简单的适配问题,硬生生拖了两周进度。后来发现&…...

别再手动配用户了!用OpenLDAP+phpLDAPadmin在CentOS 7.9上5分钟搞定统一认证服务

企业级统一认证实战:OpenLDAP与phpLDAPadmin高效部署指南 每次新员工入职,IT管理员是否还在重复执行这些操作:登录每台服务器创建账号、配置GitLab权限、设置Jenkins访问、调整Wiki系统身份?当团队规模突破20人时,这种…...

告别脚本恐惧!用Tosca Commander实现Web/API自动化测试的保姆级入门指南

告别脚本恐惧!用Tosca Commander实现Web/API自动化测试的保姆级入门指南 第一次接触自动化测试时,看到满屏的代码和命令行,很多人会本能地产生抗拒。但测试工作又确实需要自动化来提升效率——这就是Tosca Commander的价值所在。作为一款领先…...

避坑指南:C++正则表达式里的那些‘坑’(从语法陷阱到性能优化)

C正则表达式深度避坑手册:从语法陷阱到性能调优实战 正则表达式就像程序员手中的瑞士军刀——功能强大但暗藏玄机。我在处理日志分析系统时曾遇到一个诡异现象:相同的正则模式在Python中运行如飞,移植到C后性能却断崖式下跌。这促使我深入研究…...

模型黑盒的“翻译官”:LIME如何为单个预测提供局部可解释性

1. 当模型说"不"时,我们该如何理解? 想象一下这样的场景:一位贷款申请人收到银行的自动审批系统发来的拒绝通知,屏幕上冷冰冰地显示"申请未通过"。申请人满脸疑惑:"我信用记录良好&#xff0…...

大模型开始“懂你”了!PersonaVLM如何实现长期个性化记忆

过去两年,大模型的能力突飞猛进。从文本生成到多模态理解,它们已经逐渐成为很多人日常使用的工具。但随着使用深入,一个问题也变得越来越明显:这些模型虽然强大,却并不真正“懂你”。在与模型的互动中,我们…...

在大厂外包干了两年,简历上写着「服务于某头部互联网公司」。面试官问,那你在里面负责什么?我说完,他点点头,哦,外包呀~

最近看到一个帖子,发帖的人在某头部大厂做了两年外包。他说,离职之后去面试,简历上写的是「服务于某头部互联网公司」,负责的项目、用的技术栈、带过的小团队,全都写上去了。面试官看完,抬起头,…...

信号处理课设灵感:从Borwein积分到‘音乐喷泉’和‘膜拜大熊猫’的创意实现

从Borwein积分到创意电子项目:信号处理课设实战指南 当sinc函数的积分结果突然从π变成π-10⁻⁰时,数学系的学生可能会陷入证明困境,而电子工程专业的学生看到的却是LED灯带的控制灵感。这种理论到实践的思维跳跃,正是现代工程教…...

手把手教你用OllyDbg(OD)修改程序内存数据(附快捷键大全)

逆向工程实战:用OllyDbg从零破解内存数据的终极指南 当你想了解一个程序内部运作机制,或者需要修复某个软件的小缺陷时,逆向工程工具就像一把打开黑盒子的钥匙。而OllyDbg(简称OD)无疑是Windows平台上最强大的调试器之…...

用STM32F103C8T6和OLED屏做个密码锁,从硬件接线到代码烧录保姆级教程

STM32F103C8T6与OLED屏打造智能密码锁全流程实战 第一次拿到STM32开发板时,很多人会陷入"从何入手"的困惑。本文将带你从零开始,用最常见的STM32F103C8T6最小系统板和0.96寸OLED屏,打造一个具备掉电保存功能的智能密码锁。不同于简…...

egergergeeert FLUX模型优势:长文本理解能力在多对象提示词中验证

FLUX模型优势:长文本理解能力在多对象提示词中验证 1. 引言 在图像生成领域,提示词的质量直接影响最终输出效果。传统文生图模型在处理复杂、多对象的提示词时往往表现不佳,容易出现对象遗漏、属性混淆等问题。本文将重点介绍egergergeeert…...

Minitab新手避坑指南:为什么你的CPK和PPK算出来总是不一样?

Minitab新手避坑指南:为什么你的CPK和PPK算出来总是不一样? 第一次打开Minitab进行过程能力分析时,很多新手都会遇到一个令人困惑的现象:明明输入的是同一组数据,CPK和PPK的结果却大相径庭。这就像做菜时严格按照食谱操…...

ModTheSpire深度解析:Slay The Spire高效模组加载与字节码注入终极指南

ModTheSpire深度解析:Slay The Spire高效模组加载与字节码注入终极指南 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是Slay The Spire游戏的专业模组加载器&…...