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

Git分布式版本控制系统与github

第四阶段提升

时  间:2023年8月29日

参加人:全班人员

内  容:

Git分布式版本控制系统与github

目录

一、案例概述

二、版本控制系统

(一) 本地版本控制

(二)集中化的版本控制系统

(三)分布式版本控制系统

三、 Git简介

(一)概述

(二)Git发展史

(三)Git功能特性

四、GIT安装部署

(一)案例环境

(二)安装git

(三)Git命令常规操作

(四) 分支结构

(五)windwos上Git的使用

五、GitHub托管服务

(一)注册GitHub

(二)获取Linux主机上的密钥

(三)获得Windows主机密钥的方法

(四)创建仓库

(五)在个人主机上进行推送测试

(六)创建新文件,进行拉取测试

(七)拉取文件测试


一、案例概述

        在开发一个软件项目时,本地只有几十行代码或几百行代码时还可以维护,但当代码达到一定的数量后或两三个人共同开发一个项目时,就很容易会出现代码混乱、冲突、排错难等问题。

        一旦开发完工以后发现整个项目运行不了,提交的代码也无法确认到责任人,导致维护项目时需要花费数倍的时间。为解决上述问题,版本控制系统应运而生。

        版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管 理,是软件配置管理的核心思想之一。

二、版本控制系统

(一) 本地版本控制

        本地版本控制系统许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。

        这么做唯一的 好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件,无法识别文件中的修改。

(二)集中化的版本控制系统

        如何让处于不同系统上的开发者协同工作?于是,集中化的版本控制系统(Centralized Version  Control Systems,简称 CVCS)应运而生。

        这类系统,诸如 CVS、Subversion(SVN) 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

(三)分布式版本控制系统

        在这类系统中,像Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像(克隆)下来。

        这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

三、 Git简介

官网:https://git-scm.com

(一)概述

        git是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。

Git 官方中文手册 https://git-scm.com/book/zh/v2

(二)Git发展史

        自2002年开始,林纳斯·托瓦兹决定使用BitKeeper作为Linux内核主要的版本控制系统用以维护代码。因为BitKeeper为专有软件,这个决定在社区中长期遭受质疑。在Linux社区中,特别是理查德·斯托曼与自由软件基金会的成员,主张应该使用开放源代码的软件来作为Linux核心的版本控制系统。林纳斯·托瓦兹曾考虑过采用现成软件作为版本控制系统(例如Monotone),但这些软件都存在一些问题,特别是性能不佳。现成的方案,如CVS的架构,受到林纳斯·托瓦兹的批评。

        2005年,安德鲁·垂鸠写了一个简单程序,可以连接BitKeeper的存储库,BitKeeper著作权拥有者拉里·麦沃伊认为安德鲁·垂鸠对BitKeeper内部使用的协议进行逆向工程,决定收回无偿使用BitKeeper的授权。Linux内核开发团队与BitMover公司进行蹉商,但无法解决他们之间的歧见。林纳斯·托瓦兹决定自行开发版本控制系统替代BitKeeper,以十天的时间,编写出第一个git版本。

        Git 是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。

        一个原始 Git 版本仓库,可以让其他主机克隆这个原始版本仓库,从而使得一个Git 版本仓库可以同时分布到不同的主机上,并且每台主机的版本库都是一样的,并没有主次之分,极大的保证了数据的安全性,并使得用户能够自主选择 Git 服务器推送文件了,其实部署一个 Git 服务器是一件非常简单的事情。

        如上所述,作为一个分布式的版本控制系统,在 Git 中并不存在主库这样的概念。每一 份复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。

        GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。GitHub 可以提供给用户空间创建 Git 仓储,保存用户的一些数据文档或者代码等。

        GitHub 作为开源代码库以及版本控制系统,目前拥有 140 多万开发者用户。随着越多的应用程序转移到了云上,GitHub 已经成为了管理软件开发以及发现已有代码的首选方法。

        GitHub 可以托管各种 Git 库,并提供一个 Web 界面,但与其它像 SourceForge 或 Google Code 这样的服务不同,GitHub 的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。

        Gitlab 是一个基于 Git 的项目管理软件,用于仓库管理系统的开源项目。使用 Git 作为代码管理工具,并在此基础上搭建起来 Web 服务。

        Git、Gitlab、Github 都是基于 Git 的,可以说是 Git 的衍生品。

(三)Git功能特性

克隆数据库版本:从服务器上克隆数据库(包括代码和版本信息)到本机上;

提交代码:在本机上自己创建的分支上提交代码;

合并分支:在本机上合并分支;

拉取合并分支:新建一个分支,把服务器上最新版的代码 Fetch 下来,然后跟自己的主分支合并;

代码冲突解决:一般开发者之间解决冲突的方法,开发者之间可以使用 pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

四、GIT安装部署

(一)案例环境

IP地址

主机名

角色

192.168.100.131

gitserver

Git服务器

192.168.100.132

git

Git客户端

(二)安装git

1、初始环境

[root@gitclient ~]# systemctl stop firewalld

[root@gitclient ~]# iptables -F

[root@gitclient ~]# setenforce 0

Gitserver服务端:

Git客户端:

2、yum安装Git

# centos 自带git

[root@gitclient ~]# rpm -q git

 # 安装方法

[root@gitclient ~]# yum -y install git

3、 编译安装

编译安装可以安装较新版本的git

Git下载地址: https://github.com/git/git/releases

# 安装依赖关系

[root@gitclient ~]# yum -y install curl-devel expat-devel gettext-devel  openssl-devel zlib-devel

# 编译安装—服务端和客户端

[root@gitclient ~]# wget https://github.com/git/git/archive/v2.22.0.tar.gz[root@gitclient ~]# tar xf git-2.22.0.tar.gz -C /usr/src/[root@gitclient ~]# cd /usr/src/git-2.22.0/[root@git git-2.22.0]# make configure[root@git git-2.22.0]# ./configure --prefix=/usr/local/git && make && make install

[root@git git-2.22.0]# ln -sf /usr/local/git/bin/git /usr/bin/

[root@git git-2.22.0]# git --version

4、初次运行 Git 前的配置

命令集

git config --global user.name "huyang"  #配置git使用用户

git config --global user.email "13363571949@163.com"  #配置git使用邮箱

git config --global color.ui true  #语法高亮

git config --list #查看全局配置

配置过程

[root@gitclient ~]# git config --global user.name "crushlinux"  #配置git使用用户

[root@gitclient ~]# git config --global user.email "crushlinux@163.com"  #配置git使用邮箱

[root@gitclient ~]# git config --global color.ui true  #语法高亮

[root@gitclient ~]# git config --list #查看全局配置

生成的配置文件

[root@gitclient ~]# cat .gitconfig

获取帮助

使用Git时需要获取帮助,有三种方法可以找到Git命令的使用手册:

例如,要想获得配置命令的手册,执行

[root@gitclient ~]# git help config

[root@gitclient ~]# git config --help

[root@gitclient ~]# man git config

5、初始化及获取 Git 仓库

Git服务器操作

[root@gitserver ~]# mkdir git_data.git

[root@gitserver ~]# cd git_data.git/

[root@gitserver git_data.git]# git --bare init

 Git客户端操作

[root@gitclient ~]# ssh-keygen

[root@gitclient ~]# ssh-copy-id root@192.168.100.131

[root@gitclient ~]# git clone root@192.168.100.131:/root/git_data.git

[root@gitclient ~]# cd git_data/

[root@git git_data]# git status

(三)Git命令常规操作

1、常用命令说明

命令

命令说明

add

添加文件内容至暂存区(索引)

bisect

通过二分查找定位引入 bug 的变更

branch

列出、创建或删除分支

checkout

检出一个分支或路径到工作区

clone

克隆一个版本库到一个新目录

commit

记录变更到版本库(本地)

diff

显示提交之间、提交和工作区之间等的差异

fetch

从另外一个版本库下载对象和引用

grep

输出和模式匹配的行

init

创建一个空的

Git

版本库或重新初始化一个已存在的版本库

log

显示提交日志

merge

合并两个或更多开发历史

mv

移动或重命名一个文件、目录或符号链接

pull

获取并合并另外的版本库或一个本地分支

push

更新远程引用和相关的对象

rebase

本地提交转移至更新后的上游分支中

reset

重置当前HEAD到指定状态

rm

从工作区和索引中删除文件

show

显示各种类型的对象

status

显示工作区状态

tag

创建、列出、删除或校验一个GPG签名的 tag 对象

常用操作示意图

文件的状态变化周期

2、创建文件

[root@git git_data]# touch README

[root@git git_data]# git status

[root@git git_data]# git add ./*

[root@git git_data]# git status

[root@git git_data]# tree .git/

由工作区提交到本地仓库

[root@git git_data]# git commit -m 'first commit'

查看git的状态

[root@git git_data]# git status

[root@git git_data]# git branch --unset-upstream

[root@git git_data]# git status

[root@git git_data]# tree  .git/

提交到远程仓库

[root@git git_data]# git push root@192.168.100.131:/root/git_data.git

3、 添加新文件

git add   #添加到暂存区域

git commit   #提交git仓库 -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看

修改或删除原有文件

常规方法

git add

git commit

简便方法

git commit  -a  -m "注释信息"

-a 表示直接提交

4、删除git内的文件

命令说明:

没有添加到暂存区的数据直接rm删除即可。

已经添加到暂存区数据:

git rm --cached database 

#将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

git rm -f database

#将文件数据从git暂存区和工作目录一起删除

操作命令:

# 创建新文件

[root@git git_data]# touch 123

[root@git git_data]# git status

[root@git git_data]# git add 123

[root@git git_data]# git status

#  删除文件

[root@git git_data]# rm -f 123

[root@git git_data]# ls

[root@git git_data]# git status

[root@git git_data]# git reset HEAD ./*

[root@git git_data]# git status

[root@git git_data]# git rm 123

[root@git git_data]# git status

5、重命名暂存区数据

没有添加到暂存区的数据直接mv/rename改名即可。

已经添加到暂存区数据:

操作命令

[root@git git_data]# git mv README NOTICE

[root@git git_data]# git status

[root@git git_data]# ls

6、查看历史记录

• git log   #查看提交历史记录

• git log -2   #查看最近几条记录

• git log -p -1  #-p显示每次提交的内容差异,例如仅查看最近一次差异

• git log --stat -2 #--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

• git log --pretty=oneline #--pretty根据不同的格式展示提交的历史信息

• git log --pretty=fuller -2 #以更详细的模式输出提交的历史记录

• git log --pretty=fomat:"%h %cn"  #查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。

使用format参数来指定具体的输出格式

格式

说明

%s

提交说明。

%cd

提交日期。

%an

作者的名字。

%cn

提交者的姓名。

%ce

提交者的电子邮件。

%H

提交对象的完整SHA-1哈希字串。

%h

提交对象的简短SHA-1哈希字串。

%T

树对象的完整SHA-1哈希字串。

%t

树对象的简短SHA-1哈希字串。

%P

父对象的完整SHA-1哈希字串。

%p

父对象的简短SHA-1哈希字串。

%ad

作者的修订时间。

操作命令

[root@git git_data]# git log

7、还原历史数据

        Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。

git reset --hard   hash

git reset --hard HEAD^  #还原历史提交版本上一次

git reset --hard 3de15d4 #找到历史还原点的SHA-1值后,就可以还原(值不写全,系统会自动匹配)

操作命令

[root@git git_data]# vim NOTICE

[root@git git_data]# cat NOTICE

[root@git git_data]# git commit -a -m 'test'

[root@git git_data]# git log

[root@git git_data]# git reset --hard 6a71d

[root@git git_data]# ls

[root@git git_data]# cat README

8、还原未来数据

        什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git  log已经找不到这个版本了。

git reflog #查看未来历史更新点

操作命令

[root@git git_data]# git reflog

[root@git git_data]# git reset --hard 94d46

[root@git git_data]# cat NOTICE

9、标签使用

前面回滚使用的是一串字符串,又长又难记。

git tag v1.0   #当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。

git tag          #查看当前所有的标签

git show v1.0   #查看当前1.0版本的详细信息

git tag v1.2 -m "version 1.2 release is test"  #创建带有说明的标签,-a指定标签名字,-m指定说明文字

git tag -d v1.0   #我们为同一个提交版本设置了两次标签,删除之前的v1.0

操作命令

[root@git git_data]# git reset --hard 6a71d

[root@git git_data]# git tag

[root@git git_data]# git tag v20230829

[root@git git_data]# git tag

[root@git git_data]# git reset --hard v20230829

10、对比数据

git diff可以对比当前文件与仓库已保存文件的区别,知道了对NOTICE作了什么修改

后,再把它提交到仓库就放⼼多了。

[root@git git_data]# echo "hello,gitserver" >> README

[root@git git_data]# git diff README

(四) 分支结构

        在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改master分支里面的数据文件。

        那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。所以团队的合作分支看起来会像下图那样。

[root@git git_data]# git branch linux

[root@git git_data]# git branch

[root@git git_data]# git checkout linux

[root@git git_data]# git branch

在linux分支进行修改

[root@git git_data]# cat README

[root@git git_data]# echo "hello,github" >> README

[root@git git_data]# git add .

[root@git git_data]# git commit -m "github"

[root@git git_data]# git status

回到master分支

[root@git git_data]# git checkout master

[root@git git_data]# cat README

[root@git git_data]# git log -1

合并代码

[root@git git_data]# git merge linux

[root@git git_data]# git status

[root@git git_data]# cat README

2、合并失败解决

模拟冲突,在文件的同一行做不同修改

在master 分支进行修改

[root@git git_data]# cat README

[root@git git_data]# echo "hello.error" >> README

[root@git git_data]# git commit -a -m "master error"

切换到linux分支

[root@git git_data]# git checkout linux

[root@git git_data]# cat README

[root@git git_data]# echo "hello,linux" >> README

[root@git git_data]# git commit -a -m "linux"

回到master分区,进行合并,出现冲突

[root@git git_data]# git checkout master

[root@git git_data]# git merge linux

解决冲突

[root@git git_data]# vim README

# 手工解决冲突

[root@git git_data]# git commit -a -m "master merge"

3、删除分支

        因为之前已经合并了linux分支,所以现在看到它在列表中。 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。

查看所有包含未合并工作的分支,可以运行 git branch --no-merged:

[root@git git_data]# git branch --no-merged

[root@git git_data]# git branch -d linux

[root@git git_data]# git branch

        如果真的想要删除分支并丢掉那些工作,如同帮助信息里所指出的,可以使用 -D 选项强制删除它。

(五)windwos上Git的使用

windows 上git软件网站 https://git-for-windows.github.io

软件下载地址:

https://github.com/git-for-windows/git/releases/download/v2.22.0.windows.1/Git-2.22.0-64-bit.exe

创建新的仓库

 定义仓库的路径

添加用户信息(在 git bash中)

Crushlinux@DESKTOP-5JDO87L MINGW64 ~

$ git config  --global user.email "crushlinux@163.com"

Crushlinux@DESKTOP-5JDO87L MINGW64 ~

$ git config  --global user.name "crushlinux"

在git Gui 中添加用户信息,添加一次就可

 在页面中将数据配置好即可使用

五、GitHub托管服务

        Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,Github不仅可以托管各种Git版本仓库,还拥有了更美观的Web界面,您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,当然也可以付费购买私有库,这样高性价比的私有库真的是帮助到了很多团队和企业。

(一)注册GitHub

浏览器访问github官网 : https://github.com/ ,点击Sign up 进行注册

填写个人信息,进行注册

输入验证码

输入信息

选择如下:

选择仓库类型,默认免费,点击底下Continue注册

用户创建完成,可以创建新的项目

添加密钥

在github上添加一个新的ssh密钥

 

(二)获取Linux主机上的密钥

[root@gitserver ~]# ssh-keygen

[root@gitserver ~]# cat .ssh/id_rsa.pub

(三)获得Windows主机密钥的方法

Crushlinux@DESKTOP-5JDO87L MINGW64 ~

$ ssh-keygen.exe

Generating public/private rsa key pair.

Enter file in which to save the key (/c/Users/Crushlinux/.ssh/id_rsa):

Created directory '/c/Users/Crushlinux/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /c/Users/Crushlinux/.ssh/id_rsa.

Your public key has been saved in /c/Users/Crushlinux/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:IHhPxTKtHlNZx0kqvob90V5tN8IM0VQT4hZ7yWBkznc Crushlinux@DESKTOP-5JDO87L

The key's randomart image is:

+---[RSA 3072]----+

|       o.o.o+X.+.|

|   .  o.=  o@ * o|

|  . o o=. .. B =E|

|   . ++o .  o o .|

|     ..oS  .     |

|      .o . .+  . |

|      . + . .+..+|

|       . . o ...o|

|          . .    |

+----[SHA256]-----+

Crushlinux@DESKTOP-5JDO87L MINGW64 ~

$ cat .ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHSP3L5h8irgkZe3snixWIDa4Q7JBQk0PzAoBQZPB1kgHuK5iZ4hY/mEqr/vegbWHdI0G5tYHRNi1PTnFrDSnjaIaFAoiuZt36aOUPmHpgmMHEV6hE3jeuoanK2LrIepVNvscwu15O8t2/dKc0An+x83miS5PRAojXj3BSQ1EsJ+LWmnl3W/UM6waVujmB7TihLYzPt8x2Mgi8jqvA6pgLwK/wdK+3pldSbTM3D3j8XLt2AXAPnkPa9C7HeUv7Tm905lbalRWmuhC/K2jc+WBXjbwc4xgjlLYtP5JjhGoecZ72CKCVVp1DN7Yz9Nb98rEzEsqTsvfvjVCrssmYDxSP2NRDWB8mkZw5XrKgnFRLuvpql2MPDAthWNYlZXH0RJ9yVHiqAN3E5PRuJhtFbSLJYRMNMmjkmptVwbjUYvpm3W9ZbAeP6z1ueJ9RGc1dwtBnYNN/PZlD/lqvJll+5t2c+V8xkStEEobQFg7aQSc+BU9ZAsdCL79veOHUtfiDh+k= Crushlinux@DESKTOP-5JDO87L

密钥创建完成后进行添加

密钥添加成功

(四)创建仓库

准备工作已经完毕,右上角点击创建一个新的仓库

创建仓库,输入个人信息

(五)在个人主机上进行推送测试

[root@gitserver ~]# git config --global user.email "crushlinux13363571949root@gitserver ~]# git config --global user.name "huyang"

[root@gitserver ~]# git config --list

[root@gitserver ~]# mkdir hy

[root@gitserver ~]# cd hy

[root@gitserver hy]# echo "# test" >> README.md

[root@gitserver hy]# git init

[root@gitserver hy]# git add README.md

[root@gitserver hy]# git commit -m "first

[root@gitserver hy]# git remote add origin git@github.com:huyang-Ada/test1.git

[root@gitserver hy]# git push -u origin master

Web访问测试:

(六)创建新文件,进行拉取测试

编辑内容:

点击确定

创建好后点击下面的commit即可

github添加成功,进行拉取测试

(七)拉取文件测试

查看目录内容

[root@gitserver hy]# pwd

[root@gitserver crushlinux]# ls

进行拉取

[root@gitserver hy]# git pull

[root@gitserver hy]# ls

[root@gitserver hy]# cat abc.test

相关文章:

Git分布式版本控制系统与github

第四阶段提升 时 间:2023年8月29日 参加人:全班人员 内 容: Git分布式版本控制系统与github 目录 一、案例概述 二、版本控制系统 (一) 本地版本控制 (二)集中化的版本控制系统 &…...

基于Java+SpringBoot+Vue前后端分离中国陕西民俗网设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...

CSS3D+动画

CSS3D 1.css3D 给父元素设置 perspective:景深:近大远小的效果900-1200px这个范围内 transform-style:是否设置3D环境 flat 2D环境 默认值 perserve-3D环境 3D功能函数 1.位移: translateZ()translate3D(x,y,z) <!DOCTYPE html> <html lang"en"><h…...

list对象中如何根据对象中某个属性去重使用Java8流实现

list对象中如何根据对象中某个属性去重使用Java8流实现? 在 Java 8 的流操作中&#xff0c;可以使用 distinct 方法来对一个对象流进行去重&#xff0c;但是默认情况下它会使用对象的 equals() 方法来判断重复。如果你希望根据对象的某个属性进行去重&#xff0c;则可以使用 …...

2023 在Windows上的安装Faiss-GPU(使用anaconda)

该方法安装完 faiss-gpu 之后&#xff0c;不仅会装这个库&#xff0c;还会装很多依赖库。为了防止自己本地一些同名库的版本被修改&#xff0c;建议新建一个虚拟环境来安装。如果本地库版本修改对自己没影响&#xff0c;也可以忽略。 你好&#xff0c;我是悦创。 登录网站&…...

HTML及CSS入门及精通

前言 HTML&#xff08;超文本标记语言&#xff09;和CSS&#xff08;层叠样式表&#xff09;是构建网页的两个基本技术。HTML用于定义网页的结构和内容&#xff0c;而CSS用于控制网页的样式和布局。本教程将介绍HTML和CSS的入门知识&#xff0c;并逐步引导您掌握更高级的技巧和…...

frp实现二级代理

kali是攻击机 &#xff08;192.168.0.106&#xff09; windows server2012是边界服务器&#xff0c;拥有两个网卡&#xff0c;作为一级代理&#xff0c; &#xff08;192.168.0.108&#xff0c;10.10.10.136&#xff09; ad01是内网机器&#xff0c;不出网 &#xff08;10.10.1…...

Vue组件设置背景色

vh&#xff1a;浏览器视区高度百分值 wh&#xff1a;浏览器视区宽度百分值 min-height&#xff1a;最小高度&#xff0c;其他时候自适应 给组件根标签设置&#xff1a;min-height&#xff1a;100vh&#xff0c;就可以正常添加背景色&#xff0c;而且背景色随内容展开而自适…...

Java+Github+Jenkins部署

Java项目—Jenkins部署笔记 一&#xff0c;准备 一台服务器操作系统&#xff0c;示例为ubuntu 22.0.4 可运行lsb_release -a查看 二&#xff0c;安装 docker 更新软件包列表&#xff1a; sudo apt update安装必要的软件包&#xff0c;以便使用HTTPS通过APT下载软件包&#x…...

vue使用命令npm install 报错 cb() never called!

一.错误说明,npm本身下载就慢&#xff0c;有可能是网络的问题。 二.解决方案,把npm设置成淘宝镜像后,再重新npm install npm config set registry https://registry.npm.taobao.org 三.还是不行&#xff0c;还会出现同样的问题&#xff0c;那接下来先清理一下npm缓存 npm cache…...

什么是LatexEasy及其在数学排版中的作用

LatexEasy是一种强大的排版系统&#xff0c;特别擅长处理数学公式和科技文档。它基于 TeX&#xff0c;是由计算机科学家 Donald Knuth 开发的。LaTeX 可以让你专注于内容&#xff0c;而不必过多关心排版细节&#xff0c;特别适用于数学家、工程师和科学研究者。 什么是 LaTeX&…...

axios 和fetch的取舍,以及比较

废话不多说&#xff0c;直接直捣黄龙&#xff1a; 区别 相同点 都是一种基于promise的异步解决方案。都可以解决回调地狱问题 不同点 axios是一个封装好的库&#xff0c;需要npm进行安装&#xff0c;fetch是es6新增的api 语法&#xff1a; fetch(url, { method: GET, // o…...

K-Means(K-均值)聚类算法理论和实战

目录 K-Means 算法 K-Means 术语 K 值如何确定 K-Means 场景 美国总统大选摇争取摆选民 电商平台用户分层 给亚洲球队做聚类 ​编辑 其他场景 K-Means 工作流程 K-Means 开发流程 K-Means的底层代码实现 K-Means 的评价标准 K-Means 算法 对于 n 个样本点来说&am…...

Python-pyqt不同窗口数据传输【使用静态函数】

文章目录 前言程序1&#xff1a;caogao1.py输入数据界面程序2&#xff1a;caogao2.py接收数据界面 程序3 &#xff1a;将输入数据界面和接收数据界面组合成一个总界面讲解 总结 前言 在编写pyqt 页面时有时候需要不同页面进行数据传输。本文讲解静态函数方法。直接看示例。 程…...

百度垂类离线计算系统发展历程

作者 | 弘远君 导读 本文以百度垂类离线计算系统的演进方向为主线&#xff0c;详细描述搜索垂类离线计算系统发展过程中遇到的问题&#xff0c;以及对应的解决方案。架构演进过程中一直奉行“没有最好的架构&#xff0c;只有最合适的架构”的宗旨&#xff0c;面对不同阶段遇到的…...

ubuntu 安装 指定版本:nodejs

通过 PPA 安装指定或最新版本的 nodejs 那么就需要使用 nodesource 来安装指定版本的 nodejs 了。其需要下载一个脚本&#xff0c;运行此脚本会在 ubuntu 里添加一个 nodejs 源&#xff0c;然后用 apt 就可以下载指定的 nodejs 了。 PPA 的全称为 personal package archive 。要…...

16.CSS菜单悬停特效

效果 源码 <!DOCTYPE html> <html> <head> <title>Creative Menu Item Hover Effects</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body><section><…...

恒运资本:市盈率怎么算?

市盈率&#xff08;P/E ratio&#xff09;是判别一家公司股票价格合理性的一个重要目标&#xff0c;也是投资者评估公司股票投资价值的重要参阅目标。市盈率越高&#xff0c;表明相对于公司的收益来说&#xff0c;该公司的股票定价越高。市盈率越低&#xff0c;则表明该股票被低…...

Docker运维中常见错误以及解决方法汇总1

1.报错如下: Another app is currently holding the yum lock; waiting for it to exit... 另一个应用程序是:PackageKit 原因:另一个APP正在锁定yum,等待其退出! 解决:执行指令 rm -f /var/run/yum.pid 2.CentOS7设置静态的IP且可以上网...

Maven - 使用maven-release-plugin规范化版本发布

文章目录 Maven Release plugin – IntroductionMaven Release plugin – Plugin DocumentationMaven Release plugin – Usage实战案例 Maven Release plugin – Introduction Maven Release Plugin&#xff08;Maven 发布插件&#xff09;是一个用于帮助在Maven项目中执行版…...

2023.8.29 关于性能测试

目录 什么是性能测试&#xff1f; 性能测试常见术语及其性能测试衡量指标 并发 用户数 响应时间 事务 点击率 吞吐量 思考时间 资源利用率 性能测试分类 基准性能测试 负载性能测试 压力性能测试 可靠性性能测试 性能测试执行流程 什么是性能测试&#xff1f; 性…...

基于MATLAB的径向基函数插值(RBF插值)(一维、二维、三维)

基于MATLAB的径向基函数插值&#xff08;RBF插值&#xff09;&#xff08;一维、二维、三维&#xff09; 0 前言1 RBF思路2 1维RBF函数2.1 参数说明2.1.1 核函数选择2.1.2 作用半径2.1.3 多项式拟合2.1.4 误差项&#xff08;光滑项&#xff09; 3 2维RBF函数4 3维RBF函数 惯例声…...

flume拦截器

flume拦截器代码 1.依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apach…...

vue、elementui控制前一级选择后,后一级才会有数据

<el-form-item label"废物类型&#xff1a;"><el-select clearable v-model"queryForm.hswCateType" placeholder"请选择" change"industryCategoryChange" focus"industryCategoryFocus"><el-option v-for&…...

亲测influxdb安装为window后台服务

InfluxDB 安装 64bit&#xff1a;https://dl.influxdata.com/influxdb/releases/influxdb-1.7.4_windows_amd64.zip 解压安装包 修改配置文件 [meta]# Where the metadata/raft database is storeddir "D:/influxdb/meta"...[data]# The directory where the TSM…...

【LeetCode - 每日一题】823. 带因子的二叉树 (2023.08.29)

823. 带因子的二叉树 题意 元素都大于1&#xff0c;元素不重复。计数满足要求的二叉树&#xff08;每个非叶结点的值应等于它的两个子结点的值的乘积&#xff09;的数量。元素可以重复使用。 代码 自上而下动态规划。 所有元素大于1&#xff0c;所以不会有 自己自己自己 的…...

flutter 上传图片并裁剪

1.首先在pubspec.yaml文件中新增依赖pub.dev image_picker: ^0.8.75 image_cropper: ^4.0.1 2.在Android的AndroidManifest.xml文件里面添加权限 <activityandroid:name"com.yalantis.ucrop.UCropActivity"android:screenOrientation"portrait"andro…...

一台服务器上部署 Redis 伪集群

哈喽大家好&#xff0c;我是咸鱼 今天这篇文章介绍如何在一台服务器&#xff08;以 CentOS 7.9 为例&#xff09;上通过 redis-trib.rb 工具搭建 Redis cluster &#xff08;三主三从&#xff09; redis-trib.rb 是一个基于 Ruby 编写的脚本&#xff0c;其功能涵盖了创建、管…...

ealtek高清晰音频管理器(realtek高清晰音频管理器怎么设置win10)

本文为大家介绍realtek高清晰音频管理器(realtek高清晰音频管理器怎么设置win10)&#xff0c;下面和小编一起看看详细内容吧。 我们都使用电脑来听音乐、看电影或者进行其他操作&#xff0c;但是如果我们觉得电脑产生的音效不够立体&#xff0c;我们就会想要去Realtek来设置音…...

微信小程序 scroll-view 组件的 bindscroll 不触发不生效

使用微信小程序基础组件中的scroll-view&#xff0c;但是滑动的时候 bindscroll 一直不生效。 <view class"container log-list"><scroll-view scroll-y style"height:100%;white-space:nowrap;" scroll-into-view"{{toView}}" enable…...

datax 删除分区数据,再写入MySQL脚本

#! /bin/bashDATAX_HOME/opt/module/datax#1、判断参数是否传入 if [ $# -lt 1 ] thenecho "必须传入all/表名..."exit fi #2、判断日期是否传入 [ "$2" ] && datestr$2 || datestr$(date -d -1 day %F)#DataX导出路径不允许存在空文件&#xff0c…...

hyperf 十四 国际化

一 安装 composer require hyperf/translation:v2.2.33 二 配置 1、设置语言文件 文件结构&#xff1a; /storage/languages/en/messages.php /storage/languages/zh_CH/messages.php // storage/languages/en/messages.php return [welcome > Welcome to our applicat…...

C语言_初识C语言指针

文章目录 前言一、指针 ... 一个内存单元多大比较合适&#xff1f;二、地址或者编号如何产生&#xff1f;三、指针变量的大小 前言 内存是电脑上特别重要的存储器&#xff0c;计算机中程序的运行都是在内存中进行的。 所以为了有效的使用内存&#xff0c;就把内存划分成一个个…...

EMQX启用双向SSL/TLS安全连接以及java连接

作为基于现代密码学公钥算法的安全协议&#xff0c;TLS/SSL 能在计算机通讯网络上保证传输安全&#xff0c;EMQX 内置对 TLS/SSL 的支持&#xff0c;包括支持单/双向认证、X.509 证书、负载均衡 SSL 等多种安全认证。你可以为 EMQX 支持的所有协议启用 SSL/TLS&#xff0c;也可…...

4399面试总结C/C++游戏开发

主要流程 首先询问了C/C知识点 然后询问操作系统&#xff0c;计算机组成&#xff0c;数据结构&#xff0c;计算机网络哪两门熟悉 涉及的相关问题 多态的概念 tcp,udp&#xff1f; tcp,udp区别 tcp可靠&#xff0c;udp不可靠 tcp这个链接的过程? 一个TCP连接必须要经过三次“…...

hashlib 模块学习

hashlib 是 Python 标准库中用于散列和摘要算法的模块。散列算法将输入数据转换为固定长度的散列值&#xff08;也称为摘要&#xff09;&#xff0c;并且对于相同的输入始终生成相同的散列值。这对于存储密码、数字签名、数据完整性验证等领域非常有用。以下是对 hashlib 模块的…...

大模型开发05:PDF 翻译工具开发实战

大模型开发实战05:PDF 翻译工具开发实战 PDF-Translator 机器翻译是最广泛和基础的 NLP 任务 PDF-Translator PDF 翻译器是一个使用 AI 大模型技术将英文 PDF 书籍翻译成中文的工具。这个工具使用了大型语言模型 (LLMs),如 ChatGLM 和 OpenAI 的 GPT-3 以及 GPT-3.5 Turbo 来…...

LeetCode 43题:字符串相乘

题目 给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", num2 "3&…...

基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)

一、项目简介 本项目是一套基于java Swing 和 mysql实现的飞机订票系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过…...

Jmeter性能综合实战 —— 签到及批量签到

提取性能测试的三个方面&#xff1a;核心、高频、基础功能 签 到 请 求 步 骤 1、准备工作&#xff1a; 签到线程组n HTTP请求默认值n HTTP cookie 管理器n 首页访问请求n 登录请求n 查看结果树n 调试取样器l HTTP代理服务器 &#xff08;1&#xff09;创建线程组 &#xf…...

燃气管网监测系统,提升城市燃气安全防控能力

燃气是我们日常生活中不可或缺的能源&#xff0c;但其具有易燃易爆特性&#xff0c;燃气安全使用、泄漏监测尤为重要。当前全国燃气安全事故仍呈现多发频发态势&#xff0c;从公共安全的视角来看&#xff0c;燃气已成为城市安全的重大隐忧&#xff01;因此&#xff0c;建立一个…...

【SQL】1731. 每位经理的下属员工数量 ( 新思想:确定左表,依次添加后续字段)

leetcode题目链接 注意点 确定左表&#xff08;即&#xff0c;确定result表中的主键)&#xff0c;依次添加后续字段。注意&#xff1a;主键可能是一个字段&#xff0c;也可能是多个字段COUNT(DISTINCT())&#xff0c;一般为了防止重复&#xff0c;使用COUNT计数时&#xff0c…...

AMD Radeon RX 7000/6000系列显卡安装ROCm 调用CUDA

A卡用户画图炼丹、跑大模型甚至是跑机器学习、深度学习的有福了~ 注意&#xff1a;ROCm目前仅限在Linux系统下可用&#xff0c;Windows暂不支持 1. 安装ROCm RX6000系列及以下显卡使用ROCm 5.4.2稳定版本命令 【支持包括桌面级AMD Radeon RX6950XT、RX6900XT、RX6800XT、RX6…...

钉钉小程序引用阿里巴巴图标

2.打开的界面如图&#xff0c;先建一个iconfont.acss文件&#xff0c;全选浏览器打开的样式代码&#xff0c;复制粘贴进新建的iconfont.acss文件中 3.使用...

深入了解Nginx:高性能的开源Web服务器与反向代理

一、Nginx是什么 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;也可以作为负载均衡器和HTTP缓存服务器使用。它采用事件驱动、异步非阻塞的处理方式&#xff0c;能够处理大量并发连接和高流量负载&#xff…...

vue3 自定义显示内容

vue3 自定义显示内容 vue3 自定义显示内容示例uni-app封装自定义内容组件 vue3 自定义显示内容 在 Vue 3 中&#xff0c;你可以通过插槽&#xff08;Slot&#xff09;来自定义组件的显示内容。 插槽允许你将额外的内容插入到组件的特定位置&#xff0c;从而实现更灵活的组件…...

视频行为分析——视频图像转换与ffmpeg相关操作

工具类说明 1. 图像视频转换 1.1 视频输出gif from moviepy.editor import VideoFileClip # 设置输入视频文件路径和输出GIF文件路径 input_video video.avi output_gif output.gif # 读取视频文件 video VideoFileClip(input_video) # 将视频保存为GIF文件 video.write_…...

Bean 生命周期

Bean 生命周期 一、Bean 实例化的基本流程 Spring容器在进行初始化时&#xff0c;会将xml配置的的信息封装成一个BeanDefifinition对象&#xff0c;所有的BeanDefifinition存储到一个名为beanDefifinitionMap的Map集合中去&#xff0c;Spring框架在对该Map进行遍历&#xff0…...

JavaScript原型链污染

前言 在浏览某个论坛的时候&#xff0c;第一次看到了JavaScript原型链污染漏洞。当时非常的好奇&#xff0c;当时我一直以为js作为一种前端语言&#xff0c;就算存在漏洞也是针对前端&#xff0c;不会危害到后端&#xff0c;因此我以为这种漏洞危害应该不大。可当我看到他的漏…...

【Java】设计模式之单例模式与工厂模式

1、设计模式概念及分类 简单来说设计模式是被广大程序员们总结并认可的编码套路&#xff0c;其中最常用的莫过于单例模式与工厂模式&#xff0c;而单例模式也有更加细的分类&#xff0c;一起来学习一下这些模式的用法和特点吧。 2、单例模式 一个类只能被实例化出来一个对象…...