Git的基本使用
Git的基本使用
- 前言 :为什么使用Git
- Git基本操作
- 1. 初始化
- 2. Git分区
- 3. 认识`.git`目录
- 4. git基本操作
- Git分支管理
- 1. 基本操作
- 2. Git分支设计规范
- Git 标签管理
- 1. Git标签的使用
- 2. 标签使用规范
- 3. Git标签与分支的区别
- 分离头指针问题
- 1. 分离头指针问题的风险
- 2. 分离头指针问题的补救办法(正规办法)
- 远程操作
- 1. 基本操作
- 2. 配置Git
- 3. 多人协作
前言 :为什么使用Git
Git是一个分布式 版本控制工具。
Git ⽐其他版本控制系统设计得优秀,因为 Git 跟踪并管理的是修改,⽽⾮⽂件。
Git基本操作
1. 初始化
### 安装Git###Ubuntu### -y: 自动回答yessudo apt-get -y install git ###CentOSsudo yum -y install git
### 创建Git本地仓库,初始化后该文件夹下会出现一个.git 目录git init
### 配置Git#### global 是全局配置,否则只在本仓库生效git config [--global] user.name "xxx"git config [--global] user.email "xxx@xx.com"### 查看配置git config -l### 删除配置git config [--global] --unset user.name
2. Git分区
- Workspace: 工作区,就是在电脑里能看到的目录;
- Index/Stage: 暂存区,存放在
.git/index
中; - Repository: 版本库(本地仓库),即工作区的隐藏目录
.git
; - Remote: 远程仓库;
3. 认识.git
目录
通过tree
命令查看.git
文件
主要认识几个重要的文件:
- index: 暂存区,add后的内容暂存在此处;
- HEAD :指向当前分支的指针;
- Objects :存储每次commit的commit ID (git cat-file -p commitID 查看);
- Refs:存储各分支/标签的引用,即最新的commit id;
4. git基本操作
### 将file文件添加到暂存区
git add file
### 将暂存区的文件上传到版本库
git commit -m "commit file"
### 将工作区中所有已跟踪文件的修改等操作添加到暂存区并提交
git commit -a -m "add and commit"
### 查看历史提交记录,--pretty=oneline,将每次提交信息放在一行显示
git log --pretty=oneline### 查看状态
git status ### 起别名
git config --global alias.st status
### 起完别名后,就可以使用别名来下命令
git st
git中常见的四种状态:
###版本回退
git reset [ --soft | --mixed | --hard ] [HEAD]
git reset 命令会将版本库回退到指定版本,工作区和暂存区是否回退由参数决定:
--mixed
: 默认选项,将暂存区退回到指定版本,工作区不变;--soft
: 暂存区和工作区都不会退;--hard
: 暂存区和工作区都要回退;
之前讲到,HEAD是指向当前分支的指针,而当前分支中存储的是最新的commit ID,所以此处的HEAD选项就是一个commit ID;
当然,想要记住这个ID似乎不太可能,或者每次查询都比较麻烦,git为我们提供了更加便捷的选项:
- HEAD表示当前版本;
- HEAD^表示上一个版本;
- HEAD^^表示上上一个版本;
- 以此类推…
也可以用~数字表示:
- HEAD~1 上一个版本;
- HEAD~2 上上一个版本;
- 以此类推…
思考一个问题,假如你回退到上一个版本之后,后悔了,此时怎么做:首先,这个便捷的选项无法使用了,其次,我们需要想办法找到commit ID,此时我们想到用
git log
来找到这个ID,但实际并不可以(可以自行尝试),那怎么解决呢,使用git reflog
命令可以查看到所有HEAD的移动记录。
git reflog ###记录本地的每一次命令
这件事的解释如下:
在版本回退之后,master中最新的commit ID成为了version2 的ID,指针被移向的旧的提交,新的提交不能追踪。而使用git reflog
可以查看到所有HEAD的移动记录。
此处前面黄色的字符串,是commitID的部分,也可以用于版本回退。
git reset --hard la3a288
### 千万不能使用 checkout 切换,这会造成分离头指针的问题,下面细说(埋个伏笔)
git checkout la3a288
版本回退常见的三种情况如下 :
### 假如你做了一部分工作,没有add,发现不合适,如何做?## 这种情况你当然可以找一下差异,然后自己改,但如果你的工作量比较大,那似乎会很麻烦git diff file ## 显示暂存区和工作区的差异git diff HEAD -- file ##查看版本库和⼯作区⽂件的区别## 更便捷的方式git checkout -- file ###让⼯作区的⽂件回到最近⼀次 add 或 commit 时的状态
### 假如你add你的工作到暂存区了,但还没有commit到版本库,发现不合适,想要回退,怎么做?
git reset --mixed HEAD text.txt
### 假如你的工作以及add并且commit了,如何回退?
git reset --hard HEAD^
关于版本回退的问题,就先讲到这里。接下来看如何删除文件:
说到删除,大家可能会想到在Linux上直接
rm file
不就可以了吗,但是这只能删除掉工作区的文件,如果我们想要删除暂存区和版本库里的文件,该怎么做呢?
### 删除文件
### 将文件从工作区和暂存区删除
git rm file
### 删除掉工作区和暂存区的文件后,提交修改,同步版本库即可
git commit -m "delete file"
那不小心删错了怎么办,当然可以进行版本回退了,请兄弟们自己试验一下。
Git分支管理
1. 基本操作
###查看分支
git branch
git branch -r # 查看远程分支
git branch -a # 查看所有分支
###创建分支
git branch dev
### 切换分支
git checkout dev
###新建并切换分支
git checkout -b dev
之前讲过HEAD指向当前分支,当前分支中存储的是该分支上的最新提交的commitID,实际是这么一个模型:
接下来我们切换到dev分支,进行一些修改,然后提交,在切换回master分支,发现我们所做的修改不见了,怎么解释?
当切换回master分支后,HEAD指向了master,master指向了还未做修改的版本,故而不能看到修改。如果就想在master分支上看到这个修改,那就要合并分支。
### 合并分支
### fast-forward
git merge dev
### no fast-forward
git merge --no-ff -m"merge with no-ff" dev
Fast-forward 代表“快进模式”,也就是直接把master指向dev的当前提交,优点是合并速度快,只需要更改master的指向,缺点是不能记录分支的合并情况。
那如果是这种情况,dev分支上做了一些修改,master分支上也做了一些修改,出现了冲突,该如何解决:
实际上这需要你手动解决,在合并(使用git merge dev
命令)时,git会将冲突信息写入有冲突的文件,然后我们手动修改文件内容直到满意为止,然后一定要记住要再次提交。之后就不需要再次merge了,因为我们要求的master分支的内容已经与dev分支的内容合并了(实际是我们手动合并的)。
###合并冲突,手动修改,再次add,commit
##### 一顿修改猛如虎
vi test.txt
git add test.txt
git commit -m"merge ReadMe"
修改完成后的情况:
##查看合并情况
git log --graph --pretty=oneline --abbrev-commit###删除分支
git branch -d dev
假如我们在dev分支上开发过程中,发现master分支有bug,且急需修改,怎么做?
在这里补充一句,工作区和暂存区是公共的(对所有分支都一样),只有提交到版本库,才会有区别。
那如果我直接切回到master,实际上工作区还是开发dev分支的代码,那么我们要将当前代码提交吗,其实也不是不行,但是你的版本库中有一个节点就成了一个残次品,git为我们提供了更好的方式,使用git stash
储藏代码:
###将当前工作区的信息储藏
git stash
### 查看stash列表
git stash list
###取出存储的代码,同时清除stash列表里的记录
git stash pop
## 恢复存储的代码,但不更改stash列表
git stash apply stash@{0}
## 删除stash列表的内容
git stash drop
2. Git分支设计规范
⾔归正传,对于开发⼈员来说,在系统开发过程中最常⽤的⼏个环境必须要了解⼀下:
- 开发环境:开发环境是程序猿们专⻔⽤于⽇常开发的服务器。为了开发调试⽅便,⼀般打开全部错误报告和测试⼯具,是最基础的环境。
- 测试环境:⼀个程序在测试环境⼯作不正常,那么肯定不能把它发布到⽣产机上。该环境是开发环境到⽣产环境的过渡环境。
- 预发布环境:该环境是为避免因测试环境和线上环境的差异等带来的缺陷漏测⽽设⽴的⼀套环境。其配置等基本和⽣产环境⼀致,⽬的是能让我们发正式环境时更有把握!所以预发布环境是你的产品质量最后⼀道防线,因为下⼀步你的项⽬就要上线了。要注意预发布环境服务器不在线上集成服务器范围之内,为单独的⼀些机器。
- ⽣产环境:是指正式提供对外服务的线上环境,例如我们⽬前在移动端或PC端能访问到的APP都是⽣产环境。
这⼏个环境也可以说是系统开发的三个重要阶段:开发->测试->上线。⼀张图总结:
有了环境的概念,再来看分支(Git Flow模型):
分⽀ | 名称 | 适⽤环境 |
---|---|---|
master | 主分⽀ | ⽣产环境 |
release | 预发布分⽀ | 预发布/测试环境 |
develop | 开发分⽀ | 开发环境 |
feature | 需求开发分⽀ | 本地 |
hotfix | 紧急修复分⽀ | 本地 |
- master分支作为稳定的唯一代码库,不允许在master上修改代码;master上的代码一般由合并release分支得到,所有在master分⽀的推送应该打标签(tag)做记录,⽅便追溯;
- release分支主要⽤于提交给测试⼈员进⾏功能测试,基于develop分支创建,命名规则: release/version_publishtime;
- develop 为开发分⽀,基于master分⽀创建的只读且唯⼀分⽀,始终保持最新完成以及 bug 修复后的代码。可部署到开发环境对应集群。一般由feature分支合并;
- feature 分⽀通常为新功能或新特性开发分⽀,基于develop分支创建,命名规则: feature/user_createtime_feature。新特性或新功能开发完成后,开发⼈员需合到 develop 分⽀。⼀旦该需求发布上线,便将其删除;
- hotfix 分⽀用于修复紧急bug,基于master创建,命名规则: hotfix/user_createtime_hotfix 。当问题修复完成后,需要合并到 master 分⽀和 develop 分⽀并推送远程。⼀旦修复上线,便将其删除。
总结一下:
Git 标签管理
Git 中的标签是一个指向特定提交的引用(指针),用于标记项目的重要节点(如版本发布)。个人理解:简单来说就是给提交的commit ID起了个别名,便于你寻找这个commit版本,这样理解也就能理解为啥会引起分离头指针问题了(个人理解,不喜勿喷~)。
1. Git标签的使用
标签的操作与分支的操作基本一致:
### 创建标签### 轻量标签v1.0git tag v1.0### 附注标签v1.0git tag -a v1.0 -m "v1.0版本"###查看所有标签
git tag###查看v1.0标签详细信息
git show v1.0###删除标签v1.0
git tag -d v1.0### 删除远程标签v1.0
git push origin --delete v1.0###切换到标签v1.0
git checkout v1.0###推送标签v1.0到远程仓库
git push origin v1.0###推送所有标签
git push origin --tags
2. 标签使用规范
- 使用附注标签:附注标签包含更多信息,适合用于版本发布;
- 遵循语义化版本号:使用 v1.0.0、v2.1.3 等语义化版本号命名标签;
- 及时推送标签:创建标签后,及时推送到远程仓库,以便团队共享;
- 不要修改标签:标签应保持不可变性,避免修改已发布的标签;
3. Git标签与分支的区别
特性 | 标签(Tag) | 分支(Branch) |
---|---|---|
是否可变 | 不可变(指向固定的提交) | 可变(随着新的提交移动) |
用途 | 标记重要节点(如版本发布) | 用于开发新功能或修复问题 |
是否可以切换 | 可以切换到标签,但会进入分离头指针状态 | 可以切换到分支并继续开发 |
分离头指针问题
在Git中,分离头指针 (Detached HEAD) 是指 HEAD 指针直接指向某个提交而不是分支(正常情况下应该是HEAD指向分支,分支指向提交)。常见的情况有三种:
###切换到某个提交
git checkout <commitID>
###切换到某个标签
git checkout <tag-name>
###切换到远程分支
git checkout origin/<branch-name>
为什么切换到标签会引起这个问题?
还是这样想,起了个别名吗,实际上还是commitID。
为什么切换到远程分支也会引起这个问题?
其实远程分支与本地分支不同,它存储在本地的是远程仓库中分支的快照(也就是一次提交),所以本质和切换到某个提交引起的问题是一样的。
图解一下:
1. 分离头指针问题的风险
当出现这种状态,git首先会给你一些提示,告诉你处于分离头指针状态。
如果你没了解过这种问题,并忽视了git的提示,继续工作,可能会导致你的提交丢失:即如果在分离头指针状态下创建了提交,但没有将其与分支关联,这些提交可能会被 Git 的垃圾回收机制删除(好吧,这意味着你白干了)。也许你可以通过commitID找到这个提交,并且merge到master分支(我试了下,真可以,但是不建议,如果被GC了,就真白干了)。
2. 分离头指针问题的补救办法(正规办法)
那确实你已经在这里做了许多工作,恍然发现不对劲,怎么办:
这时候你可以创建一个新的分支并切换过去,这时分离头指针状态结束(不会被GC了),你可以提交到这个分支上,来保留你这些修改。
git checkout -b new-branch
git add .
git commit -m "modify test.txt"
远程操作
Git是一个分布式的版本控制工具,每台电脑上都有自己的版本库,这极大程度上提高了他的稳定性(避免了由于一台机器的问题,造成版本库的损坏)。但是不同人员之间想要相互同步版本库还是会有些麻烦(如果人比较多的话,你需要给每个人同步一份),所以git中往往也有一台电脑充当“中央服务器”,大家只需要将自己的修改同步到这台电脑上,然后需要的人员自行取用即可。Github/Gitee就是一个统一托管代码的工具,只需要注册一个账号,就可以获得Git远程仓库。
关于Gitee/Github工具的注册,大家可以自行学习。下面我以Gitee为例,继续讲述一些远程仓库的功能。
1. 基本操作
### 使用HTTPS的方式克隆远程仓库
git clone https://gitee.com/da-gong-uuc/java_data-structure.git### 使用SSH的方式克隆远程仓库
git clone git@gitee.com:da-gong-uuc/java_data-structure.git
使用SSH方式克隆仓库,需要在本地生成一对公钥和私钥,将公钥填写到Gitee中。
### 生成公私钥
### -t rsa 使用rsa 算法 -C 添加注释
ssh-keygen -t rsa -C "xxxxxxx@xx.com" ##输入自己的邮箱
### 一路默认即可
结束之后可以在用户主目录中(注意是主目录,不是当前目录)找到.ssh
文件夹,里面有id_rsa
和id_rsa.pub
两个文件,其中id_rsa.pub
就是公钥,将里面的内容填写到Gitee(设置——>SSH公钥)中,就可以使用ssh方式克隆远程仓库了。
如果是多人协作,只要将每个人电脑上的Key都添加到GitHub/Gitee中,就可以往其中推送了。
如果是想在开源项目上做贡献,则需先下载仓库到本地修改,然后推送到自己的远程仓库,在推送给开源仓库的管理员,供其审核,审核通过才可以。
本地 clone 成功远程仓库后,我们便可以向仓库中提交内容:
###推送修改到远程仓库## 格式git push <远程主机名> <本地分⽀名>:<远程分⽀名># 如果本地分⽀名与远程分⽀名相同,则可以省略冒号:git push <远程主机名> <本地分⽀名>## 例子:将本地的master分支推送到远程仓库中的master分支git push origin master
这⾥由于我们使⽤的是 SSH 协议,是不⽤每⼀次推送都输⼊密码的,⽅便了我们的推送操作。如果你使⽤的是 HTTPS 协议,有个麻烦的地⽅就是每次推送都必须输⼊⼝令。
###拉取远程仓库## 格式git pull <远程主机名> <远程分⽀名>:<本地分⽀名># 如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。git pull <远程主机名> <远程分⽀名>## 例子:将远程仓库的master分支拉取到本地git pull origin master
2. 配置Git
我们可以在本地新建一个.gitignore
文件,然后把想要忽略的文件名(可以使用通配符)填进去,上传到Gitee上(或者在创建仓库的时候配置)。Git就会自动忽略这些文件了。
假如我的gitignore
文件中添加了这些内容,然后push到远程仓库,git显示所有内容已经推送到远程,也就是自动忽略了我们新建的my.so
和 my.ini
文件。
*.ini
*.so
### !表示排除,即不忽略这个文件
!.gitignore
3. 多人协作
关于如何多人共用一个仓库,首先在Gitee中邀请你的队友进来,如图。
简单的远程操作就不再赘述,主要讲两个场景:
- 如果出现代码冲突,怎么解决?
如果出现冲突,在push的时候会失败,此时我们需要将远程代码pull下来,这时git会将冲突信息写入发生冲突的文件中,此时我们手动修改,再次提交,重新推送即可。 - 如何将自己在dev分支上的代码推送到远程仓库的master上?
- 首先在本地切换到master分支,pull一下,保证本地master是最新内容;
- 切换至dev分支,合并master分支(尽量不在master分支上解决冲突);
- 切换至master分支,合并dev分支;
- 将master分支推送至远端。
相关文章:
Git的基本使用
Git的基本使用 前言 :为什么使用GitGit基本操作1. 初始化2. Git分区3. 认识.git目录4. git基本操作 Git分支管理1. 基本操作2. Git分支设计规范 Git 标签管理1. Git标签的使用2. 标签使用规范3. Git标签与分支的区别 分离头指针问题1. 分离头指针问题的风险2. 分离头…...
鸿蒙Flutter开发故事:不,你不需要鸿蒙化
在华为牵头下,Flutter 鸿蒙化如火如荼进行,当第一次看到一份上百个插件的Excel 列表时,我也感到震惊,排名前 100 的插件赫然在列,这无疑是一次大规模的军团作战。 然后,参战团队鱼龙混杂,难免有…...
Mysql:关于命名
1. 命名的对象:库名、表名、列名、索引名 2. 用反引号包裹的情况下,命名时不允许使用空白字符、反引号,其它字符均可 3. 无反引号包裹的情况下,命名时仅允许使用:$、_、数字、大小写字母、中文字符(已知win系统支持)…...
JAVA————十五万字汇总
JAVA语言概述 JAVA语句结构 JAVA面向对象程序设计(一) JAVA面向对象程序设计(二) JAVA面向对象程序设计(三)工具类的实现 JAVA面向对象程序设计(四)录入异常处理 JAVA图形用户界面设…...
Chrome-Edge-IDEA-Win 常用插件-工具包
Chrome-Edge-IDEA-Win 常用插件-工具包 Chrome-Edge-IDEA-Win 常用插件-工具包谷歌插件chropathJSONViewOctotree - GitHub code treeXPath Helper书签侧边栏篡改猴Print Edit WEEdge浏览器插件IDEA插件CodeGlance Pro 代码迷你缩放图插件Alibaba Cloud ToolkitAlibaba Java Co…...
DeepSeek-R1论文深度解析:纯强化学习如何引爆LLM推理革命?
技术突破:从“无监督”到“自主进化”的跨越 paper :https://arxiv.org/pdf/2501.12948目录 技术突破:从“无监督”到“自主进化”的跨越1 DeepSeek-R1-Zero: RLnoSFT1.1 R1-Zero: GRPO(Group Relative Po…...
最新!Ubuntu Docker 安装教程
源自: AINLPer(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2025-3-1 更多:>>>>大模型/AIGC、学术前沿的知识分享! 看到很多部署大模型的时候,都是基于docker安装部署的。…...
【Javascrip】Javascript练习01 REST API using Express.js.
针对该问题的项目路径 要求部分 what you need to doReview the tasks provided in the section below.Obtain the boilerplate code.Use your local development environment to implement a solution.Upload your solution for marking via Gradescope. There is no attempt…...
visual studion 2022如何使用PlaySound()
书籍:《windows程序设计(第五版)》的开始 环境:visual studio 2022 内容:HELLOWIN程序 说明:以下内容大部分来自腾讯元宝。 在Visual Studio 2022中使用PlaySound()函数播放音频,需完成以下步骤: 1. 配…...
C++相关基础概念之入门讲解(下)
1. 引用 int main() {const int a10;int& aaa;aa;cout<<aa<<endl; } 引用 不是新定义一个变量,而 是给已存在变量取了一个别名 ,编译器不会为引用变量开辟内存空 间,它和它引用的变量 共用同一块内存空间(初…...
从零开始学可靠消息投递:分布式事务的“最终一致性”方案
一、什么是可靠消息投递?—— 消息队列的“防丢宝典” 可靠消息投递 是指通过消息队列(如 RocketMQ)确保消息在生产、传输、消费过程中不丢失、不重复、有序到达。其核心目标是在分布式系统中保障数据最终一致性,常用于订单处理、…...
生物化学笔记:医学免疫学原理 免疫系统的组成与功能+克隆选择学说
免疫系统的组成与功能 克隆选择学说 克隆选择学说(Clonal Selection Theory)是免疫学的核心理论之一,由 麦克法兰伯内特(Frank Macfarlane Burnet) 在 1957 年提出,用于解释特异性免疫反应的机制。 基本概…...
SpringBoot最佳实践之 - 使用AOP记录操作日志
1. 前言 本篇博客是个人在工作中遇到的需求。针对此需求,开发了具体的实现代码。并不是普适的记录操作日志的方式。以阅读本篇博客的朋友,可以参考此篇博客中记录日志的方式,可能会对你有些许帮助和启发。 2. 需求描述 有一个后台管理系统…...
MySql中 一条select语句的执行流程
一条 SELECT 语句的执行流程涉及到数据库管理系统(DBMS)的多个组件和阶段。以下是一个更为详细的执行流程,以关系型数据库(如 MySQL、PostgreSQL 等)为例: 1. 客户端发送查询 用户输入:用户在客…...
图论——kruskal算法
53. 寻宝(第七期模拟笔试) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通…...
【dify】 dify环境变量配置说明
这是一份Dify平台的环境变量配置文件,对平台的各项功能、服务和组件进行参数设置。以下是对其主要部分的详细解读: 1. 通用变量(Common Variables) CONSOLE_API_URL:控制台API的后端URL,用于拼接授权回调…...
如何在 Vue 项目中实现动态组件加载,有什么应用场景?
大白话如何在 Vue 项目中实现动态组件加载,有什么应用场景? 什么是动态组件加载 在 Vue 项目里,动态组件加载就是能够在程序运行时动态地决定要渲染哪个组件。打个比方,就像你去餐馆点菜,不同的时间你可能想吃不同的…...
FRP在物联网设备中的穿透方案
物联网设备常位于NAT后,FRP为其提供稳定穿透链路。 配置要点 轻量化部署:使用ARM版本FRP客户端,适配树莓派等设备9。 自启动脚本:通过systemd或crontab实现设备重启后自动连接26。 低功耗优化:调整心跳间隔…...
Android 13深度定制:SystemUI状态栏时间居中显示终极实战指南
一、架构设计与技术解析 1. SystemUI状态栏核心布局机制 层级结构 mermaid 复制 graph TDPhoneStatusBarView --> StatusBarContents[status_bar_contents]StatusBarContents --> LeftLayout[status_bar_left_side]StatusBarContents --> ClockLayout[Clock控件]Left…...
Python实战(3)-数据库操作
前面说过,可用的SQL数据库引擎有很多,它们都有相应的Python模块。这些数据库引擎大都作为服务器程序运行,连安装都需要有管理员权限。为降低Python DB API的使用门槛,我选择了一个名为SQLite的小型数据库引擎。它不需要作为独立的…...
【redis】在 Spring中操作 Redis
文章目录 基础设置依赖StringRedisTemplate库的封装 运行StringList删库 SetHashZset 基础设置 依赖 需要选择这个依赖 StringRedisTemplate // 后续 redis 测试的各种方法,都通过这个 Controller 提供的 http 接口来触发 RestController public class MyC…...
企业数据孤岛的纠结与恩怨
以下是关于控制中数据孤岛的纠结于恩怨: 一、工业控制中数据孤岛的定义 工业控制中的数据孤岛是指在工业生产过程中,各个生产环节、不同的系统或设备之间的数据相互独立、隔离,无法进行有效的共享和交互,形成了一个个相对封闭的数…...
在 Elasticsearch 中扩展后期交互模型 - 第 2 部分 - 8.18
作者:来自 Elastic Peter Straer 及 Benjamin Trent 本文探讨了如何优化后期交互向量,以适应大规模生产工作负载,例如减少磁盘空间占用和提高计算效率。 在之前关于 ColPali 的博客中,我们探讨了如何使用 Elasticsearch 创建视觉搜…...
开发SAPUI5 Fiori应用并部署到SAP系统
首先新建一个项目文件夹 在VScode中打开 打开SAP Fiori(需要先下载安装,参考上上一篇文章) ,选择已添加的SAP S4 ERP系统 ,点击创建Firoi应用。 如果没有添加系统的,点击添加按钮,添加即可,注意ÿ…...
<C#> 详细介绍.net 三种依赖注入:AddTransient、AddScoped、AddSingleton 的区别
在 .NET 8 里,AddTransient、AddScoped 和 AddSingleton 均为依赖注入容器用于注册服务的方法,不过它们的生命周期管理方式存在差异。下面为你详细介绍这三种方法的区别。 1. AddTransient AddTransient 方法所注册的服务,每次被请求时都会…...
游戏引擎学习第168天
回顾并计划今天的内容 今天我们将进行一些思考工作,回顾一下之前的工作。我们已经在资产处理工具中提取了字体,并展示了如何使用该库。我们有两个版本,一个不使用任何库,适合想要完全不依赖库的用户; 我们今天的任务…...
html5炫酷3D立体文字效果实现详解
炫酷3D立体文字效果实现详解 这里写目录标题 炫酷3D立体文字效果实现详解项目概述技术实现要点1. 基础布局设置2. 动态背景效果3. 文字渐变效果4. 立体阴影效果5. 悬浮动画效果 技术难点及解决方案1. 文字渐变动画2. 立体阴影效果3. 性能优化 浏览器兼容性总结 项目概述 在这个…...
VSCode中搜索插件显示“提取扩展时出错。Failed to fetch”问题解决!
大致的问题如下,在VSCode的插件商店搜索插件时提示如下: 导致的情况有以下几点: 1、代理问题,如果是代理引起的,可以继续使用代理后也能搜索和安装插件。 2、还有可能是你的所连接的网络设置了防火墙,比较…...
回溯-单词搜索
79.单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平…...
高级java每日一道面试题-2025年3月07日-微服务篇[Eureka篇]-Eureka Server和Eureka Client关系?
如果有遗漏,评论区告诉我进行补充 面试官: Eureka Server和Eureka Client关系? 我回答: 在微服务架构中,Eureka作为Netflix开源的服务发现组件,由Eureka Server(服务端)和Eureka Client(客户端)两大部分…...
SpringBoot有几种获取Request对象的方法
HttpServletRequest 简称 Request,它是一个 Servlet API 提供的对象,用于获取客户端发起的 HTTP 请求信息。例如:获取请求参数、获取请求头、获取 Session 会话信息、获取请求的 IP 地址等信息。 那么问题来了,在 Spring Boot 中…...
【Agent】Dify Docker 安装问题 INTERNAL SERVER ERROR
总结:建议大家选择稳定版本的分支,直接拉取 master 分支,可能出现一下后面更新代码导致缺失一些环境内容。 我是通过 Docker 进行安装的,由于项目开发者不严谨导致,遇到一个奇怪的问题: INTERNAL SERVER E…...
操作系统——(处理机调度与死锁)
目录 一、处理机调度 (1)层次 (2)进程调度 (3)调度算法 1.先来先服务算法(FCFS) 2.短作业优先算法(SJF) 3.高优先权算法(HPF) …...
MyBatis 面试专题
MyBatis 面试专题 基础概念MyBatis中的工作原理MyBatis 与 Hibernate 的区别?#{} 和 ${} 的区别?MyBatis 的核心组件有哪些? 映射与配置如何传递多个参数?ResultMap 的作用是什么?动态 SQL 常用标签有哪些?…...
C++实现大整数相加
力扣原题字符串相加 415. 字符串相加 - 力扣(LeetCode) 大整数意味着无法用基本数据类型装下,只能用字符串装下,然后手工模拟计算过程 从两个字符串的最后一位开始两两相加,记录进位,每次均有sumabsum&…...
Flutter 快速接入Fair
少点废话 1.了解Fair Fair,由58同城开源提供,目的是flutter项目上架后动态更新代码, 首先了解一个概念,热更新是flutter打包APK后会讲所有的dart代码生成一个so文件,手机通过读取并执行so文件;基于此&am…...
【深度学习新浪潮】AI ISP技术与手机厂商演进历史
本文是关于AI ISP(人工智能图像信号处理器)的技术解析、与传统ISP(图像信号处理器)的区别、近三年研究进展,以及各大手机厂商在该领域演进历史的详细报告。本报告综合多个权威来源的信息,力求全面、深入地呈现相关技术发展脉络与行业动态。 第一部分:AI ISP的定义及与传…...
用逻辑分析仪分析Usart波形
USART的波形抓取最简单,帧头帧尾只需要电平上升下降沿就可以了,不需要自己定义,也没有ID位,逻辑分析仪可以直接抓取发送的数据: 口配置:9600bps,8数据位,无校验,1个停止位…...
常⻅CMS漏洞 -DeDeCMS 获取webshell
DedeCMS是织梦团队开发PHP ⽹站管理系统,它以简单、易⽤、⾼效为特⾊,组建出各种各样各 具特⾊的⽹站 姿势⼀:通过⽂件管理器上传WebShell 1.访问⽬标靶场dedecms 后台可以直接上传任意⽂件 2.上传木马文件 3.蚁剑连接 姿势⼆:…...
基于STC89C51的太阳自动跟踪系统的设计与实现—单片机控制步进电机实现太阳跟踪控制(仿真+程序+原理图+PCB+文档)
摘 要 随着我国经济的飞速发展,促使各种能源使用入不敷出,尤其是最主要的能源,煤炭石油资源不断消耗与短缺,因此人类寻找其他替代能源的脚步正在加快。而太阳能则具有无污染﹑可再生﹑储量大等优点,且分布范围广&…...
JAVA_数据结构_栈和队列
1.栈(Stack) 1.1概念 栈是一种特殊的线性表,它只允许一端进行增删查改操作,它的头称为栈顶,进行压栈和出栈的操作,则另一端称为栈底,并且它遵循着先进后出的操作。 压栈:也可称为进…...
独立组网和非独立组网
独立组网(SA) vs. 非独立组网(NSA) 5G组网方式主要分为 独立组网(SA, Standalone) 和 非独立组网(NSA, Non-Standalone),两者在网络架构、核心网、应用场景等方面有所不…...
HR人员和组织信息同步AD域服务器实战方法JAVA
HR人员和组织信息同步AD域服务器 前期准备AD域基础知识整理HR同步AD的逻辑代码结构配置文件设置启动类HR组织的BeanHR人员Bean获取HR人员和组织信息的类AD中处理组织和人员的类日志配置 POM.xml文件生成EXE文件服务器定时任务异常问题注意事项 前期准备 1、开发语言࿱…...
【云上CPU玩转AIGC】——腾讯云高性能应用服务HAI已支持DeepSeek-R1模型预装环境和CPU算力
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...
【测试开发】OKR 网页管理端自动化测试报告
【测试报告】OKR 管理端 项目名称版本号测试负责人测试完成日期联系方式OKR 管理端4.0马铭胜2025-03-2115362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中,个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而,如何设定并持…...
go语言中空结构体
空结构体(struct{}) 普通理解 在结构体中,可以包裹一系列与对象相关的属性,但若该对象没有属性呢?那它就是一个空结构体。 空结构体,和正常的结构体一样,可以接收方法函数。 type Lamp struct{}func (l Lamp) On()…...
如何缓解大语言模型推理中的“幻觉”(Hallucination)?
目录 如何缓解大语言模型推理中的“幻觉”(Hallucination)? 1. 什么是大语言模型的“幻觉”(Hallucination)? 幻觉的常见类型 2. 如何缓解大模型的幻觉问题? 方法 1:使用知识检索…...
优选算法系列(3.二分查找 )
目录 一.二分查找(easy) 题目链接:704. 二分查找 - 力扣(LeetCode) 解法: 代码: 二.在排序数组中查找元素的第⼀个和最后⼀个位置(medium) 题目链接:34.…...
【论文阅读】Contrastive Clustering Learning for Multi-Behavior Recommendation
论文地址:Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems 摘要 近年来,多行为推荐模型取得了显著成功。然而,许多模型未充分考虑不同行为之间的共性与差异性,以…...
细胞计数专题 | 高效 + 精准!点成LUNA-III™细胞计数仪解锁活细胞检测与浓度分析新高度
1 引言 在生物医学研究中,准确的细胞计数至关重要,它影响着细胞治疗、疾病诊断、组织再生和生物测定等应用领域。传统的手动计数方法既耗时又容易产生偏差。像点成LUNA-III™自动细胞计数仪这样的自动化系统,为提高计数的准确性、可重复性和…...