day57_Git

news2024/12/28 5:48:44

今日内容

零、 复习昨日

零、 复习昨日

image-20230614180815444

文章目录

  • 零、 复习昨日
  • 一、引言
  • 二、介绍
  • 三、Git安装
    • 3.1 下载Git
    • 3.2 安装
    • 3.3 基本配置
    • 3.4 测试
  • 四、架构
  • 五、仓库
    • 5.1 新建仓库
    • 5.2 工作区
    • 5.3 暂存区
    • 5.4 分支
  • 六、基本操作
    • 6.1 查看仓库状态
    • 6.2 暂存文件
    • 6.3 提交文件
    • 6.4 撤销已经add的文件
    • 6.5 撤销已经commit的文件
    • 6.6 revert和reset的区别
  • 七、分支
    • 7.1 分支简介
    • 7.2 分支操作
      • 7.2.1 查看分支
      • 7.2.2 创建分支
      • 7.2.3 切换分支
    • 7.3 新建分支细节
      • 7.3.1 新分支初始内容
      • 7.3.2 多分支走向
      • 7.3.3 分支提交日志
    • 7.4 分支合并
    • 7.5 合并冲突
      • 7.5.1 冲突演示
      • 7.5.2 冲突解决
    • 7.6 日志
  • 八、远程仓库
    • 8.1 远程仓库工作模式
    • 8.2 远程仓库选型
    • 8.3 基本操作
      • 8.3.0 注册git服务器账号
      • 8.3.1 秘钥&公钥
      • 8.3.2 新建远程仓库
      • 8.3.3 本地关联远程仓库
      • 8.3.4 推送文件到远程仓库
      • 8.3.5 克隆远程仓库
      • 8.3.6 代码共享
      • 8.3.7 拉取推送远程其他分支
      • 8.3.8 命令汇总
  • 九、Idea关联Git
    • 9.1 关联Git
    • 9.2 创建仓库
    • 9.3 提交-commit
    • 9.4 创建分支-branch
    • 9.5 上传到远程仓库(push)
    • 9.6 复制到本地仓库(clone)
    • 9.7 更新本地项目
    • 9.8 冲突解决
    • 9.9 撤销修改
      • 9.9.1 未commit时
      • 9.9.2 已commit时
    • 9.10 stash
  • 十、多人协同开发
    • 10.1 项目管理员( 项目经理 )
    • 10.2 开发人员
    • 10.3 实战
  • 十一、经典问题
  • 十二、TortoiseGit
    • 12.1 安装
    • 12.2 汉化
    • 12.3 使用
  • 十二、TortoiseGit
    • 12.1 安装
    • 12.2 汉化
    • 12.3 使用

一、引言


  • 在单人开发过程中,需要进行版本管理,以利于开发进度的控制。

  • 在多人开发过程中,不仅需要版本管理,还需要进行多人协同控制。

  • 版本控制(VS)

  • SVN

  • GIT

二、介绍


  • Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
  • 官网:https://git-scm.com/
  • 其实市面上有其他的版本管理工具,例如SVN

三、Git安装


3.1 下载Git

下载Git https://git-scm.com/downloads

下载git
image-20230614180824693

3.2 安装

安装,除了安装位置外,其他一直下一步即可

使用

  • 使用cmd打开操作
  • 使用git自带命令行

3.3 基本配置

  • 安装后,打开命令行 ,自报家门

  • 如下信息会在提交代码时要使用,记录在你的每次提交中。以后才知道哪次提交是谁做的。

git config --global user.name "Your Name"  #用户名
git config --global user.email "email@example.com"  #邮箱
# 查看信息
git config -l

3.4 测试

测试:cmd中执行 ,查看git版本

git version  

四、架构


  • 版本库:工作区中有一个隐藏目录 .git,这个目录不属于工作区,而是git的 版本库,是git管理的所有内容

  • 暂存区:版本库中包含一个临时区域,保存下一步要提交的文件。

  • 分支:版本库中包含若干分支,提交的文件存储在分支中

架构图
image-20230614180830295

五、仓库


对应的就是一个目录,这个目录中的所有文件被git管理起来。

以后会将一个项目的根目录,作为仓库。

仓库中的每个文件的改动 都由git跟踪。

5.1 新建仓库

选择一个目录,执行指令:git init

新建仓库仓库目录
image-20230614180839053image-20230614180846919

5.2 工作区

执行git init的目录即为工作区,如上例,D:\repo1目录即为工作区【不包含.git目录】

所有文件,都首先在工作区新建,然后可以存入仓库(版本库),进行版本控制。

5.3 暂存区

暂存区也在 .git 目录内,工作区的文件进入仓库时,要先进入暂存区。

5.4 分支

版本控制,简单说,就是记录文件的诸多版本,分支就是这些版本的最终记录位置。

六、基本操作


6.1 查看仓库状态

执行 git status 可以看到工作区中文件的状态

未记录过的文件,是未跟踪状态
image-20230614180856962

6.2 暂存文件

执行 git add . 将工作区中的文件全部存入暂存区

将工作区中的文件存入暂存区
image-20230614180903392

6.3 提交文件

执行 git commit -m “这里写提交的描述信息” 作用是将暂存区的文件存入分支,形成一个版本

提交文件,形成一个版本
image-20230614180909777

6.4 撤销已经add的文件

有一个文件,已经执行了git add 提交到暂存区,此时可以使用命令撤销

image-20230616111310490

git restore --staged 文件名

6.5 撤销已经commit的文件

文件已经commit也可以回退,这种回退叫版本回退,两种方案

  • git reset
  • git revert
  • git log查看版本号
  • git reset
    • git reset [–soft | --mixed | --hard] 版本号
    • 默认是mixed
    • minxed:回退到指定版本后,该版本之后的修改放在工作区,没有放在暂存区,即回退了commit和add操作
    • soft:回退到指定版本后,该版本之后的修改放在暂存区,即回退了commit操作
    • hard:回退到指定版本后,该版本之后的修改都会删除
git reset HEAD^    #回退到上一个版本,windows系统,^有特殊意思,HEAD^需要使用双引号
git reset HEAD^^   #回退到上上一个版本
git reset HEAD~    #回退到上一个版本
git reset HEAD~2   #回退到上上个版本,~ 后面的数字表示回退几次提交,默认是一次
git reset db65e3c98e7e1f25887ebe66d50cd9120aea2ca0  #回退到指定的版本号的提交

# 回退到上一个版本
git reset --mixed HEAD~
git reset --soft HEAD~
git reset --hard HEAD~
  • git revert
    • 通过该命令可以撤销某次提交,撤销提交时,原来的提交记录还会保留,同时会生成一个新的提交
    • 如果revert时,不想自动生成新的提交,可以使用-n选项,比如 git revert -n head
git revert head  撤销最近一次的提交
git revert head~ 撤销上一次的提交
git revert 735fdbb5156f4303516ed5c3a963f1

6.6 revert和reset的区别

  1. Git revert:Git revert命令用于撤销之前的提交,但是通过创建一个新的提交来反转先前的提交,而不改变Git仓库的历史记录。也就是说,它会创建一个新的提交,将先前提交的更改全部撤销掉。这个新的提交会包含对旧提交的撤销操作,因此历史记录中会保留撤销了的更改。

    使用Git revert时,需要指定要撤销的提交的引用或提交哈希值。Git会自动生成一个新的提交,该提交的更改与撤销的提交相反。因此,Git revert是一种安全的方法来撤销错误的提交,并保留所有的修改历史记录。

  2. Git reset:Git reset命令用于将HEAD指针和当前分支的指针重置到指定的提交,从而改变Git仓库的历史记录。它可以用于撤销提交、删除提交、合并分支等操作。

    Git reset有三个主要的模式:–soft、–mixed(默认)和–hard。–soft模式将HEAD指针和分支指针重置到指定提交,但不修改工作目录和暂存区,可以用来撤销最后的提交。–mixed模式不仅重置HEAD和分支指针,还重置了暂存区,但不改变工作目录的文件内容。–hard模式是最彻底的,它会丢弃所有未提交的更改,包括暂存区和工作目录的修改。

    使用Git reset时,需要指定要回退到的提交的引用或提交哈希值。根据使用的模式不同,Git会将HEAD和分支指针移动到指定提交,并可能修改暂存区和工作目录。

总结起来,Git revert是通过创建一个新的撤销提交来撤销之前的提交,保留历史记录;而Git reset是通过改变HEAD和分支指针的位置来修改历史记录,可能会删除或修改提交。选择使用哪个命令,取决于你需要保留历史记录还是改变历史记录,并且是否需要保留之前提交的更改。

七、分支


7.1 分支简介

  • 分支,是一个个版本最终存储的位置。

  • 分支,就是一条时间线,每次git commit形成一个个版本,一个个版本依次存储在分支的一个个提交点上。

分支由多个提交点组成,分支上会有一个指针,默认总是指向最新的提交点
image-20230614181051746

7.2 分支操作

7.2.1 查看分支

  • 查看当前仓库的分支 git branch

  • 仓库中默认只有 master 分支

  • 执行git commit时,默认是在master分支上保存版本。

默认只有master分支
image-20230614181056964

7.2.2 创建分支

  • 在商业项目开发过程中,我们不会轻易的在master分支上做操作。

  • 我们会新建一个开发用的分支,在此分支上做版本的记录。

    当代码确实没有问题时,才会将开发分支上成熟的代码版本添加到master分支上。

  • 保证开发过程中,可以及时记录版本,又保证master分支上每个提交点都是稳健版本。

创建分支
image-20230614181102201

7.2.3 切换分支

  • 默认情况下,当前使用的分支是 master分支

  • 可以切换到 dev分支(git checkout dev),则后续的git commit 便会在dev分支上新建版本(提交点)

切换分支
image-20230614181106515
再次查看分支情况
image-20230614181112310

7.3 新建分支细节

新建分支时,新分支,默认有哪些内容?分支中包含了哪些次提交?

新分支,默认有哪些内容?新分支拥有之前分支的全部内容

7.3.1 新分支初始内容

每个分支都有一个指针,新建一个分支,首先是新建一个指针。

而且新分支的指针会和当前分支指向同一个提交点。

新分支包含的提交点就是从第一个提交点到分支指针指向的提交点。(内容一样)

每个分支都有一个指针,新建一个分支,首先是新建一个指针
image-20230614181117399

7.3.2 多分支走向

在master分支和新分支,分别进行 git add 和 git commit

分支情况如下图:

master分支未动,在dev分支增加一次commit
image-20230614181121885
master分支增加一个commit,dev分支再增加一个commit
image-20230614181125979

7.3.3 分支提交日志

查看分支的提交日志,进而看到分支中提交点的详细情况。

提交情况如下
image-20230614181133827
查看当前分支的提交日志
image-20230614181143386

7.4 分支合并

两个分支内容的合并

git merge 分支a 合并分支a

合并前,分支状态
image-20230614181216542
三方合并,将23的更改都累加在1上,形成新的提交点
image-20230614181224464

7.5 合并冲突

两个分支进行合并,但它们含有对同一个文件的修改,则在合并时出现冲突,git无法决断该保留改文件哪个分支的修改。

7.5.1 冲突演示

场景模拟如下:

master分支修改hig.txt文件
image-20230614181240352
dev分支修改hig.txt
image-20230614181253109

在master分支 合并 dev分支

合并dev分支
image-20230614181304573

此时,打开hig.txt 文件:

冲突后,git会将两个分支的内容都展示在文件中
image-20230614181311331

7.5.2 冲突解决

出现冲突后,如要由两个开发人员当面协商,该如何取舍,为冲突文件定义最终内容。

解决方案:

  1. 保留某一方的,删除另一方的
  2. 保留双方的
  3. 但无论如何,要记得删除 <<<< ==== >>>> 这些
  4. 本质是两人协商为冲突的内容,定制出合理的内容。
  5. 修改完,继续git add /git commit
根据协商,再次编辑文件
image-20230614181321034
提交 再次编辑后的文件
image-20230614181326344

7.6 日志

每次commit都会在分支上形成新的提交点,通过日志可以看到提交的信息

git log

image-20230616114749714

也可以以图形的形式查看提交树

git log --oneline --graph

image-20230616114825528

八、远程仓库


第5章中的仓库,其实是本地仓库。

当多人协同开发时,每人都在自己的本地仓库维护版本。

但很重要的一点是,多人之间需要共享代码、合并代码,此时就需要一个远程仓库。

8.1 远程仓库工作模式

远程仓库工作模式
image-20230614180916078

8.2 远程仓库选型

  • 有很多远程仓库可以选择,比如 github(https://github.com/),码云(https://gitee.com/);

    此两种可以注册自己测试使用,但如果是商业项目,需要更多支持需要付费。

  • 公司内部也可以有自己构建的远程仓库 (GitLab/Gogs)(http://qianfeng.qfjava.cn:8087/users/sign_in)。

8.3 基本操作

每个开发人员,在面对远程仓库时,会面临的一些基本操作。

8.3.0 注册git服务器账号

在 码云 注册账号,并登录。

进入公司后,很可能会使用公司自己搭建的git服务器,则账号向领导索要即可

8.3.1 秘钥&公钥

1> 查看秘钥(ssh key)

cat ~/.ssh/id_rsa.pub

2> 创建SSH Key

ssh-keygen -t rsa -C “youremail@example.com”

image-20230614180924949

直接回车不要输入123456密码.直接按3次回车即可.不输密码

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

image-20230614180930510

3>登录github或者gitee,进入设置-SSH公钥,文本框里填入公钥id_rsa.pub文件的内容

image-20230614180935062

为什么GitHub或Gitee需要SSH Key呢?因为它们需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub/Gitee只要知道了你的公钥,就可以确认只有你自己才能推送。

当然,GitHub/Gitee允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

8.3.2 新建远程仓库

创建远程私有仓库-01
image-20230614180939879
创建远程私有仓库-02
image-20230614180944297
创建远程私有仓库-03
image-20230614180949349

8.3.3 本地关联远程仓库

本文档中选用仓库的 https协议的地址,将此地址关联到本地git中

如此后,本地即可用“origin” 代指远程仓库
image-20230614180957728
git remote add origin https://gitee.com/qiushiju/test.git

8.3.4 推送文件到远程仓库

将本地仓库中已经commit的内容push到远程仓库,以共享自己的代码。

git push -u origin "master"
push
image-20230614181003202
输入凭证,如此码云才能接受此次上传的内容

8.3.5 克隆远程仓库

如果仓库已经由别人创建完毕,我们需要其中的内容,则可以通过 git clone 将其复制到本地。

新建目录“repo2”,然后在其中执行 git clone
image-20230614181016982
远程仓库,复制到本地,并自动初始化为一个本地仓库
image-20230614181022088

8.3.6 代码共享

多人协同开发时,写好代码的git push 上传到远程仓库;需要代码的 git pull 拉取代码即可。

有人再次将本地仓库内容,上传到了远程仓库
image-20230614181029951
重点:此时另一方如果想获得更新,则需要做一次拉取 git pull
image-20230614181042266

【重点】每次想要往远程push代码,一定要先git pull,因为有可能远程代码已经更新,而你本地代码没有远程代码同步,此时直接push会拒绝!所以一定要先git pull拉取远程最新代码,与本地代码合并,合并后再执行git push推送到远程

8.3.7 拉取推送远程其他分支

# 拉取全程dev分支代码
git pull origin dev

# 将本地master代码推送到远程dev分支
 git push origin master:dev

8.3.8 命令汇总

命令描述
git remote add 标识名(master) 远程地址本地关联远程仓库
git push 标识名 master将本地仓库内容上传到远程仓库
git pull 标识名 master从远程仓库下载内容到本地仓库
git clone 远程地址将远程仓库复制到本地,并自动形成一个本地仓库

在这里插入图片描述

九、Idea关联Git


9.1 关联Git

File > Settings 关联过程是自动的

此处关联是Idea可以自动完成的
image-20230614181332874

9.2 创建仓库

  • 新建项目后,将项目目录创建为git仓库

  • 注意: 要在建仓库前,设置忽略文件 “.gitignore”

    作用:被忽略的文件会被版本记录忽略,版本中不包含它们。

    范围:不需要和其他开发共享的文件,具体见下图。

# 所有class,后缀的文件
*.class
# 所有jar后缀的文件
*.jar
*.iml
*.war
# .idea文件夹
.idea
# out文件夹
out
target
创建仓库前,先添加忽略文件
image-20230614181341931
将项目目录初始化为一个仓库
image-20230614181357546
image-20230614181352810

9.3 提交-commit

创建好仓库后,做第一次提交。

选择提交菜单
image-20230614181412165
选择提交文件,定义提交信息
image-20230614181421275
之后会有些友好提示,可以忽略,点击“commit”即可
image-20230614181430481

9.4 创建分支-branch

新建开发分支

点击右下角链接,即可
image-20230614181437015
新建分支
image-20230614181444208
查看当前分支
image-20230614181453062
在其他分支修改并push到远程
image.pngimage.png

9.5 上传到远程仓库(push)

  • 请首先参照第8章,创建一个远程仓库。

  • 要求是裸库,且建议库名和项目名同名。

选择push菜单
image-20230614181459731
定义远程仓库地址
image-20230614181505461
执行,push操作
image-20230614181516469
push成功后 ,弹窗提示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jOSBFQc4-1686983091893)(Git.assets/idea-push5.jpg)]

9.6 复制到本地仓库(clone)

如果有建好的远程仓库,比如公司内已经在用的仓库,或者github,码云上的一些公开仓库,

可以将远程仓库的项目复制到本地使用。

点击克隆菜单
image-20230614181525775
输入如远程仓库地址
image-20230614181535874
打开项目
image-20230614181542802
打开项目,选项
image-20230614181548443

9.7 更新本地项目

如果远程仓库有更新,则你的本地项目也需要一起更新。

选择pull菜单
image-20230614181558966
执行 pull操作
image-20230614181608116
更新日志显示
image-20230614181618099

9.8 冲突解决

合并分支时,如果出现冲突,则需要解决冲突。

冲突出现,弹窗中可以选择如下
image-20230614181628118
也可以直接修改冲突文件,然后commit即可
image-20230614181642587

9.9 撤销修改

9.9.1 未commit时

还没有add文件时,可以直接删除要删除或修改的文件,因为此时还没有经过仓库管理

如果已经add,但是还没有commit,此时只是在暂存区

image.png image.png

9.9.2 已commit时

如果已经提交,先显示历史记录

image.png

image-20230617071627622

选中要退回到的提交点,右键拷贝版本id

image-20230617071851232

然后关闭窗口,重新操作git–> reset HEAD

image-20230617072011087

image-20230617072314940

ps: reset type 与版本回退章节中命令意思一致

9.10 stash

用于将当前分支未提交的修改(工作区的修改和暂存区的修改)先暂时缓存起来。

适用于正在一个分支进行开发,但是需要切换到另一个分支进行bug处理,但是又不想提交当前分支代码的情况。

比如在B分支进行了修改,现在需要切换到A分支。

1)在B分支上执行stash,B分支的代码会恢复到修改前状态

image-20230617075413974

image-20230617075447856

2)切换到A分支,修改代码并提交

3)切回到B分支,恢复之前的代码,继续开发

image-20230617075539250

image-20230617075601477

十、多人协同开发


多人开发协同,git操作

10.1 项目管理员( 项目经理 )

1> 由管理员负责创建一个远程库,初始的库中什么也没有,为裸库。库的名称建议和项目同名

2> 管理员会在idea中创建一个初始项目,其中包含.gitignore文件。 并在项目根目录下 建立本地库。并建立 dev分支。

3> 管理员将本地库上传到远程库

4> 将其他开发人员拉入远程库的 开发成员列表中 ,使得其他开发人员可以访问该远程库。

流程如下:

点击添加成员
image-20230614181651237
被邀请成员接受
image.png
查看已添加的开发成员
image-20230614181711494

5> master分支设置为 protected分支,只有管理员有权限将代码合并到其中。dev分支设置为 常规分支所有开发人员 都可以其中合并代码

进入分支设置
image-20230614181721807
设置保护分支,让master分支不能被随更改
image-20230614181727075

10.2 开发人员

  • 1初始化:在idea中clone 远程库,获得项目。会建立本地库

  • 2后续的开发中,都要在dev分支上进行。开发完一个功能并测试通过后就commit 提交到本地的dev分支中,然后 上传(push)到远程dev分支中。

  • 3需要更新项目内容时,通过 pull 从远程仓库拉取内容。

  • 4注意:多人协同时,每次在 push 到远程库前,都先做一次pull,一来是把远程最新内容合并到本地,二来是核实本地内容是否和远程内容有冲突。

  • 5后续的开发,会接到一个个的功能任务,往复操作 2>、3>、4> 而已。

10.3 实战

方式1

  1. 组长创建远程仓库
  2. 把组员设置为开发者
  3. 把远程仓库克隆到本地,然后使用 idea 打开
  4. 团队开发 每个人创建一个自己的类

方式2

1.组长使用idea创建工程, 把工程分享到远程仓库

2.在远程仓库 邀请组员为开发者

3.组员使用idea 拉取远程仓库的工程

4.团队开发 每个人创建一个 自己的类

十一、经典问题


在使用https协议做push时,如果曾经使用过码云,但密码有过改动,此时会报错

使用https协议报错
image-20230614181735920

解决方案: 控制面板 》 凭据管理器 》 删除对应凭证,再次使用时会提示重新输入密码。

删除之前的码云凭证,然后重新push即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OzxXOQdh-1686983091897)(C:/Users/qiush/AppData/Roaming/Typora/typora-user-images/image-20230614181741714.png)]

十二、TortoiseGit

是一个开放的git版本控制系统的源客户端。不同的是:git是命令行操作模式,TortoiseGit界面化操作模式,不用记git相关命令就可以直接操作

12.1 安装

双击image-20230614181809193

安装,下一步下一步即可

12.2 汉化

双击image-20230614181825941

即可.

然后在任意一个空文件夹[右键],找到TortoiseGit–>Settings

image-20230614181833179

image-20230614181838958

此时再右键即可发现变成中文的了.

12.3 使用

演示 克隆,添加,删除,推送,拉取即可
|
| image-20230614181735920 |

解决方案: 控制面板 》 凭据管理器 》 删除对应凭证,再次使用时会提示重新输入密码。

删除之前的码云凭证,然后重新push即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDrCXgxb-1686983091898)(C:/Users/qiush/AppData/Roaming/Typora/typora-user-images/image-20230614181741714.png)]

十二、TortoiseGit

是一个开放的git版本控制系统的源客户端。不同的是:git是命令行操作模式,TortoiseGit界面化操作模式,不用记git相关命令就可以直接操作

12.1 安装

双击[外链图片转存中…(img-f6dSACCI-1686983091414)]

安装,下一步下一步即可

12.2 汉化

双击[外链图片转存中…(img-T3cxmPNp-1686983091415)]

即可.

然后在任意一个空文件夹[右键],找到TortoiseGit–>Settings

[外链图片转存中…(img-07JUwnLG-1686983091415)]

[外链图片转存中…(img-7jmvMtiK-1686983091415)]

此时再右键即可发现变成中文的了.

12.3 使用

演示 克隆,添加,删除,推送,拉取即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/656380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

POSTGRESQL PG_GATHER 如何单纯用SQL 就可以产生一个有意思的PG 的分析报告

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

【Android开发基础】Canvas画笔(以刮刮乐为例)

文章目录 一、引言二、设计1、获取图片资源2、获取屏幕信息3、Canvas涂层4、随机内容5、屏幕监听 三、附件1、UI设计2、总代码&#xff08;1&#xff09;控件初始化&#xff08;2&#xff09;图层初始化 3、源代码 一、引言 &#xff08;本篇博客只说明Canvas画笔的使用&#…

STM32单片机(六)TIM定时器 -> 第六节:TIM输入捕获练习(输入捕获模式测频率和PWMI模式测频率占空比)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

docker inspect

docker inspect 命令用于获取有关 Docker 容器、镜像、网络等的详细信息。它提供了关于指定对象的元数据和配置的完整视图&#xff0c;包括运行状态、网络设置、卷挂载、环境变量等。 以下是一些常见的字段和属性&#xff0c;可以根据需要选择其中一些或全部列出&#xff1a; …

【算法与数据结构】202、LeetCode快乐数

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;先用一个dowhile循环计算整数各个位数字的平方和&#xff0c;然后在unordered_set里面插入n&#xff0…

C语言学习笔记:函数

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介&#xff1a;作为大数据爱好者&#xff0c;以下是个人总结的学习笔记&#xff0c;如有错误&#xff0c;请多多指教&#xff01; 目录 简介 …

关于OpenCV中minAreaRect角度记录

一、问题引出 最近看到stackflow关于minAreaRect的讨论&#xff1a; MinAreaRect angles - Unsure about the angle returnedOpenCV’s RotatedRect angle does not provide enough information 大概问题是minAreaRect这个接口返回的角度信息不足以反应返回的旋转矩形的旋转…

appium辅助自动化工具-- Appium studio

这里我要给大家介绍一款appium辅助自动化测试工具appium studio&#xff0c;你没看错&#xff0c;不是android studio&#xff0c;也不是appium android studio&#xff0c;就是appium studio&#xff01; 下载地址&#xff1a; Appium Studio | Digital.ai Continuous Test…

架构-计算机体系结构

章节架构 分值约 3 分 #mermaid-svg-nV7dvQlYnuXaOVOf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-nV7dvQlYnuXaOVOf .error-icon{fill:#552222;}#mermaid-svg-nV7dvQlYnuXaOVOf .error-text{fill:#552222;strok…

如何优雅的使用 React Context

在开始今天的文章之前&#xff0c;大家不妨先想一下触发 React 组件 re-render 的原因有哪些&#xff0c;或者说什么时候 React 组件会发生 re-render 。 先说结论&#xff1a; 状态变化父组件 re-renderContext 变化Hooks 变化 ❝ 这里有个误解&#xff1a;props 变化也会导致…

力扣日记2481

1. 题目 LeetCode 2481. 分割圆的最少切割次数 1.1 题意 可以使用直接或半径切分&#xff0c;管他叫一次切分&#xff0c;求切分圆为n等份的最少次数。 1.2 分析 可以想到&#xff0c;对圆做n等分&#xff0c;然后每个半径看出一次切分&#xff0c;这是最多次数&#xff0c;…

实验篇(7.2) 13. 站对站安全隧道 - 走对方宽带上网(FortiGate-IPsec) ❀ 远程访问

【简介】前面实验已经知道&#xff0c;FortiClient客户端拨号到远端防火墙&#xff0c;包括上网流量等所有流量都可以通过隧道到达远端防火墙&#xff0c;并从对方宽带上网。那么两台防火墙之间连接的安全隧道&#xff0c;可以实现这个功能吗&#xff1f; 实验要求与环境 OldMe…

uniapp中使用mixins(混入)使用

mixins 选项接收一个混入对象的数组。这些混入对象可以像正常的实例对象一样包含实例选项&#xff0c;这些选项将会被合并到最终的选项中&#xff0c;使用的是和 Vue.extend() 一样的选项合并逻辑。也就是说&#xff0c;如果你的混入包含一个 created 钩子&#xff0c;而创建组…

虚拟网络namespace到bridge

前言 容器的网络是一大难点&#xff0c;不管是docker 还是kubernetes 都绕不开计算机网络。以下的介绍主要以计算机网络的namespace 和bridge 两个方面来展开介绍&#xff0c;方便深入理解容器的网络原理。 1.namespace分析 linux 支持六种资源的namespace :mount ns 、UTS ns…

HTML日期选择器:简化日期输入与交互

Date Picker 控件 HTML提供了<input>元素的type="date"属性,用于创建日期选择器(Date Picker)控件。日期选择器允许用户从一个交互式日历中选择日期值。以下是关于HTML日期选择器的详细解释: 创建日期选择器: 使用<input>元素,并将其type属性设置…

java从零开始系统性学习完整超全资源+笔记(下)

java从零开始系统性学习完整超全资源笔记&#xff08;下&#xff09; java从零开始系统性学习完整超全资源笔记&#xff08;上&#xff09; 文章目录 java从零开始系统性学习完整超全资源笔记&#xff08;下&#xff09;第十七章 泛型与常见数据结构ArrayListCollection接口的…

linux + lnmp + tp6部署项目问题集

部署完毕后&#xff0c;访问域名&#xff0c;报错502 Gateway 1:查看防火墙&#xff0c;需要的端口是否被关闭了&#xff0c;需要开启 vi /etc/sysconfig/iptables 发现有端口没空&#xff0c;就先i,然后把该端口后面的DROP改成ACCEPT&#xff0c;然后esc :wq 再回车&#xf…

轻松搞定文件复制备份,教你用快速的时间将文件复制另一个文件夹里并自动编号。

通常情况下&#xff0c;我们会将文件复制到另一个文件夹中&#xff0c;这很容易实现。但是如果需要将大量文件复制到同一个文件夹中&#xff0c;并且需要给每个文件自动编号&#xff0c;这时就需要用到一些技巧了。下面是一个简单的办法&#xff0c; 首先&#xff0c;第一步我…

node笔记_读写excel

文章目录 ⭐前言⭐安装依赖⭐读取excel&#x1f496; 按行读取&#x1f496; 按列读取 ⭐写入excel⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于node读取excel内容 往期文章 node_windows环境变量配置 node_npm发布包 linux_配置node node_nvm安装配置…

微服务开发系列 第十一篇:XXL-JOB

总概 A、技术栈 开发语言&#xff1a;Java 1.8数据库&#xff1a;MySQL、Redis、MongoDB、Elasticsearch微服务框架&#xff1a;Spring Cloud Alibaba微服务网关&#xff1a;Spring Cloud Gateway服务注册和配置中心&#xff1a;Nacos分布式事务&#xff1a;Seata链路追踪框架…