代码评审平台Gerrit安装配置方法介绍
Gerrit是一款开源免费的基于 web 的代码审查工具,是基于 Git 的版本控制系统。在代码入库之前对开发人员的提交进行审阅,检视通过的代码才能提交入库。本文记录如何安装部署gerrit平台。
目录
- Gerrit简介
- 环境准备
- 1. 安装Java
- 2. 安装Git
- 3. 安装nginx
- 4. 安装Apache
- Gerrit安装配置
- 1. 下载
- 2. 安装
- 3. nginx反向代理
- 4. 创建用户名密码
- 5. 启动
- 6. 邮箱配置
- 用户创建
- 创建项目仓库
- Git ssh key配置
- 1. 创建 ssh key
- 2. gerrit添加公钥
- 3. 生成ppk私钥文件
- 4. 添加私钥
- 拉取项目仓库
- 提交代码
- 审核代码
Gerrit简介
Gerrit代码审查工具也是一个Git服务器,使用Git作为底层版本控制系统,当前的版本使用Java开发。
一个典型的Git项目包含一个远程中央仓库,
Gerrit在Git中央仓库基础上引入了一个额外的概念:存储修改的暂存区,
push的代码更改会被存储到暂存区(Pending changes),其他人评审通过后就可以将更改提交到代码库 (Authoritative Repository)。
下面介绍如何安装部署gerrit。
环境准备
本文介绍Linux中gerrit的安装配置方法,Windows安装可参考官方文档:https://gerrit-documentation.storage.googleapis.com/Documentation/3.7.2/install.html
1. 安装Java
Linux服务器需要先安装好Java环境
$ yum -y install java-11-openjdk.x86_64
$ java -version
openjdk version "11.0.16" 2022-07-19 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.16.0.8-1.el7_9) (build 11.0.16+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.16.0.8-1.el7_9) (build 11.0.16+8-LTS, mixed mode, sharing)
2. 安装Git
安装最新版本git
$ git --version
git version 2.9.5
$ sudo yum -y remove git
$ sudo yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm
$ sudo yum install git
$ git --version
git version 2.39.2
3. 安装nginx
安装nginx用于反向代理。
1、下载nginx安装包nginx-1.22.1.tar.gz
:http://nginx.org/en/download.html
2、解压:
$ tar -xvzf nginx-1.22.1.tar.gz
3、安装:
$ cd nginx-1.22.1
$ pwd
/usr/local/nginx-1.22.1
$ ./configure
$ make
$ make install
4、启动nginx:
$ cd /usr/local/nginx/sbin
$ ./nginx
$ ps -aux | grep nginx | grep -v grep
root 13581 0.0 0.0 20576 620 ? Ss 21:56 0:00 nginx: master process ./nginx
nobody 13583 0.0 0.0 23104 1372 ? S 21:56 0:00 nginx: worker process
$ ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
或者使用命令 systemctl start nginx.service
启动。
浏览器访问:http://192.168.30.8/
关闭nginx命令:
$ ./nginx -s stop
$ ./nginx -s quit
刷新配置文件:
$ ./nginx -s reload
其中配置文件路径为:/usr/local/nginx/conf/nginx.conf
接下来配置nginx开机启动:
在 /lib/systemd/system/
目录下创建 nginx.service
文件:
$ vim /lib/systemd/system/nginx.service
输入如下内容:https://www.nginx.com/resources/wiki/start/topics/examples/systemd/
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true[Install]
WantedBy=multi-user.target
加入开机自启动
$ systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
其它命令:
$ systemctl reload nginx.service # 重新加载nginx配置
$ systemctl start nginx.service # 启动nginx服务
$ systemctl stop nginx.service # 停止nginx服务
$ systemctl restart nginx.service # 重启nginx服务
$ systemctl status nginx.service # 查看nginx服务当前状态
$ systemctl disable nginx.service # 停止开机自启动
4. 安装Apache
安装Apache用于http认证
$ yum install httpd
Gerrit安装配置
1. 下载
gerrit各版本下载地址:https://www.gerritcodereview.com/releases-readme.html
war包下载完成后把它发送到Linux服务器,如果服务器可以联网,也可以直接执行以下命令下载:
$ wget https://gerrit-releases.storage.googleapis.com/gerrit-3.7.2.war –no-check-certificate
2. 安装
执行以下命令安装Gerrit:
$ cd ~/gerrit
$ export GERRIT_SITE=~/gerrit/gerrit_testsite
$ java -jar gerrit*.war init --batch --dev -d $GERRIT_SITE
$ java -jar gerrit*.war init -d $GERRIT_SITE
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
[2023-04-02 09:58:38,456] [main] INFO com.google.gerrit.server.config.GerritServerConfigProvider : No /root/gerrit/gerrit_testsite/etc/gerrit.config; assuming defaults*** Gerrit Code Review 3.7.2
*** *** Git Repositories
*** Location of Git repositories [git]: *** JGit Configuration
*** *** Index
*** Type [lucene]: *** User Authentication
*** Authentication method [openid/?]: oauth
Git/HTTP authentication [http/?]:
Enable signed push support [y/N]? *** Review Labels
*** Install Verified label [y/N]? y*** Email Delivery
*** SMTP server hostname [localhost]: smtp.163.com
SMTP server port [(default)]:
SMTP encryption [none/?]:
SMTP username [root]: XXXXXXXXX@163.com
XXXXXXXXX@163.com's password : confirm password : *** Container Process
*** Run as [root]:
Java runtime [/usr/lib/jvm/java-11-openjdk-11.0.16.0.8-1.el7_9.x86_64]:
Copy gerrit-3.7.2.war to /root/gerrit/gerrit_testsite/bin/gerrit.war [Y/n]?
Copying gerrit-3.7.2.war to /root/gerrit/gerrit_testsite/bin/gerrit.war*** SSH Daemon
*** Listen on address [*]:
Listen on port [29418]:
Generating SSH host key ... rsa... ed25519... ecdsa 256... ecdsa 384... ecdsa 521... done*** HTTP Daemon
*** Behind reverse proxy [y/N]?
Use SSL (https://) [y/N]? y
Listen on address [*]: 127.0.0.1
Listen on port [8443]: 8081
Canonical URL [https://127.0.0.1:8081/]: http://192.168.30.8:8081
Create new self-signed SSL certificate [Y/n]?
Certificate server name [192.168.30.8:8081]:
Certificate expires in (days) [365]: 36500*** Cache
*** *** Plugins
*** Installing plugins.
Install plugin codemirror-editor version v3.7.2 [y/N]? y
Installed codemirror-editor v3.7.2
Install plugin commit-message-length-validator version v3.7.2 [y/N]? y
Installed commit-message-length-validator v3.7.2
Install plugin delete-project version v3.7.2 [y/N]? y
Installed delete-project v3.7.2
Install plugin download-commands version v3.7.2 [y/N]? y
Installed download-commands v3.7.2
Install plugin gitiles version v3.7.2 [y/N]? y
Installed gitiles v3.7.2
Install plugin hooks version v3.7.2 [y/N]? y
Installed hooks v3.7.2
Install plugin plugin-manager version v3.7.2 [y/N]? y
Installed plugin-manager v3.7.2
Install plugin replication version v3.7.2 [y/N]? y
Installed replication v3.7.2
Install plugin reviewnotes version v3.7.2 [y/N]? y
Installed reviewnotes v3.7.2
Install plugin singleusergroup version v3.7.2 [y/N]? y
Installed singleusergroup v3.7.2
Install plugin webhooks version v3.7.2 [y/N]? y
Installed webhooks v3.7.2
Initializing plugins.============================================================================
Welcome to the Gerrit communityFind more information on the homepage: https://www.gerritcodereview.com
Discuss Gerrit on the mailing list: https://groups.google.com/g/repo-discuss
============================================================================
Initialized /root/gerrit/gerrit_testsite
$
其中 ~/gerrit
是我的gerrit安装路径,出现 Starting Gerrit Code Review: OK
表示启动成功。
gerrit配置文件路径为:/root/gerrit/gerrit_testsite/etc/gerrit.config
,我的gerrit.config文件内容如下:
[gerrit]basePath = gitcanonicalWebUrl = http://192.168.30.8:8081serverId = 737ce77e-a02f-4e6e-ab7b-daff97faf5da
[container]javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance"user = rootjavaHome = /usr/lib/jvm/java-11-openjdk-11.0.16.0.8-1.el7_9.x86_64
[index]type = lucene
[auth]type = httpgitBasicAuthPolicy = HTTP
[receive]enableSignedPush = false
[sendemail]smtpServer = smtp.163.comsmtpUser = XXXXXXXXX@163.comsmtpServerPort = 25from = XXXXXXXXX@163.com
[sshd]listenAddress = *:29418
[httpd]listenUrl = http://192.168.30.8:8081/
[cache]directory = cache
停止命令:
$ /root/gerrit/gerrit_testsite/bin/gerrit.sh stop
Stopping Gerrit Code Review: OK
启动命令:
$ /root/gerrit/gerrit_testsite/bin/gerrit.sh start
Starting Gerrit Code Review: OK
重启命令:
$ /root/gerrit/gerrit_testsite/bin/gerrit.sh restart
Stopping Gerrit Code Review: OK
Starting Gerrit Code Review: OK
设置开机自动启动gerrit:
$ sudo ln -snf /root/gerrit/gerrit_testsite/bin/gerrit.sh /etc/init.d/gerrit.sh
修改文件 /etc/init.d/gerrit.sh
设置gerrit安装路径GERRIT_SITE
:
##################################################
# No GERRIT_SITE yet? We're out of luck!
##################################################
if test -z "$GERRIT_SITE" ; thenGERRIT_SITE="/root/gerrit/gerrit_testsite"
fi
然后执行:
$ chkconfig --add gerrit.sh
$ chkconfig gerrit.sh on
3. nginx反向代理
编辑nginx配置文件vim /usr/local/nginx/conf/nginx.conf
,添加如下内容:
server {listen 80;server_name localhost;index index.html index.htm index.php;access_log /usr/local/nginx/logs/gerrit.access.log;error_log /usr/local/nginx/logs/gerrit.error.log;allow all;deny all;auth_basic "Welcomme to Gerrit Code Review Site!"; auth_basic_user_file /root/gerrit/gerrit_testsite/etc/gerrit.password; location / {proxy_pass http://localhost:8081;}
}
auth_basic_user_file
是用来保存gerrit用户名密码的文件。
重新加载配置:
$ systemctl reload nginx.service
4. 创建用户名密码
使用 htpasswd 命令创建用户名密码:
$ touch /root/gerrit/gerrit_testsite/etc/gerrit.password
$ htpasswd -c /root/gerrit/gerrit_testsite/etc/gerrit.password admin
New password:
Re-type new password:
Adding password for user admin
5. 启动
重启nginx:
$ systemctl reload nginx.service
$ systemctl restart nginx.service
重启gerrit:
$ /root/gerrit/gerrit_testsite/bin/gerrit.sh restart
启动成功后,浏览器访问gerrit:http://192.168.30.8/,其中192.168.30.8是我的服务器IP地址。
页面会弹出登录页面,输入创建的管理员用户名密码进行登录。
认证成功后会跳转到gerrit页面
6. 邮箱配置
登录成功后,进入’Settings’ > ‘Email Addresses’ 配置邮箱。
点击 ‘Send verification’ 后设置的邮箱会收到一封认证邮件
访问邮件中的链接(将localhost:8081改为主机地址192.168.30.8)[http://192.168.30.8/#/VE/xdQBwdHcOpmrDGWJdqnUIQNqNMTf6F6x9PQQ1A==KaTeX parse error: Expected 'EOF', got '#' at position 64: ….168.30.8:8081/#̲/VE/xdQBwdHcOpm…MTAwMDAwMDoxMDI4NzQwOTc2QHFxLmNvbQ==) 即可认证成功。
用户创建
和前面介绍的创建管理员账户一样,使用htpasswd 命令创建普通用户:
$ htpasswd -b /root/gerrit/gerrit_testsite/etc/gerrit.password gerrit 123456
Adding password for user gerrit
创建成功后使用用户名密码登录gerrit并配置邮箱即可。
创建项目仓库
主要有四种创建仓库方式:
1、Web页面进入’Browse’ > ‘Repositories’ > ‘CREATE NEW’
创建完成后进行仓库配置:
2、通过gerrit REST API创建
请求接口为 PUT /projects/{project-name}
,请求次数参考https://gerrit-documentation.storage.googleapis.com/Documentation/3.7.2/rest-api-projects.html#create-project
3、通过SSH 命令创建
ssh -p <port> <host> gerrit create-project { <NAME> }
可用参数选项可参考https://gerrit-documentation.storage.googleapis.com/Documentation/3.7.2/cmd-create-project.html
4、也可以直接在gerrit服务器上手动创建
具体可参考https://gerrit-documentation.storage.googleapis.com/Documentation/3.7.2/project-configuration.html#manual_project_creation
Git ssh key配置
开发环境需要安装Git,Windows和Linux系统上Git安装方法可参考Git简易教程-安装及简单使用。gerrit支持HTTP和SSH两种方式克隆项目,本文介绍SSH认证方式的配置方法。
1. 创建 ssh key
这一步目的是在本地(开发电脑)生成用于认证的公钥和私钥。
由于安全原因,GIT 2.33 及之后的版本禁用了 ssh-rsa 公钥签名算法,可使用ed25519算法来生成秘钥:
$ ssh-keygen -t ed25519 -C "123456789@qq.com" # 邮件地址是在gerrit平台上配置的邮箱
密码不用设置,回车即可:
$ ssh-keygen -t ed25519 -C "123456789@qq.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/10287/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_ed25519
Your public key has been saved in id_ed25519.pub
The key fingerprint is:
SHA256:Ufs5p/nzaZ7dKQG8un2IRYkClI+Ro4+oT0f/8cCd+VE 123456789@qq.com
The key's randomart image is:
+--[ED25519 256]--+
| ..o . |
| * . . |
| . * . + . |
| . . o o * . |
| . + S . * E |
| . o o . . = B |
|. . . . + B = . |
|.. . . *.o =..*|
| .. ..o.o =B+|
+----[SHA256]-----+
执行完成后会在 ~/.ssh
目录下生成id_ed25519(私钥)和 id_ed25519.pub(公钥)这两个秘钥文件。
进入 .ssh 文件夹下,可以看到生成的秘钥文件:
$ cd ~/.ssh # 进入 .ssh 文件夹下
$ ls
id_ed25519 id_ed25519.pub known_hosts
2. gerrit添加公钥
访问gerrit,将生成的公钥添加到Gerrit SSH Keys中。
复制公钥:
$ cat id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPHx9bqXz3Hp9mpz0fC/1IcfkVASqZG6oecab3ItcW8j 123456789@qq.com
登录Gerrit,点击Setting,找到SSH Keys,粘贴复制的公钥,然后点击 ‘Add new SSH key’
3. 生成ppk私钥文件
ppk私钥文件用于使用git GUI 克隆代码时使用的秘钥文件。
进入 ~/.ssh
目录下,复制前面生成的私钥文件 id_ed25519
为后缀为ppk的文件:
$ cp id_ed25519 id_ed25519.ppk
打开PuTTYgen工具,点击【load】,加载复制的id_rsa_gerrit.ppk文件
导入成功后,点击【Save private key】保存私钥,可以新创建一个文件或者覆盖原来复制的ppk文件。
4. 添加私钥
打开Pageant工具,加载保存的私钥文件。
拉取项目仓库
公钥和私钥配置完成后,就可以克隆gerrit上的仓库了。登录gerrit,进入要克隆的仓库,选择ssh方式,复制clone命令。
$ git clone "ssh://admin@192.168.30.8:29418/gerritDemo" && (cd "gerritDemo" && mkdir -p `git rev-parse --git-dir`/hooks/ && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg http://192.168.30.8:8081/tools/hooks/commit-msg && chmod +x `git rev-parse --git-dir`/hooks/commit-msg)
上面的clone代码执行完成后,仓库 /.git/hooks
目录下面会有一个commit-msg钩子文件。
提交代码
提交示例:
$ echo test > test.txt
$ git status
On branch master
Your branch is up to date with 'origin/master'.Untracked files:(use "git add <file>..." to include in what will be committed)test.txtnothing added to commit but untracked files present (use "git add" to track)
$ git add test.txt
warning: in the working copy of 'test.txt', LF will be replaced by CRLF the next time Git touches it
$ git commit -m "gerrit提交测试"
[master 6e78c4e] gerrit提交测试1 file changed, 1 insertion(+)create mode 100644 test.txt$ git push --progress "origin" master:refs/for/master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Writing objects: 100% (3/3), 303 bytes | 303.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Processing changes: refs: 1, new: 1, done
remote:
remote: SUCCESS
remote:
remote: http://192.168.30.8:8081/c/gerritDemo/+/1 gerrit提交测试 [NEW]
remote:
To ssh://192.168.30.8:29418/gerritDemo* [new reference] master -> refs/for/master
注意:push的远程分支为 refs/for/master
,如果使用master
分支会直接push到中央仓库,不会到暂存区。
审核代码
push成功后登录gerrit,可以看到刚才的提交
进入此次提交详细页面,可对提交的代码进行评审:
具体操作方法这里不做更多介绍了,可参考官方示例:https://gerrit-documentation.storage.googleapis.com/Documentation/3.7.2/intro-gerrit-walkthrough.html
评审通过后,点击SUBMIT提交到主仓库。
相关文章:

代码评审平台Gerrit安装配置方法介绍
Gerrit是一款开源免费的基于 web 的代码审查工具,是基于 Git 的版本控制系统。在代码入库之前对开发人员的提交进行审阅,检视通过的代码才能提交入库。本文记录如何安装部署gerrit平台。 目录 Gerrit简介环境准备1. 安装Java2. 安装Git3. 安装nginx4. 安…...

一篇文章解决Mysql8
基于尚硅谷的Mysql8.0视频,修修改改。提取了一些精炼的内容。 首先需要在数据库内引入一张表。链接地址如下。 链接:https://pan.baidu.com/s/1DD83on3J1a2INI7vrqPe4A 提取码:68jy 会进行持续更新。。 1. Mysql目录结构 Mysql的目录结构…...

【Python】【进阶篇】6、Django视图函数
目录 6、Django视图函数1. 第一个视图函数1)HttpResponse视图响应类型2)视图函数参数request3)return视图响应 2. 视图函数执行过程 6、Django视图函数 视图是 MTV 设计模式中的 V 层,它是实现业务逻辑的关键层,可以用…...

Latex常用符号和功能记录
公式下括号 \underbrace & \overbrace \begin{equation} \underbrace{L_1L_2}_{loss ~ 1} \overbrace{L_3L_4}^{loss ~ 2} \end{equation}L L 1 L 2 ⏟ l o s s 1 L 3 L 4 ⏞ l o s s 2 L \underbrace{L_1L_2}_{loss ~ 1} \overbrace{L_3L_4}^{loss ~ 2} Lloss 1…...

MySQL高级篇——索引的创建与设计原则
导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题 目录 一、索引的分类与使用 1.1 索引的分类 1.1.1. 普通索引 1.1.2. 唯一性索引 1.1.3. 主键索引(唯一非空) 1.1.4…...

王一茗: “大数据能力提升项目”与我的成长之路 | 提升之路系列(三)
导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的“π”型人才,由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…...

MySQL:数据库的基本操作
MySQL是一个客户端服务器结构的程序, 一.关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2 等. …...

银行系统【GUI/Swing+MySQL】(Java课设)
系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87708777 …...

【社区图书馆】-《科技服务与价值链》总结
【为什么研究价值链】 价值链及价值链协同体系是现代产业集群的核心枢纽,是推进城市群及产业集群化、服务化、生态化发展的纽带。因而推进价值链协同,创新发展价值链协同业务科技资源体系,既是科技服务业创新的重要方向,也是重塑生…...

工具链和其他-异步模块加载
目录 CMD/AMD Asynchronous Module Definition(AMD异步模块定义,语法风格) Common Module Definition ES6/CommonJS CommonJS ES6 Module 加载器示例 总结 cmd和amd的区别 现在有哪些异步加载方式 整体结构 编程:commonjs es6 module (有可能解…...

第一次使用R语言
在R语言中,“<-”符号与“”意义一样。另一种奇怪的R语言的等号表示方法,是以“->”表示,但是用得少。 有些计算机语言,变量在使用前要先定义,R语言则不需先定义,可在程序中直接设定使用。 若在Con…...

《语文教学通讯》栏目 收稿范围
《语文教学通讯》创刊于1978年,是由山西师范大学主管,山西师大教育科技传媒集团主办的期刊。历年被人民大学书报资料中心转载、复印的篇幅数量均居同类报刊之首。国内刊号:CN 14-1017/G4,国际刊号:ISSN 1004-6097&…...

Towards Principled Disentanglement for Domain Generalization
本文用大量的理论论述了基于解纠缠约束优化的域泛化问题。 这篇文章认为以往的文章在解决域泛化问题时所用的方法都是non-trivial的,也就是说没有作严格的证明,是不可解释的,而本文用到大量的定理和推论证明了方法的有效性。 动机 因为域泛…...

计算机网络学习02
1、TCP 与 UDP 的区别? 是否面向连接 : UDP 在传送数据之前不需要先建立连接。而 TCP 提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。是否是可靠传输: 远地主机在收到 UDP 报文后&…...

网络交换机端口管理工具
如今,企业或组织级网络使用数百个交换机端口作为其 IT 基础架构的一部分来实现网络连接。这使得交换机端口管理成为日常网络管理任务的一部分。传统上,网络管理员必须依靠手动网络交换机端口管理技术来跟踪交换机及其端口连接状态。这种手动任务弊大于利…...

redis五大命令kv设计建议内存淘汰
什么是redis?主要作用? redis(remote dictionary server)远程字典服务:是一个开源的使用ANSI C语言编写,支持网络、可基于内存可持久化的日志型、key-value数据库,并提供多种语言的api redis的数据存在内存中ÿ…...

如何真正认识 Linux 系统结构?这篇文章告诉你
Linux 系统一般有 4 个主要部分:内核、shell、文件系统和应用程序。内核、shell 和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。 Linux内核 内核是操作系统的核心,具有很多最基本功能,…...

【移动端网页布局】流式布局案例 ① ( 视口标签设置 | CSS 样式文件设置 | 布局宽度设置 | 设置最大宽度 | 设置最小宽度 )
文章目录 一、视口标签设置二、CSS 样式文件设置三、布局宽度设置1、设置布局宽度2、设置布局最大宽度3、设置布局最小宽度4、查看网页最大最小宽度5、布局宽度设置 四、代码示例1、主界面标签2、CSS 布局设置 一、视口标签设置 参考 【移动端网页布局】移动端网页布局基础概念…...

力扣---LeetCode88. 合并两个有序数组
文章目录 前言88. 合并两个有序数组链接:方法一:三指针(后插)1.2 代码:1.2 流程图:方法二:开辟新空间2.1 代码:2.2 流程图:2.3 注意: 总结 前言 “或许你并不熠熠生辉甚至有点木讷但…...

H7-TOOL的CANFD Trace全解析功能制作完成,历时一个月(2023-04-28)
为了完成这个功能,差不多耗费了一个月时间,精神状态基本已经被磨平了。 当前已经支持: 1、LUA小程序控制,使用灵活。 2、采用SWD接口直接访问目标板芯片的CANFD外设寄存器和CANFD RAM区实现,支持USB,以太网…...

探析Android中的四类性能优化
作者:Yj家的孺子牛 流畅性优化 主线程模型 了解 Android 的流畅性优化之前,我们需要先了解Android的线程结构。在 Android 中,有一个主线程模型,其中所有的绘制以及交互都是在主线程中进行的,所以,当我们…...

ubuntu18.04 安装编译zlmediakit
参考http://www.cherrylord.cn/archives/zlmediakit 1、获取代码 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init#国内用户推荐…...

C++ -5- 内存管理
文章目录 C语言和C内存管理的区别示例1. C/C 中程序内存区域划分2. C中动态内存管理3.operator new 与 operator delete 函数4.new 和 delete 的实现原理5.定位new表达式 C语言和C内存管理的区别示例 //C语言: struct SListNode {int data;struct SListNode* next; …...

(Linux)在Ubuntu系统中添加新用户并授予root权限
向Ubuntu系统中添加新用户并为其授予root权限的步骤如下: 打开终端Terminal 输入命令: sudo su - 以 root 身份登录. 注: sudo su : 切换root身份, 不携带当前用户环境变量 sudo su - : 切换root身份, 携带当前用户环境变量 输入命令: adduser username 向Ubuntu系统中添…...

AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

Huggingface的GenerationConfig 中的top_k与top_p详细解读
Huggingface的GenerationConfig 中的top_k与top_p详细解读 Top_kTop_p联合共用 Top_k top-k是指只保留概率最高的前k个单词,然后基于剩余单词的概率进行归一化,从中随机抽取一个单词作为最终输出。这种方法可以限制输出序列的长度,并仍然保持…...

学生信息管理系统简易版(文件读写操作)
功能模块 具体功能如下: 添加学生信息修改学生信息(按学号)排序(分别按总分升序、降序、以及按姓名升序)查找学生(按学号)删除学生查看所有学生信息 数据结构体设计 本表设计一个学生信息的结…...

C/C++每日一练(20230426)
目录 1. 不喜欢带钱的小C 🌟🌟 2. 数组排序 ※ 3. 超级素数 ※ 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 不喜欢带钱的小C 小C不喜欢带钱,…...

halcon灰度积分投影/垂直积分投影
简介:关于灰度投影积分可以用到的场合很多,例如分割字符,分割尺子上的刻度等,适用于有规律的变化这些内容的检测。本文复现了论文《基于深度学习和灰度纹理特征的铁路接触网绝缘子状态检测》中灰度积分投影实现了对绝缘子缺陷位置的检测。见(图1)灰度积分垂直方向投影获得…...

Unity打包的apk在安卓4.4.2盒子上碰到的问题
项目场景: Unity开发的项目需要在安卓4.4.2盒子上运行。 问题描述 1、会出"从顶部向下滑动即可退出全屏模式。"的弹框,这是android4.4的一个特性,叫做沉浸模式(Full-screen Immersive Mode),当app启用该模…...