news 2026/10/27 9:23:48

Generate git and repo script

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Generate git and repo script

脚本用途与使用方法

gerrit_setup.sh用于在 Ubuntu 服务器上一键搭建 Gerrit 代码评审环境,并可选地创建一个裸 Git 仓库作为评审项目。脚本会自动完成依赖安装、git系统用户创建与 SSH 密钥生成、Gerrit 3.4.0 的下载与初始化、服务注册与启动,最后输出访问地址与常用 Git 命令提示。

摘要:本文介绍gerrit_setup.sh脚本,用于在 Ubuntu 18.04 / 20.04 服务器上一键搭建 Gerrit 3.4.0 代码评审环境。脚本自动完成 OpenJDK 11 PPA 添加、依赖安装、git系统用户与 SSH 密钥创建、Gerrit WAR 包下载与init --batch初始化、systemd服务注册与启动,并支持通过-p/--project-name可选创建同名裸仓库并写入gerrit.config。脚本对已存在的用户与已安装的 Gerrit 做了幂等判断,重复执行时自动跳过,最终输出http://<服务器IP>:8080访问地址与克隆、提交、推送示例命令。

功能概述

  • 安装依赖:openssh-server、git、openjdk-11-jdk-headless、nginx
  • 创建并配置git系统用户及其 SSH 密钥
  • 通过-p/--project-name创建同名裸仓库,并写入gerrit.config
  • 下载并初始化 Gerrit 3.4.0,注册为systemd服务并启动
  • 输出 Gerrit Web 访问地址与仓库克隆、提交、推送示例

下面是脚本的整体执行流程:

是

否

否

是

解析命令行参数

添加 OpenJDK PPA 并更新软件源

安装依赖:openssh-server / git / openjdk-11 / nginx

创建 git 用户并生成 SSH 密钥

是否传入 -p 参数

创建同名裸仓库并写入 gerrit.config

跳过建仓,仅安装 Gerrit

Gerrit 是否已安装

下载 gerrit-3.4.0.war 并执行 init --batch

跳过安装

注册并启动 systemd 服务

输出访问地址与常用 Git 命令提示

整个流程按「参数解析 → 环境准备 → 用户与密钥 → 可选建仓 → Gerrit 安装 → 服务启动 → 结果输出」的顺序推进。脚本在创建git用户、创建项目仓库和安装 Gerrit 三处都做了存在性判断,因此重复执行时会自动跳过已完成步骤,只补齐缺失环节,最终统一输出 Web 访问地址与克隆、提交、推送示例命令。

依赖环境

  • Ubuntu 18.04 / 20.04(需支持ppa:openjdk-r/ppa)
  • 具备sudo权限的普通用户
  • 服务器可访问外网,用于下载 Gerrit WAR 包与安装软件包
  • 已安装wget、add-apt-repository(software-properties-common)

参数用法

# 赋予执行权限chmod+x gerrit_setup.sh# 创建名为 demo 的评审项目./gerrit_setup.sh-pdemo# 等价写法./gerrit_setup.sh --project-name demo

不传-p时脚本只安装并启动 Gerrit,不创建项目仓库;传入未知参数会打印提示并以状态码1退出。

访问 Gerrit Web 界面

脚本执行完成后,终端会输出形如http://<服务器IP>:8080的地址,在浏览器中打开即可:

  • 默认管理员用户名:admin
  • 密码:Gerrit 初始化过程中设置的密码

登录后即可在 Web 界面中浏览项目、查看变更并进行代码评审。

#!/bin/bash# Set up author, timestamp, and contact informationSCRIPT_NAME='gerrit_setup.sh'AUTHOR='CursorBot'TIMESTAMP=$(date+"%Y-%m-%d %H:%M:%S")CONTACT='cursorbot@example.com'# Set up command-line argumentswhile[[$#-gt0]];docase$1in-p|--project-name)PROJECT_NAME="$2"shift2;;*)echo"Unknown argument:$1"exit1;;esacdone# Add OpenJDK 11 PPA and update package sourcessudoadd-apt-repository ppa:openjdk-r/ppasudoaptupdate# Install dependenciessudoaptinstall-yopenssh-servergitopenjdk-11-jdk-headless nginx# Create and configure Git userif!id-ugit>/dev/null2>&1;thensudoadduser --disabled-password--gecos""gitsudosugit-c'mkdir /home/git/.ssh && touch /home/git/.ssh/authorized_keys && chmod 600 /home/git/.ssh/authorized_keys'sudosugit-c'ssh-keygen -b 4096 -t rsa -f /home/git/.ssh/id_rsa -N ""'elseecho"User 'git' already exists, skipping creation."fi# Setup Git serverif[-n"${PROJECT_NAME}"];thensudosugit-c"mkdir /home/git/${PROJECT_NAME}.git && cd /home/git/${PROJECT_NAME}.git && git init --bare"IP_ADDRESS=$(hostname-I|awk'{print $1}')sudosugit-c"echo\"port:29418\ntype: GERRIT\nfilesystem_directory: /var/gerrit/review_site\nssh_key: /home/git/.ssh/id_rsa\ncanonical_web_url: http://${IP_ADDRESS}:8080/\"> /home/git/${PROJECT_NAME}.git/gerrit.config"fisudochown-Rgit:git /home/gitsudochmod-R755/home/git# Setup Gerrit serverif!command-vgerrit>/dev/null2>&1;thenwgethttps://gerrit-releases.storage.googleapis.com/gerrit-3.4.0.war-P/var/gerrit/sudojava-jar/var/gerrit/gerrit-3.4.0.war init--batch--no-auto-start-d/var/gerrit/review_sitesudomkdir-p/var/gerrit/review_site/etc/sudocp/var/gerrit/review_site/bin/gerrit.config /var/gerrit/review_site/etc/sudochown-Rgit:git /var/gerritsudosystemctlenablegerrit.servicesudosystemctl start gerrit.serviceelseecho"Gerrit server already installed, skipping setup."fi# Clone Git repository, add and commit file, push changes# cd /tmp# git clone "ssh://git@${IP_ADDRESS}:29418/${PROJECT_NAME}.git"# cd "${PROJECT_NAME}"# echo "This is a test file." > test.txt# git add test.txt# git commit -m "Added test file"# git push# Output success messageecho"Gerrit server setup complete. Project '${PROJECT_NAME}' created and ready for review."echo""echo"You can log in to Gerrit by navigating to the following URL in your web browser:"echo" http://${IP_ADDRESS}:8080"echo"Log in using the following credentials:"echo" Username: admin"echo" Password: (the password you specified during Gerrit setup)"echo""echo"To download and submit changes to the Git repository, run the following commands:"echo" git clone ssh://git@${IP_ADDRESS}:29418/${PROJECT_NAME}.git"echo" cd${PROJECT_NAME}"echo" (make changes to files)"echo" git add (changed files)"echo" git commit -m\"(commit message)\""echo" git push"

总结

  • 一键部署:gerrit_setup.sh自动完成依赖安装、git用户与 SSH 密钥创建、Gerrit 3.4.0 下载初始化、systemd服务注册与启动,无需手工逐步操作。
  • 可选建仓:通过-p/--project-name可同时创建同名裸仓库并写入gerrit.config;不传该参数则只安装并启动 Gerrit。
  • 幂等友好:脚本对已存在的git用户与已安装的 Gerrit 做了判断,重复执行时会跳过对应步骤,避免破坏现有环境。
  • 使用前提:Ubuntu 18.04 / 20.04、具备sudo权限、服务器可访问外网,并已安装wget与software-properties-common。
  • 执行结果:终端输出http://<服务器IP>:8080访问地址、默认管理员账号及克隆/提交/推送示例命令,可直接进入 Web 界面开展代码评审。

参考资料

  • Gerrit Code Review 3.4.0 官方文档
  • Gerrit 初始化与配置参数说明(init命令)
  • Gerrit 配置文件gerrit.config参考
  • OpenJDK PPA 页面(ppa:openjdk-r/ppa)
  • Gerrit 官方下载页(WAR 包发布地址)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 9:20:56

PLC工程师入行三年实战心得:选型、通讯、仿真与故障排查全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/27 9:20:31

程序员电工必看:二极管分类全解析与选型避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/27 9:20:29

工业AP选型:3×3还是2×2?先把空间流、EIRP和散热三笔账算清

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/27 9:18:42

51单片机00~99秒数码管秒表:AT89C51+MAX7219方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/27 9:17:41

车载传感器与执行器:从物理信号到整车可靠性的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/27 9:17:02

滤波电路设计避坑指南:实际电感并联谐振与选型实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华