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

git详细使用教程

文章目录

    • 一、 git介绍与安装
      • 1、git介绍
      • 2、git的安装
      • 3、git使用前的说明
    • 二、git的基础使用
      • 1、走进git之前
      • 2、git基础使用
        • 1、`git init` 项目初始化(`init`)成仓库(`repository`)
        • 2、`git add` 管理文件
        • 3、`git commit` 把文件提交到仓库,命令:
    • 三、git 的高级使用
      • 1、git的高级使用1
        • 1、`git reset --hard 版本号` 版本回滚
        • 2、`git reflog` 查看所有的提交记录
      • 2、git 的高级使用2
        • 1、`git stash` 把没有提交的代码暂存在某个地方,命令:
        • 2、`git stash pop` 进行把暂存的代码拿回来,命令:
        • 3、git stash 一些其他命令的使用
      • 3、git 高级使用3
        • 1、`git branch` 创建分支,命令:
        • 2、`git checkout` 切换分支,命令:
        • 3、git merge合并分支,命令:
    • 四、Git远程仓库使用
      • 1、在码云上创建版本存储仓库
        • 1、git remote add 添加存储仓库地址
        • 2、git push 把本地仓库推到远程存储仓库中
        • 3、git clone 把代码从版本存储仓库下载下来
        • 4、git pull
    • 五、git开发规范
      • 1、github 的fork和pull request
      • 2、git之gitignore
      • 3、git tag


下面关于git的使用我都是以E:\00\MyProject 这个项目为例进行举例讲解
在这里插入图片描述


一、 git介绍与安装

1、git介绍

首相,你要明确说明一下,git软件,是用来进行版本控制的软件,什么叫版本控制,举个例子吧,你在用word软件写论文的时候,同一篇论文你可能会保存好几个:“‘GAN网络应用初级版’”,”GAN网络应用中期版“,“GAN网络应用最终版”。 而git要做的就是类似这种不同版本之间的管理与控制

2、git的安装

关于git的安装,这里不做赘述,网上的安装教程很多,而且很简单,这里就不做详细介绍啦。

3、git使用前的说明

我们使用的时候一般是使用git自带的命令git bash,二不使用windows自带的CMD,因为‘git bash’ 自带的命令行很空命令是和Linux命令都是一样的,操作非常方便。(cmd也可以用,只是没有那么方便而已

在git bash 中,ls、cp、mkdr、vim等这些命令都有,‘而且文件还有颜色区别’,你说好不好用,只想对CMD说声say good bye


下面开始进入正题啦===============>GO


二、git的基础使用

1、走进git之前

在git bash 处打开你要管理的库
在这里插入图片描述
打开之后直接进入当前文件夹中,然后我用git stash查看状态,显示我们并没有把它初始成一个仓库,所以git此时是对他是无法进行管理的。
在这里插入图片描述

2、git基础使用

我们要管理的是MyProject这个文件夹,之后所有的git操作都是在这个文件夹下进行的

1、git init 项目初始化(init)成仓库(repository
  1. git初始化
    git的初始化化很重要,这是使用git的第一步,你要把一个项目想要管理起来,第一步要做的就是把这个项目进行初始

git初始化命令

git init

初始化的结果如下:
在这里插入图片描述
从上图的初始化可以看出三点:

  • 这个仓库已经被初始化成一个空的仓库,也说明此时可以进行git版本控制管理
  • 初始化的仓库在·MyProject/.git·这个文件中
  • (master) 就是我们当前初始化的仓库是主分支,也是当前所处分支的状态
  1. 初始化init作用
    初始化成功之后,在项目文件夹下会多了一个.git 文件夹,(如果你的没有显示,是因为它被隐藏啦,自己设置一下就可以)。下面说明一下. git文件的作用:
    在这里插入图片描述
  • 之后所有的版本都会放到.git文件夹中
  • 比拷贝省空间,第一次提交commit会都放进来,之后每一次commit只把修改的内容保存进来
2、git add 管理文件

在说git add 命令之前先说git status命令
(我们现在E:\00\MyProject\ 目录下创建一个git_test.py 文件)
在这里插入图片描述

  1. git status 查看当前管理文件的状态,命令:
git status

此时查看状态显示如下图:
在这里插入图片描述
从上面显示的状态可以看出,此时主分支还没有任何提交(commit),untracked file就是未被跟踪 / 追踪的文件,下面篮框中的git_test.py显示为红色 说明该文件还没有被git管理起来,下面给的提示是可以用git add 进行追踪管理起来。

git status有三种状态:

  • 红色:修改、创建、删除都是显示红色
  • 绿色:git add 添加之后变成绿色
  • 白色:git commit提交之后变成白色
  1. git add添加要管理的文件,命令:
git add <file>

使用git add 把文件进行管理起来,用命令git add告诉Git,把文件添加到仓库:,之后在用git status查看状态,此时git_test.py文件显示为绿色这说明,该文件已经被git管理起来啦。之后我们如果修改了git_test.py这个文件,它又会变成红色,要管理起来还要在git add 添加一下
在这里插入图片描述

  1. 修改文件状态会改变

下面我们把git_test.py 文件中添加一行文字如下,然后在查看添加文字之后的状态
在这里插入图片描述
下面提示我们已经修改啦git_test.py文件,未为提交暂存的更改(changes not stage for commit),所以下面显示该文件已经被修改modified),所以要通过git add 再提交一次把修改之后的文件变绿,管理起来。
在这里插入图片描述
提示语:

提示可以使用git add file 把这个修改的红色的文件再被管理起来
(use “git add …” to update what will be committed)
提示
(use “git checkout – …” to discard changes in working directory)

如果有很多个文件都被修改了,怎么办,一个一个手动这样修改吗,shit,这样岂不是要逆天。此时可以用一个点. 代替:

git add file1  file2 ...   # 都手写上去累死你
git add .   # 明智之举

这个点表示,把当前文件夹下所有的文件他(会递归的把每一个子文件夹下的文件也同样管理起来)都统统管理起来,就是要把它们都变绿

3、git commit 把文件提交到仓库,命令:
  1. git commit命令告诉Git,把文件提交到仓库
git commit -m <message>

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

执行命令:`git commit -m “第一次提交到仓库” ,此时就已经把所有的文件都提交到了仓库中,显示信息如下:

  • 是在主分支上的第一提交(这里看到第一次提交是我写的注释信息)
  • 有一个文件被修改(是一行内容插入),就是git_test.py文件,我么在这个文件中添加了一行文字:“开发一个无人售卖商店”
  • commit提交之后信息中git_test.py文件变成白色 此时说明提交成功(如果有很多文件同样都会变成白色)
    在这里插入图片描述

注意:

1、提交的时候一定要加上 -m 参数和后面的说明信息,不要问为什么(这是组织下达的命令,你去执行就是啦)
2、如果再提交的时候提示你输入用户和邮箱的信息,一定要写上,这样是告诉别人这个是谁提交的,后面知道来源相关的信息,添加方式:

git config --global user.email "you@example.com"git config --global user.name "Your Name"
  1. git log 查看提交(commit)的历史记录,命令:
git log

git log 是查看提交的历史记录信息,显示的信息如下图:

  • 提交的版本号,这个版本号很有用,后面会继续介绍
  • 提交的用户名和用户的邮箱信息,因为我之前是配置过的,如果你没有配置过,就需要用git config --global 进行配置(只要配置过,下次再使用git 初始化一个仓库时,就不需要进行重新配置啦,除非你想更改用户信息

在这里插入图片描述

commit 提交之后,我们再来查看一下状态信息:
nothing to commit, working tree clean ,意思就是:我们当前在工作的路径下所有修改和变动的文件都已经被提交啦。(当然,如果你后面又有修改文件则要再次提交啦)
在这里插入图片描述

为什么Git添加文件需要add,commit一共两步呢?

add只是把所有修改的文件文件添加到仓库,而commit是把所所有的文件提交到仓库,每次commit之后都会生成一个版本号,之后只要拿到这个版本号,想回到哪一个版本都可以。

注意:

如果你提交的时候报错,看一下是不是-m 后面的message用的是单引号,然后改成双引号就可以啦,先说明我没有尝试单引号,只是有人这么说,所有最好直接用双引号,省去不必要的麻烦。

三、git 的高级使用

1、git的高级使用1

1、git reset --hard 版本号 版本回滚

命令:

git reset --hard  版本号

先说一下版本回滚是什么意思,上面我们已经提交commit一次是一个版本,如果我们修改之后再提交commit一次,此时就是两个版本,而此时是处于最新的版本,如果我们要回到第一个版本这就叫回滚。

下面是实例说明:
我们继续修改git_test.py文件,在该文件里再添加一行文字:“开发完成进出入模块”,此时的文件已经被修改啦,内容如下:
在这里插入图片描述
下面就开是一系列的操作:查看转态->添加到库->提交->查看log->回滚,具体如下图:
(可以看到此是第二次提交的版本号的头指向master:HEAD->master)
在这里插入图片描述
用git log 可以查看到此时已经进行了两次提交,此时我们想回到第一次提交的状态应该怎么办呢?此时只要用git log查看版本号和提交时的message信息,就可以定位到第一次提交的版本号。上面蓝色框起来的就是第一次提交的版本号,下面让我们一起回滚吧:

git reset --hard 1249aeab1df156cda5d2245b073c9554f6a0a03b

如下图:可以看到,此时的HEAD已经指回到第一次的状态
在这里插入图片描述
下面我们再来看看git_test.py文件的内容是不是第一次提交时的内容:
在这里插入图片描述
哦嘛噶,真的回滚回去啦,神奇不,哈哈哈啊


2、git reflog 查看所有的提交记录

上面是往前回滚
往前回滚之后,我们再查用git log 查看提交记录的时候,第二次提交的记录已经不在啦,如下图,怎么办,拿到真的是一去不复返了吗
在这里插入图片描述
大家不要慌,只要是真爱,我们也可以往后滚,此时用命令git reflog 就可以查看到多有的提交记录,之前回滚的记录也会出来,如下图:
在这里插入图片描述
此时我们我们可以看到第二次的提交记录又回来,但是我们看到的版本号变短了,其实两个是一样的,然后我么在往后滚会到第二次提交的状态(可以看出git log 相当于记录当前的版本提交信息,git reflog相当于记录了历史所有的版本提交信息):
在这里插入图片描述
然后我们在看一下git_test.py文件内容有没有回到第二次提交的状态:
在这里插入图片描述
哈哈,果然回来啦,确认无误,是真爱!


总结上面的内容:

  • 进入你想要管理的文件夹
  • git init
  • git status
  • git add .
  • git commit -m “一定要好好写”
  • =========================
  • git log
  • git reset --hard 版本号
  • git reflog
  • git reset --hard 版本号

2、git 的高级使用2

现在又开发了一个“开发商品货架模块”,然后用commit上线提交啦,如下:
在这里插入图片描述
在这里插入图片描述

紧接着又接着开发“开发货架商品识别模块 1 / 2” 但是开发一半,突然发现上面开发的“开发商品货架模块” 有bug,此时要回去修改bug,但是现在的商品识别模块只开发了一半,不能commit上线提交,怎么办 ?
在这里插入图片描述
此时的办法就是:把现在开发的商品
识别模块暂存在一个地方(并没有提交),用git stash。
之后就会看到修改之后并且没有提交的“开发货架商品识别模块 1/ 2” 被暂存起来了,然后我们修改bug之后再进行提交。

1、git stash 把没有提交的代码暂存在某个地方,命令:
git stash

从下图可以看到,开发的商品模块我们并没有commit 提交,所以是飘红的,然后我们用git stash 把开发一半的商品识别模块暂存起来,之后再用git status 查看的时候已经没有啦,因为已经
在这里插入图片描述

在这里插入图片描述

2、git stash pop 进行把暂存的代码拿回来,命令:
git stash pop

bug修复完成之后,我们用git stash pop把暂存的“开发货架商品识别模块 1/ 2”拿回来,然后继续开发,但是拉回来之后发现出现冲突,这时就需要我们手动去进行修改啦。
在这里插入图片描述
注意:

  • 如果是同一个文件进行修改 git stash pop拉回来之后可能会出现冲突,此时只能通过手动修改
  • 如果修复的bug和暂存起来的不是同一个文件,不会出现合并的时候的冲突
3、git stash 一些其他命令的使用

在这里插入图片描述

  • git stash:将当前工作区所修改的内容存储到“某个地方”(此时修改之后是没有git add 和git commit操作的),将工作区还原到当前版本未修改过的状态
  • git stash list:查看“某个地方”存储的所有记录(暂存的记录)
  • git stash clear:清空“某个地方”(清空所有的暂存)
  • git stash pop:将第一个记录从“某个地方”重新拿到工作区(可能有冲突)(就是上面stast@{0},取数字最大的那一个,数字就是暂存的编号)
  • git stash apply: 编号,将指定编号的记录从“某个地方”重新拿到工作区(可能有冲突)
  • git stash drop:编号,删除指定编号的记录

注意:

真正公司出现bug不会用git stash 进行解决,自己平时用可以,用的更多的是基于分支进行修改bug,下面介绍。

3、git 高级使用3

1、git branch 创建分支,命令:
git branch <分支名>

相当于是两个环境,没有任何影响。下面创建完分支后,然后在切换分支的啥时候出现错误,是因为先要把当前修改的分支进行提交commit之后,才能才能正确的切换分支
在这里插入图片描述

2、git checkout 切换分支,命令:
git checkout <分支名>

从后面显示的dev 可以看到已经正确的从master分支切换到了dev分支上
在这里插入图片描述

当然还可以用git branch -b dev 创建并切换到分支,但是我现在用的版本已经没有这个-b参数啦,不知道你们的有没有,如果有的话,你可以尝试使用。

下面我们在dev中创建一个a.py 文件

在这里插入图片描述
可以看到在切换到master上的时候,在dev下创建的a.log文件并不在,所以两个环境是分开的。
在这里插入图片描述

3、git merge合并分支,命令:
git merge <分支名>

在那个分支,就是把这个分支名合并到当前分支。
现在我们把上面dev分支合并到master分支下,所以就可以看到master下面现在是有a.log文件的啦。
在这里插入图片描述
在合并的时候需要写一点类似commit -m message的message的信息,自己编辑一下就可以,如下。
在这里插入图片描述
所有修复bug也可以用这种方式,先创建一个bug分支修复好bug之后,再合并回到master分支上,最后把bug分支删除。

注意:

git merge 合并的时候会产生冲突,此时就要进行手动修改啦(产生冲突一般就是由于修改了同一个文件的内容,所以合并的时候就会出现冲突。)


总结上面:
当要紧急修复bug,操作流程如下:

  1. 将dev 中现在正在开发的功能提交到dev
  • git add .
  • git commit -m “xxxxx”
  1. 切换到主分支(master分支)
  • git checkout master
  1. 创建并切换到bug分支
  • git branch bug
  • git checkout bug
  • 在bug分支上进行修复
  • git add .
  • git commit -m “xxxx”
  1. 切换回master分支,合并修复的bug分支,最后删除bug分支
  • git checkout master
  • git merge bug
  • git branch -d bug
  1. 查看当前有哪些分支
  • git branch 或git branch -a 或git branch --all

面试题1:加入你们公司现场代码出现bug,你应该怎么办?
答: 创建一个bug分支,在bug分支上进行修复,修复完成之后再合并到master分支上。修复完之后再回到dev继续开发


面试题2:git rebase是什么意思 / 作用?
rebase 和merge都是做合并操作的,但git rebase 将提交记录合并到一条主线,提交记录整洁。

git rebase合并也有可能会冲突,手动解决完冲突之后,再执行git rebase --skip 跳出去

git merge master 把master合并到dev上,用Git GUI 查看合并分支如下:
在这里插入图片描述
git rebase dev 把dev合并到master(兰蓝框),用Git GUI 查看合并分支如下图,可以看到用rebase合并更整洁。

(如果想保存每一次合并的记录就用merge,如果想要更整洁就用rebase)

在这里插入图片描述

四、Git远程仓库使用

比如我们在公司写的代码,下班之后还想回去继续写,但是我们又不想带电脑回去,住处有一台电脑,但是没有在公司写的代码,怎么办呢?

  • 可以用U盘考一份回去,回去继续写
  • 存到百度云,然后回去下载下来继续写
  • 存到版本存储仓库

这个版本存储仓库就类似百度云网盘:

公共的版本存储仓库:

  • github(国外,github上也有私有账户)
  • 码云(国内:开源中国的,码云会给几个免费的私有仓库)
  • 国内还有很多其他的,不做列举

自己搭建:

  • gitlab

用gitlab几条命令就可以搭建一个代码存储仓库,虽然说存储在其他平台可能不太安全,但是自己搭建也有一定个弊端,首先要有一台服务器,还有要做好代码的备份和安全措施,方式黑客攻击代码泄漏。

1、在码云上创建版本存储仓库

1、注册码云账号
下面我去注册一个码云的账号试一下:
在这里插入图片描述

2、创建版本存储仓库
在这里插入图片描述
在这里插入图片描述

创建完成显示如下:
(test_git就相当于是一个文件夹,之后项目的代码就会推送到这个文件夹中)
在这里插入图片描述
之前我们已经在本地初始化一个仓库啦,现在我们来说一下具体使用和上面的一些参数:
分成两种情况:

  • 一种是从头开始创建一个仓库
  • 另外一种是已经有现有的仓库

很显然我们是已经创建过啦,我们只要把目前所有提交都合并master分支,然后存储到码云上即可。

1、git remote add 添加存储仓库地址
git remote add origin https://gitee.com/shliang/test_git.git

作用: 添加远程仓库的地址,然后给这个远程仓库地址https://gitee.com/shliang/test_git.git起一个别名叫origin ,你如果觉得不好可以自己起。

2、git push 把本地仓库推到远程存储仓库中
git push origin master

推到码云自己创建的仓库的时候会要你填写在码云的用户名和登陆密码
在这里插入图片描述
下面是推到远程版本存储仓库成功显示信息如下
在这里插入图片描述
之后我们刷新一下网页,就可以看到本地仓库的master分支代码已经存储到了码云存储仓库
在这里插入图片描述

dev这个分支也可以推过来,我们开发的代码都放到dev这个分支上。

git push origin dev

作用:
在这里插入图片描述

3、git clone 把代码从版本存储仓库下载下来

我们创建一个家里的电脑文件夹表示在家里的电脑
在这里插入图片描述

cd 家里的电脑/
# 把代码从远程存储仓库下载下来
git clone https://gitee.com/shliang/test_git.git

在这里插入图片描述
从上面可以看到,我们已经成功把代码克隆到家里的电脑,但是我们继续开发要在dev分支上进行怎么办,此时只有master分支。
在这里插入图片描述

4、git pull

我们就可以通过以下流程进行切换到dev上进行开发:

  • git branch dev: 创建一个dev分支
  • git checkout dev:切换到dev分支
  • git pull origin dev :把远程存储仓库中的dev分支更新到现在的dev分支中,此时就是我们正在开发的代码啦

这个origin在我们进行git clone URL的时候,就已经默认给这个URL起了别名叫origin,所以可以直接用
在这里插入图片描述
这样就可以在家里的电脑进行继续在dev分支进行写代码啦:
在这里插入图片描述
在这里插入图片描述

到了公司之后在把代码从dev上拉下来继续开发,如下:

在这里插入图片描述


上面总结:
码云使用:

1、注册账户 + 创建项目 + 拷贝地址https://gitee.com/shliang/test_git.git
2、在公司本地代码推送远程

  • cd 项目目录
  • git remote add origin https://gitee.com/shliang/test_git.git
  • git push origin master
  • git push origin dev
  • 继续写代码
  • git add .
  • git commit -m “提交记录”
  • git push origin dev

3、到家

  • 下载代码
  • git clone https://gitee.com/shliang/test_git.git
  • 创建目录
  • cd 目录
  • git init
  • git remote add origin https://gitee.com/shliang/test_git.git
  • git pull origin master
  • 创建dev分支
  • git checkout dev
  • git pull origin dev
  • 继续写代码
  • git add .
  • git commit -m “提交记录”
  • git push origin dev

五、git开发规范

面试题3:
问题:在公司怎么进行协同开发的呀?

答:为每个人创建一个分支

  • master
  • dev分支
  • review分支(组长做代码的review)
  • 开发员1的分支
  • 开发员2的分支

每个开发员把自己分支的代码都合并到review分支,组长负责检测review分支有没有问题,没有问题之后在合并到dev

面试题4:公司是否做代码的review(回顾 / 检查)? 谁做review?
答:组长,一般2天左右做一次review

面试题5:你有没有给开源的项目贡献过代码?

  • 项目的创建者添加自己为合作者,共同开发,就可以为该项目提交代码

  • 创建组织,邀请成员(可以在setting中进行设置相关权限)

1、github 的fork和pull request

面试题6:例如Django项目的创建者(此时已经和核心成员已经够了,不可能邀请你在一起开发啦),但是此时你怎么给别人贡献代码?

  • fork别人的项目,这个就相当于把被人的项目复制到自己的仓库中
  • 修改代码
  • 创建pull request 请求,当作者看到你的代码确定有用,就会接受(confirm commit )你的pull request,之后你提交的代码就会合并到项目作者的项目中,然后你也可以在项目作者的commit中看到自己的pull request记录,这就是记录了你的贡献呀!

2、git之gitignore

  • 创建gitignore 文件
  • 在gitignore 中填写或略的文件名(有很多.txt文件都忽略,就可以写成*.txt
    在这里插入图片描述把忽略的文件名写到gitignore 中,再次提交git status自动检测就已经没有检测到test_ignore.py文件啦,所以在提交的时候后面也不会有这个文件。
    在这里插入图片描述

gitignore书写规则,github官网上就有,搜索gitignore就进去啦,默认会忽略哪些文件,按照规则写就可以。也可以在创建仓库的时候选择gitignore,就会自动创建这个文件。

3、git tag

用于定义不同的版本V1, V2 …, git tag

·建议:

如果英语不太好,先用码云,然后用熟了在用github,这样就可以去对应的位置找到相应的功能

作业:
模拟自己创业,协同开发

  • 组长,创建仓库:合作者邀请成员
  • master/dev/review
  • 创建自己的分支
    • 写代码
    • 提交到自己的分支
  • 切换到review分支,将个人的分支代码合并到review,如果报错:说明已经有人在这段时间先提交啦。j解决冲突:先把远程review拉下来,之后在合并到review,最后再推导远程项目仓库。
  • 组成review分支:看一看,没有问题
  • 在本地合并到dev分支
  • 将本地dev推动到代码仓库

一定不要将公司的代码放到自己的github账户上

参考:
1、https://www.cnblogs.com/wupeiqi/p/7295372.html
2、https://www.liaoxuefeng.com/wiki/896043488029600

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

相关文章:

git详细使用教程

文章目录 一、 git介绍与安装1、git介绍2、git的安装3、git使用前的说明 二、git的基础使用1、走进git之前2、git基础使用1、git init 项目初始化&#xff08;init&#xff09;成仓库&#xff08;repository&#xff09;2、git add 管理文件3、git commit 把文件提交到仓库&…...

java实现word转html(支持docx及doc文件)

private final static String tempPath "C:\\Users\\xxx\\Desktop\\Word2Html\\src\\test\\";//图片及相关文件保存的路径public static void main(String argv[]) {try {JFileChooser fileChooser new JFileChooser();fileChooser.setDialogTitle("Select a …...

搜维尔科技:Xsens人形机器人解决方案的优势

Xsens 致力于推动人形机器人技术的发展&#xff0c;塑造机器人与人类环境无缝融合的未来&#xff0c;通过创新精确和协作&#xff0c;协助生产和服务&#xff0c;改善人类生活和产业。 Xsens通过人形跟随捕捉详细的人体运动数据&#xff0c;使机器人能够学习类人的动作&#x…...

【王树森搜索引擎技术】概要01:搜索引擎的基本概念

1. 基本名词 query&#xff1a;查询词SUG&#xff1a;搜索建议文档&#xff1a;搜索结果标签/筛选项 文档单列曝光 文档双列曝光 2. 曝光与点击 曝光&#xff1a;用户在搜索结果页上看到文档&#xff0c;就算曝光文档点击&#xff1a;在曝光后&#xff0c;用户点击文档&…...

《Java核心技术II》可中断套接字

4.2.4 可中断套接字 SocketChannel可以中断套接字 SocketChannel channel.open(new InetSocketAddress(host,port)); 通道(channel)并没有与之相关联的流&#xff0c;实际上&#xff0c;所拥有的read和write方法都是通过Buffer对象实现的。 如果不想处理缓冲区&#xff0c;…...

基于 Python 的深度学习的车俩特征分析系统,附源码

博主介绍&#xff1a;✌stormjun、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

C#读写ini配置文件保存设置参数

本示例使用设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b5P5rkA&ftt&id22173428704 [DllImport("kernel32", CharSet CharSet.Unicode)] public static extern uint GetPrivateProfileString(string lpAppName, stri…...

SwanLab环境变量列表

文章目录 环境变量全局配置服务配置登录认证其他 环境变量 ⚙️完整环境变量1 -> Github、⚙️完整环境变量2 -> Github 全局配置 环境变量描述默认值SWANLAB_SAVE_DIRSwanLab 全局文件夹保存的路径用户主目录下的 .swanlab 文件夹SWANLAB_LOG_DIRSwanLab 解析日志文件…...

深度学习入门-CNN

一、CNN是什么 CNN&#xff0c;即卷积神经网络&#xff08;convolutional neural network&#xff09;&#xff0c;是用于预测的标准神经网络架构。在人工智能的广阔领域中&#xff0c;CNN被用于图像识别、语音识别等各种场合&#xff0c;CNN通过模拟人类视觉皮层的神经元连接方…...

微服务网关,如何选择?

什么是API网关 API网关&#xff08;API Gateway&#xff09;是微服务架构中的一个关键组件&#xff0c;它充当了客户端与后端服务之间的中间层。其主要功能包括请求路由、协议转换、负载均衡、安全认证、限流熔断等。通过API网关&#xff0c;客户端无需直接与多个微服务交互&a…...

SpringBoot集成Mqtt服务实现消费发布和接收消费

该项目介绍了docker环境下如何安装mqtt和springboot集成mqtt服务 前述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,设计用于在资源受限的设备和低带宽、不可靠的网络连接中高效地传输数据。主要用于物联网设备传输,设备之间可以高效地交换数据…...

在Mac mini上实现本地话部署AI和知识库

在Mac mini上实现本地话部署AI和知识库 硬件要求&#xff1a;大模型AI&#xff0c;也叫LLM&#xff0c;需要硬件支持&#xff0c;常见的方式有2种&#xff1a;一种是采用英伟达之类支持CUDA库的GPU芯片或者专用AI芯片&#xff1b;第二种是采用苹果M系列芯片架构的支持统一内存架…...

一个方法被多个线程同时调用,确保同样参数的调用只能有一个线程执行,不同参数的调用则可以多个线程同时执行

我们知道通过lock一个固定静态object给代码段加同步锁&#xff0c;可以让多个线程的同时调用以同步执行&#xff0c;因此可以利用字典来给不同参数分配不同的静态对象&#xff0c;方法中不同的参数调用锁住各自不同的静态对象即可实现不同参数不加锁&#xff0c;相同参数才加锁…...

3. MySQL事务并发的问题与解决方法

一. 并发事务带来的问题 并发会造成事务间出现脏读&#xff0c;不可重复读&#xff0c;幻读现象。 1. 脏读 一个事务在处理过程中读取了另外一个事务未提交的数据。若另外一个事务回滚&#xff0c;则读取到的数据是无效的&#xff0c;又称为脏读。 2. 不可重复读 在一个事务…...

25/1/15 嵌入式笔记 初学STM32F108

GPIO初始化函数 GPIO_Ini&#xff1a;初始化GPIO引脚的模式&#xff0c;速度和引脚号 GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的引脚0 GPIO输出控制函数 GPIO_SetBits&#xff1a;将指定的GPIO引脚设置为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将GPIO…...

MySQL的不同SQL模式导致行为不同?

现象&#xff1a; 我在两个mysql库都有相同定义的表&#xff0c;其中一个字段是varchar(1200)。当我都对这个表进行insert操作&#xff0c;而且超过此字段的规定长度&#xff08;此处是1200&#xff09;&#xff0c;这两库的行为是不一样的&#xff1a;库B是直接报错too long&…...

Flink 使用 Kafka 作为数据源时遇到了偏移量提交失败的问题

具体的错误日志 21:43:57.069 [Kafka Fetcher for Source: Custom Source -> Map -> Filter (1/1)#2] ERROR org.apache.kafka.clients.consumer.internals.ConsumerCoordinator - [Consumer clientIdconsumer-my-group-6, groupIdmy-group] Offset commit failed on pa…...

【日志篇】(7.6) ❀ 01. 在macOS下刷新FortiAnalyzer固件 ❀ FortiAnalyzer 日志分析

【简介】FortiAnalyzer 是 Fortinet Security Fabric 安全架构的基础&#xff0c;提供集中日志记录和分析&#xff0c;以及端到端可见性。因此&#xff0c;分析师可以更有效地管理安全状态&#xff0c;将安全流程自动化&#xff0c;并快速响应威胁。具有分析和自动化功能的集成…...

LSA更新、撤销

LSA的新旧判断&#xff1a; 1.seq&#xff0c;值越大越优先 2.chksum&#xff0c;值越大越优先 3.age&#xff0c;本地的LSA age和收到的LSA age作比较 如果差值<900s&#xff0c;认为age一致&#xff0c;保留本地的&#xff1a;我本地有一条LSA是100 你给的是400 差值小于…...

DevUI 2024 年度运营报告:开源生态的成长足迹与未来蓝图

在当今数字化飞速发展的时代&#xff0c;开源已成为推动技术创新与协作的重要力量。DevUI 作为开源领域的重要一员&#xff0c;其发展历程与成果备受关注。值此之际&#xff0c;GitCode 精心整理了 DevUI 年度运营报告&#xff0c;为您全面呈现 DevUI 社区在过去一年里的开源之…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...