first commit
This commit is contained in:
855
Gerrit安装使用指南.md
Normal file
855
Gerrit安装使用指南.md
Normal file
@@ -0,0 +1,855 @@
|
||||
# Gerrit 个人使用完整安装与使用指南
|
||||
|
||||
## 📋 目录
|
||||
- [环境准备](#环境准备)
|
||||
- [手动安装步骤](#手动安装步骤)
|
||||
- [一键自动化安装脚本](#一键自动化安装脚本)
|
||||
- [使用指南](#使用指南)
|
||||
- [常用技巧](#常用技巧)
|
||||
|
||||
---
|
||||
|
||||
## 环境准备
|
||||
|
||||
### 适合的系统
|
||||
- **Ubuntu** 18.04+ / 20.04 / 22.04
|
||||
- **Debian** 10+ / 11+
|
||||
- **CentOS** 7+ / Rocky Linux 8+
|
||||
|
||||
### 云主机建议配置
|
||||
- **CPU**: 1-2核
|
||||
- **内存**: 2GB
|
||||
- **磁盘**: 20GB+ (根据项目数量调整)
|
||||
- **网络**: 公网IP(如需远程访问)
|
||||
|
||||
### 必备软件
|
||||
- **Git**: 版本控制工具
|
||||
- **JDK**: Java 11 或 Java 17(推荐 Java 17)
|
||||
- **wget**: 下载工具
|
||||
|
||||
---
|
||||
|
||||
## 手动安装步骤
|
||||
|
||||
### 步骤 1: 系统更新
|
||||
|
||||
```bash
|
||||
# Ubuntu/Debian 系统
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
|
||||
# CentOS/Rocky Linux 系统
|
||||
sudo yum update -y
|
||||
# 或者 (CentOS 8+)
|
||||
sudo dnf update -y
|
||||
```
|
||||
|
||||
### 步骤 2: 安装依赖软件
|
||||
|
||||
#### Ubuntu/Debian 系统
|
||||
|
||||
```bash
|
||||
# 安装 Git 和 wget
|
||||
sudo apt install -y git wget
|
||||
|
||||
# 安装 OpenJDK 17
|
||||
sudo apt install -y openjdk-17-jdk
|
||||
|
||||
# 验证安装
|
||||
java -version
|
||||
git --version
|
||||
```
|
||||
|
||||
#### CentOS/Rocky Linux 系统
|
||||
|
||||
```bash
|
||||
# 安装 Git 和 wget
|
||||
sudo yum install -y git wget
|
||||
# 或者 (CentOS 8+)
|
||||
sudo dnf install -y git wget
|
||||
|
||||
# 安装 OpenJDK 17
|
||||
sudo yum install -y java-17-openjdk java-17-openjdk-devel
|
||||
# 或者 (CentOS 8+)
|
||||
sudo dnf install -y java-17-openjdk java-17-openjdk-devel
|
||||
|
||||
# 验证安装
|
||||
java -version
|
||||
git --version
|
||||
```
|
||||
|
||||
### 步骤 3: 创建工作目录
|
||||
|
||||
```bash
|
||||
# 创建 Gerrit 工作目录
|
||||
sudo mkdir -p /opt/gerrit
|
||||
sudo chown $USER:$USER /opt/gerrit
|
||||
cd /opt/gerrit
|
||||
```
|
||||
|
||||
### 步骤 4: 下载 Gerrit.war 文件
|
||||
|
||||
```bash
|
||||
# 下载最新稳定版本(以 3.9.0 为例,可根据需要修改版本号)
|
||||
GERRIT_VERSION=3.9.0
|
||||
wget https://gerrit-releases.storage.googleapis.com/gerrit-${GERRIT_VERSION}.war
|
||||
|
||||
# 或者下载特定版本
|
||||
# wget https://gerrit-releases.storage.googleapis.com/gerrit-3.8.0.war
|
||||
```
|
||||
|
||||
### 步骤 5: 初始化 Gerrit(使用内置 H2 数据库)
|
||||
|
||||
```bash
|
||||
# 初始化 Gerrit,使用 H2 数据库(适合个人使用)
|
||||
java -jar gerrit-${GERRIT_VERSION}.war init -d review_site
|
||||
|
||||
# 初始化过程中会提示以下配置,建议选择:
|
||||
# - 数据库类型: [2] H2 (默认,适合个人使用)
|
||||
# - 认证方式: [1] DEVELOPMENT_BECOME_ANY_ACCOUNT (开发模式,方便测试)
|
||||
# 或者 [2] HTTP (生产环境推荐)
|
||||
# - Git 仓库位置: 直接回车使用默认值
|
||||
# - 索引类型: [1] LUCENE (默认)
|
||||
# - 监听地址: 直接回车使用默认 (0.0.0.0)
|
||||
# - 监听端口: 直接回车使用默认 (29418) 或输入自定义端口
|
||||
# - 是否作为守护进程运行: [Y] 是
|
||||
# - 是否安装 Bouncy Castle: [Y] 是
|
||||
```
|
||||
|
||||
**注意**: 如果希望非交互式初始化,可以使用以下命令:
|
||||
|
||||
```bash
|
||||
java -jar gerrit-${GERRIT_VERSION}.war init \
|
||||
-d review_site \
|
||||
--batch \
|
||||
--no-auto-start \
|
||||
--install-plugin=download-commands \
|
||||
--install-plugin=replication \
|
||||
--install-plugin=reviewnotes
|
||||
```
|
||||
|
||||
### 步骤 6: 启动 Gerrit 服务
|
||||
|
||||
```bash
|
||||
# 进入 Gerrit 站点目录
|
||||
cd /opt/gerrit/review_site
|
||||
|
||||
# 启动 Gerrit
|
||||
bin/gerrit.sh start
|
||||
|
||||
# 查看状态
|
||||
bin/gerrit.sh status
|
||||
|
||||
# 查看日志
|
||||
tail -f logs/gerrit.log
|
||||
```
|
||||
|
||||
### 步骤 7: 访问 Gerrit
|
||||
101.43.95.130
|
||||
http://101.43.95.130:8080
|
||||
打开浏览器访问:
|
||||
- **Web 界面**: `http://你的服务器IP:8080` 或 `http://localhost:8080`
|
||||
- **SSH 端口**: `29418` (默认)
|
||||
|
||||
---
|
||||
|
||||
## 一键自动化安装脚本
|
||||
|
||||
以下脚本会自动判断系统类型、安装依赖、下载 Gerrit、初始化并启动服务。
|
||||
|
||||
### 创建安装脚本
|
||||
|
||||
```bash
|
||||
cat > install_gerrit.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
# Gerrit 一键安装脚本
|
||||
# 支持 Ubuntu/Debian 和 CentOS/Rocky Linux
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 配置变量
|
||||
GERRIT_VERSION="${GERRIT_VERSION:-3.9.0}"
|
||||
GERRIT_HOME="/opt/gerrit"
|
||||
GERRIT_USER="${USER}"
|
||||
GERRIT_PORT="${GERRIT_PORT:-8080}"
|
||||
GERRIT_SSH_PORT="${GERRIT_SSH_PORT:-29418}"
|
||||
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN}Gerrit 自动化安装脚本${NC}"
|
||||
echo -e "${GREEN}版本: ${GERRIT_VERSION}${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
|
||||
# 检测系统类型
|
||||
detect_os() {
|
||||
if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
OS=$ID
|
||||
OS_VERSION=$VERSION_ID
|
||||
elif [ -f /etc/redhat-release ]; then
|
||||
OS="rhel"
|
||||
OS_VERSION=$(cat /etc/redhat-release | sed 's/.*release \([0-9]\+\).*/\1/')
|
||||
else
|
||||
echo -e "${RED}无法检测操作系统类型${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${YELLOW}检测到系统: ${OS} ${OS_VERSION}${NC}"
|
||||
}
|
||||
|
||||
# 安装依赖
|
||||
install_dependencies() {
|
||||
echo -e "${GREEN}开始安装依赖...${NC}"
|
||||
|
||||
if [[ "$OS" == "ubuntu" ]] || [[ "$OS" == "debian" ]]; then
|
||||
sudo apt update
|
||||
sudo apt install -y git wget openjdk-17-jdk
|
||||
elif [[ "$OS" == "centos" ]] || [[ "$OS" == "rhel" ]] || [[ "$OS" == "rocky" ]]; then
|
||||
if command -v dnf &> /dev/null; then
|
||||
sudo dnf install -y git wget java-17-openjdk java-17-openjdk-devel
|
||||
else
|
||||
sudo yum install -y git wget java-17-openjdk java-17-openjdk-devel
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}不支持的操作系统: ${OS}${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 验证 Java 安装
|
||||
if ! java -version 2>&1 | grep -q "version"; then
|
||||
echo -e "${RED}Java 安装失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}依赖安装完成${NC}"
|
||||
}
|
||||
|
||||
# 创建工作目录
|
||||
create_directories() {
|
||||
echo -e "${GREEN}创建工作目录...${NC}"
|
||||
sudo mkdir -p ${GERRIT_HOME}
|
||||
sudo chown ${GERRIT_USER}:${GERRIT_USER} ${GERRIT_HOME}
|
||||
cd ${GERRIT_HOME}
|
||||
}
|
||||
|
||||
# 下载 Gerrit
|
||||
download_gerrit() {
|
||||
echo -e "${GREEN}下载 Gerrit ${GERRIT_VERSION}...${NC}"
|
||||
cd ${GERRIT_HOME}
|
||||
|
||||
if [ ! -f "gerrit-${GERRIT_VERSION}.war" ]; then
|
||||
wget https://gerrit-releases.storage.googleapis.com/gerrit-${GERRIT_VERSION}.war
|
||||
else
|
||||
echo -e "${YELLOW}Gerrit war 文件已存在,跳过下载${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 初始化 Gerrit
|
||||
init_gerrit() {
|
||||
echo -e "${GREEN}初始化 Gerrit...${NC}"
|
||||
cd ${GERRIT_HOME}
|
||||
|
||||
if [ -d "review_site" ]; then
|
||||
echo -e "${YELLOW}Gerrit 已初始化,跳过初始化步骤${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
# 非交互式初始化
|
||||
java -jar gerrit-${GERRIT_VERSION}.war init \
|
||||
-d review_site \
|
||||
--batch \
|
||||
--no-auto-start \
|
||||
-D gerrit.canonicalWebUrl=http://$(hostname -I | awk '{print $1}'):${GERRIT_PORT}/ \
|
||||
--install-plugin=download-commands \
|
||||
--install-plugin=replication \
|
||||
--install-plugin=reviewnotes || true
|
||||
|
||||
# 配置认证方式为开发模式(方便个人使用)
|
||||
cat > review_site/etc/gerrit.config << EOCONFIG
|
||||
[gerrit]
|
||||
basePath = git
|
||||
canonicalWebUrl = http://$(hostname -I | awk '{print $1}'):${GERRIT_PORT}/
|
||||
serverId = $(uuidgen 2>/dev/null || echo $(date +%s))
|
||||
[database]
|
||||
type = h2
|
||||
database = db/ReviewDB
|
||||
[auth]
|
||||
type = DEVELOPMENT_BECOME_ANY_ACCOUNT
|
||||
[sshd]
|
||||
listenAddress = *:${GERRIT_SSH_PORT}
|
||||
[httpd]
|
||||
listenUrl = http://*:${GERRIT_PORT}/
|
||||
[cache]
|
||||
directory = cache
|
||||
[index]
|
||||
type = LUCENE
|
||||
[receive]
|
||||
enableSignedPush = false
|
||||
EOCONFIG
|
||||
|
||||
echo -e "${GREEN}Gerrit 初始化完成${NC}"
|
||||
}
|
||||
|
||||
# 启动 Gerrit
|
||||
start_gerrit() {
|
||||
echo -e "${GREEN}启动 Gerrit 服务...${NC}"
|
||||
cd ${GERRIT_HOME}/review_site
|
||||
|
||||
# 启动服务
|
||||
bin/gerrit.sh start
|
||||
|
||||
# 等待服务启动
|
||||
sleep 5
|
||||
|
||||
# 检查状态
|
||||
if bin/gerrit.sh status | grep -q "Running"; then
|
||||
echo -e "${GREEN}Gerrit 服务启动成功!${NC}"
|
||||
else
|
||||
echo -e "${RED}Gerrit 服务启动失败,请检查日志${NC}"
|
||||
echo -e "${YELLOW}查看日志: tail -f ${GERRIT_HOME}/review_site/logs/gerrit.log${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 创建 systemd 服务(可选)
|
||||
create_systemd_service() {
|
||||
echo -e "${GREEN}创建 systemd 服务...${NC}"
|
||||
|
||||
sudo tee /etc/systemd/system/gerrit.service > /dev/null << EOSERVICE
|
||||
[Unit]
|
||||
Description=Gerrit Code Review
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
User=${GERRIT_USER}
|
||||
Group=${GERRIT_USER}
|
||||
ExecStart=${GERRIT_HOME}/review_site/bin/gerrit.sh start
|
||||
ExecStop=${GERRIT_HOME}/review_site/bin/gerrit.sh stop
|
||||
ExecReload=${GERRIT_HOME}/review_site/bin/gerrit.sh restart
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOSERVICE
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable gerrit
|
||||
|
||||
echo -e "${GREEN}systemd 服务创建完成${NC}"
|
||||
echo -e "${YELLOW}使用以下命令管理服务:${NC}"
|
||||
echo -e " 启动: sudo systemctl start gerrit"
|
||||
echo -e " 停止: sudo systemctl stop gerrit"
|
||||
echo -e " 重启: sudo systemctl restart gerrit"
|
||||
echo -e " 状态: sudo systemctl status gerrit"
|
||||
}
|
||||
|
||||
# 输出访问信息
|
||||
print_info() {
|
||||
SERVER_IP=$(hostname -I | awk '{print $1}')
|
||||
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN}安装完成!${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${YELLOW}访问地址:${NC}"
|
||||
echo -e " Web 界面: http://${SERVER_IP}:${GERRIT_PORT}"
|
||||
echo -e " SSH 端口: ${GERRIT_SSH_PORT}"
|
||||
echo -e ""
|
||||
echo -e "${YELLOW}常用命令:${NC}"
|
||||
echo -e " 启动服务: ${GERRIT_HOME}/review_site/bin/gerrit.sh start"
|
||||
echo -e " 停止服务: ${GERRIT_HOME}/review_site/bin/gerrit.sh stop"
|
||||
echo -e " 重启服务: ${GERRIT_HOME}/review_site/bin/gerrit.sh restart"
|
||||
echo -e " 查看状态: ${GERRIT_HOME}/review_site/bin/gerrit.sh status"
|
||||
echo -e " 查看日志: tail -f ${GERRIT_HOME}/review_site/logs/gerrit.log"
|
||||
echo -e ""
|
||||
echo -e "${YELLOW}配置文件位置:${NC}"
|
||||
echo -e " ${GERRIT_HOME}/review_site/etc/gerrit.config"
|
||||
echo -e ""
|
||||
echo -e "${YELLOW}首次访问:${NC}"
|
||||
echo -e " 1. 打开浏览器访问 http://${SERVER_IP}:${GERRIT_PORT}"
|
||||
echo -e " 2. 使用任意用户名登录(开发模式)"
|
||||
echo -e " 3. 第一个登录的用户将自动成为管理员"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
detect_os
|
||||
install_dependencies
|
||||
create_directories
|
||||
download_gerrit
|
||||
init_gerrit
|
||||
start_gerrit
|
||||
|
||||
# 询问是否创建 systemd 服务
|
||||
read -p "是否创建 systemd 服务以便开机自启? (y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
create_systemd_service
|
||||
fi
|
||||
|
||||
print_info
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
main
|
||||
EOF
|
||||
|
||||
chmod +x install_gerrit.sh
|
||||
```
|
||||
|
||||
### 运行安装脚本
|
||||
|
||||
```bash
|
||||
# 直接运行(使用默认配置)
|
||||
./install_gerrit.sh
|
||||
|
||||
# 或者指定版本和端口
|
||||
GERRIT_VERSION=3.8.0 GERRIT_PORT=8080 ./install_gerrit.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 使用指南
|
||||
|
||||
### 1. 首页访问与管理员账户创建
|
||||
|
||||
#### 访问 Gerrit
|
||||
|
||||
1. 打开浏览器,访问 `http://你的服务器IP:8080`
|
||||
2. 首次访问会看到 Gerrit 欢迎页面
|
||||
|
||||
#### 创建管理员账户
|
||||
|
||||
**方式一:开发模式(推荐个人使用)**
|
||||
|
||||
如果使用 `DEVELOPMENT_BECOME_ANY_ACCOUNT` 认证方式:
|
||||
|
||||
1. 点击右上角 "Sign In"
|
||||
2. 输入任意用户名(例如:`admin`)
|
||||
3. 点击 "Sign In"
|
||||
4. **第一个登录的用户自动成为管理员**
|
||||
|
||||
**方式二:HTTP 认证**
|
||||
|
||||
1. 首次访问会提示创建账户
|
||||
2. 输入用户名和邮箱
|
||||
3. 设置密码
|
||||
4. 第一个账户自动成为管理员
|
||||
|
||||
#### 验证管理员权限
|
||||
|
||||
登录后,点击右上角用户名 → "Settings" → 左侧菜单应显示 "Administration" 选项。
|
||||
|
||||
### 2. 创建项目仓库
|
||||
|
||||
#### 在 Web 界面创建项目
|
||||
|
||||
1. 登录 Gerrit
|
||||
2. 点击顶部菜单 "Projects" → "Create Project"
|
||||
3. 填写项目信息:
|
||||
- **Project Name**: `my-project`(例如)
|
||||
- **Parent**: `All-Projects`(默认)
|
||||
- **Description**: 项目描述(可选)
|
||||
- **Submit Type**: `Merge If Necessary`(推荐)
|
||||
- **Create initial empty commit**: 勾选(推荐)
|
||||
4. 点击 "Create Project"
|
||||
|
||||
#### 通过命令行创建项目
|
||||
|
||||
```bash
|
||||
# 使用 SSH 连接 Gerrit
|
||||
ssh -p 29418 admin@你的服务器IP gerrit create-project my-project
|
||||
|
||||
# 或者使用 HTTP API(需要配置)
|
||||
curl -X PUT \
|
||||
--user admin:密码 \
|
||||
http://你的服务器IP:8080/a/projects/my-project
|
||||
```
|
||||
|
||||
### 3. 在本地 Git 配置与克隆仓库
|
||||
|
||||
#### 配置 Git 用户信息
|
||||
|
||||
```bash
|
||||
# 设置全局用户信息
|
||||
git config --global user.name "Your Name"
|
||||
git config --global user.email "your.email@example.com"
|
||||
|
||||
# 配置 Gerrit 服务器
|
||||
git config --global review.你的服务器IP:29418.username admin
|
||||
```
|
||||
|
||||
#### 克隆仓库
|
||||
|
||||
```bash
|
||||
# 方式一:通过 SSH(推荐)
|
||||
git clone ssh://admin@你的服务器IP:29418/my-project
|
||||
|
||||
# 方式二:通过 HTTP
|
||||
git clone http://你的服务器IP:8080/my-project
|
||||
```
|
||||
|
||||
#### 配置 Git 远程仓库
|
||||
|
||||
如果已经有一个本地 Git 仓库,可以添加 Gerrit 作为远程仓库:
|
||||
|
||||
```bash
|
||||
cd your-existing-repo
|
||||
git remote add gerrit ssh://admin@你的服务器IP:29418/my-project
|
||||
# 或者
|
||||
git remote add gerrit http://你的服务器IP:8080/my-project
|
||||
```
|
||||
|
||||
### 4. 开发提交流程
|
||||
|
||||
#### 标准提交流程(代码评审)
|
||||
|
||||
```bash
|
||||
# 1. 进入项目目录
|
||||
cd my-project
|
||||
|
||||
# 2. 创建或切换到开发分支
|
||||
git checkout -b feature/new-feature
|
||||
|
||||
# 3. 进行代码修改
|
||||
echo "# My Project" > README.md
|
||||
git add README.md
|
||||
|
||||
# 4. 提交更改
|
||||
git commit -m "Add README file"
|
||||
|
||||
# 5. 推送到 Gerrit 进行评审
|
||||
# 关键:推送到 refs/for/master 分支(不是直接推送到 master)
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 如果配置了 review 用户名,可以使用:
|
||||
git push gerrit HEAD:refs/for/master
|
||||
```
|
||||
|
||||
**重要说明**:
|
||||
- `refs/for/master` 表示推送到 `master` 分支的评审队列
|
||||
- 推送后会生成一个 Change(变更),需要经过评审才能合并
|
||||
- 推送成功后,Gerrit 会返回 Change 的 URL
|
||||
|
||||
#### 推送示例输出
|
||||
|
||||
```
|
||||
remote: Resolving deltas: 100% (1/1)
|
||||
remote: Processing changes: refs: 1, new: 1
|
||||
remote:
|
||||
remote: SUCCESS
|
||||
remote:
|
||||
remote: http://你的服务器IP:8080/c/my-project/+/1 [NEW]
|
||||
remote:
|
||||
To ssh://你的服务器IP:29418/my-project
|
||||
* [new branch] HEAD -> refs/for/master
|
||||
```
|
||||
|
||||
### 5. 在网页界面进行代码评审并合并
|
||||
|
||||
#### 查看变更
|
||||
|
||||
1. 推送成功后,复制 Gerrit 返回的 URL
|
||||
2. 在浏览器中打开该 URL,或登录 Gerrit 后点击 "Changes" 查看
|
||||
|
||||
#### 代码评审流程
|
||||
|
||||
1. **查看变更详情**
|
||||
- 点击 Change 进入详情页
|
||||
- 查看文件差异(Diff)
|
||||
- 查看提交信息
|
||||
|
||||
2. **添加评论**
|
||||
- 在代码行上点击,添加行内评论
|
||||
- 在页面底部添加整体评论
|
||||
|
||||
3. **评审投票**
|
||||
- **Code-Review**:
|
||||
- `+2` = 批准合并
|
||||
- `+1` = 看起来不错,但需要其他人批准
|
||||
- `-1` = 需要修改
|
||||
- `-2` = 拒绝
|
||||
- **Verified**:
|
||||
- `+1` = 验证通过
|
||||
- `-1` = 验证失败
|
||||
|
||||
4. **提交者修改代码**(如果需要)
|
||||
|
||||
```bash
|
||||
# 修改代码后,追加提交(会自动关联到同一个 Change)
|
||||
git add .
|
||||
git commit --amend # 修改最后一次提交
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
|
||||
5. **合并变更**
|
||||
|
||||
当满足以下条件时,变更可以自动合并:
|
||||
- Code-Review: +2
|
||||
- Verified: +1(如果启用了 Verified 标签)
|
||||
|
||||
或者管理员可以手动点击 "Submit" 按钮合并。
|
||||
|
||||
#### 合并后的操作
|
||||
|
||||
```bash
|
||||
# 更新本地仓库
|
||||
cd my-project
|
||||
git checkout master
|
||||
git pull origin master
|
||||
|
||||
# 删除已合并的特性分支
|
||||
git branch -d feature/new-feature
|
||||
```
|
||||
|
||||
### 6. 常用技巧
|
||||
|
||||
#### 跳过评审直接推送(个人使用)
|
||||
|
||||
如果只是个人使用,可以配置直接推送:
|
||||
|
||||
```bash
|
||||
# 方法一:推送到 refs/heads/master(绕过评审)
|
||||
git push origin HEAD:refs/heads/master
|
||||
|
||||
# 方法二:配置项目权限,允许直接推送
|
||||
# 在 Gerrit Web 界面:
|
||||
# Projects → my-project → Access → Edit
|
||||
# 添加权限:
|
||||
# Reference: refs/heads/*
|
||||
# Push: 允许你的用户组
|
||||
```
|
||||
|
||||
#### 修改端口
|
||||
|
||||
编辑配置文件:
|
||||
|
||||
```bash
|
||||
sudo nano /opt/gerrit/review_site/etc/gerrit.config
|
||||
```
|
||||
|
||||
修改以下部分:
|
||||
|
||||
```ini
|
||||
[httpd]
|
||||
listenUrl = http://*:9090/ # 修改为 9090 端口
|
||||
|
||||
[sshd]
|
||||
listenAddress = *:29419 # 修改 SSH 端口为 29419
|
||||
```
|
||||
|
||||
重启服务:
|
||||
|
||||
```bash
|
||||
/opt/gerrit/review_site/bin/gerrit.sh restart
|
||||
```
|
||||
|
||||
#### 备份数据
|
||||
|
||||
```bash
|
||||
# 1. 停止 Gerrit 服务
|
||||
/opt/gerrit/review_site/bin/gerrit.sh stop
|
||||
|
||||
# 2. 备份整个站点目录
|
||||
tar -czf gerrit-backup-$(date +%Y%m%d).tar.gz /opt/gerrit/review_site
|
||||
|
||||
# 3. 或者只备份重要数据
|
||||
# 备份 Git 仓库
|
||||
tar -czf gerrit-git-$(date +%Y%m%d).tar.gz /opt/gerrit/review_site/git
|
||||
|
||||
# 备份数据库(H2)
|
||||
cp -r /opt/gerrit/review_site/db /backup/gerrit-db-$(date +%Y%m%d)
|
||||
|
||||
# 备份配置
|
||||
cp -r /opt/gerrit/review_site/etc /backup/gerrit-etc-$(date +%Y%m%d)
|
||||
|
||||
# 4. 启动服务
|
||||
/opt/gerrit/review_site/bin/gerrit.sh start
|
||||
```
|
||||
|
||||
#### 恢复数据
|
||||
|
||||
```bash
|
||||
# 1. 停止服务
|
||||
/opt/gerrit/review_site/bin/gerrit.sh stop
|
||||
|
||||
# 2. 恢复备份
|
||||
tar -xzf gerrit-backup-20240101.tar.gz -C /
|
||||
|
||||
# 3. 启动服务
|
||||
/opt/gerrit/review_site/bin/gerrit.sh start
|
||||
```
|
||||
|
||||
#### 查看日志
|
||||
|
||||
```bash
|
||||
# 实时查看日志
|
||||
tail -f /opt/gerrit/review_site/logs/gerrit.log
|
||||
|
||||
# 查看错误日志
|
||||
tail -f /opt/gerrit/review_site/logs/error_log
|
||||
|
||||
# 查看 SSH 日志
|
||||
tail -f /opt/gerrit/review_site/logs/sshd_log
|
||||
```
|
||||
|
||||
#### 修改管理员账户
|
||||
|
||||
```bash
|
||||
# 通过 SSH 命令添加管理员
|
||||
ssh -p 29418 admin@你的服务器IP gerrit set-members --add admin Administrators
|
||||
|
||||
# 查看管理员组
|
||||
ssh -p 29418 admin@你的服务器IP gerrit gsql -c "SELECT account_id, full_name FROM accounts WHERE account_id IN (SELECT account_id FROM account_group_members WHERE group_id IN (SELECT group_id FROM account_groups WHERE name='Administrators'));"
|
||||
```
|
||||
|
||||
#### 配置邮件通知(可选)
|
||||
|
||||
编辑配置文件:
|
||||
|
||||
```bash
|
||||
sudo nano /opt/gerrit/review_site/etc/gerrit.config
|
||||
```
|
||||
|
||||
添加邮件配置:
|
||||
|
||||
```ini
|
||||
[sendemail]
|
||||
smtpServer = smtp.example.com
|
||||
smtpServerPort = 587
|
||||
smtpEncryption = tls
|
||||
smtpUser = your-email@example.com
|
||||
smtpPass = your-password
|
||||
from = Gerrit Code Review <noreply@example.com>
|
||||
```
|
||||
|
||||
#### 性能优化
|
||||
|
||||
对于个人使用,可以调整以下配置:
|
||||
|
||||
```bash
|
||||
sudo nano /opt/gerrit/review_site/etc/gerrit.config
|
||||
```
|
||||
|
||||
```ini
|
||||
[cache]
|
||||
directory = cache
|
||||
|
||||
[core]
|
||||
packedGitOpenFiles = 128
|
||||
packedGitLimit = 100m
|
||||
packedGitWindowSize = 8k
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常用命令速查
|
||||
|
||||
### 服务管理
|
||||
|
||||
```bash
|
||||
# 启动
|
||||
/opt/gerrit/review_site/bin/gerrit.sh start
|
||||
|
||||
# 停止
|
||||
/opt/gerrit/review_site/bin/gerrit.sh stop
|
||||
|
||||
# 重启
|
||||
/opt/gerrit/review_site/bin/gerrit.sh restart
|
||||
|
||||
# 状态
|
||||
/opt/gerrit/review_site/bin/gerrit.sh status
|
||||
|
||||
# 查看日志
|
||||
tail -f /opt/gerrit/review_site/logs/gerrit.log
|
||||
```
|
||||
|
||||
### Git 操作
|
||||
|
||||
```bash
|
||||
# 推送代码评审
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 直接推送(跳过评审)
|
||||
git push origin HEAD:refs/heads/master
|
||||
|
||||
# 修改提交后重新推送
|
||||
git commit --amend
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 查看远程分支
|
||||
git ls-remote origin
|
||||
```
|
||||
|
||||
### Gerrit 命令行工具
|
||||
|
||||
```bash
|
||||
# 创建项目
|
||||
ssh -p 29418 admin@服务器 gerrit create-project my-project
|
||||
|
||||
# 查看项目列表
|
||||
ssh -p 29418 admin@服务器 gerrit ls-projects
|
||||
|
||||
# 查看用户信息
|
||||
ssh -p 29418 admin@服务器 gerrit query --format=JSON --current-patch-set change:1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 问题 1: 无法访问 Web 界面
|
||||
|
||||
**检查项**:
|
||||
1. 服务是否运行:`/opt/gerrit/review_site/bin/gerrit.sh status`
|
||||
2. 端口是否被占用:`netstat -tlnp | grep 8080`
|
||||
3. 防火墙是否开放端口:
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo ufw allow 8080/tcp
|
||||
|
||||
# CentOS
|
||||
sudo firewall-cmd --permanent --add-port=8080/tcp
|
||||
sudo firewall-cmd --reload
|
||||
```
|
||||
4. 查看错误日志:`tail -f /opt/gerrit/review_site/logs/gerrit.log`
|
||||
|
||||
### 问题 2: SSH 连接失败
|
||||
|
||||
**检查项**:
|
||||
1. SSH 服务是否运行:检查 Gerrit 日志
|
||||
2. 端口是否正确:默认 29418
|
||||
3. 用户权限:确保用户已注册
|
||||
|
||||
### 问题 3: 推送失败
|
||||
|
||||
**常见错误**:
|
||||
- `Permission denied`: 检查项目权限配置
|
||||
- `Branch refs/for/master not found`: 确保推送到 `refs/for/master` 而不是 `master`
|
||||
- `Authentication failed`: 检查 SSH 密钥或 HTTP 认证配置
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
恭喜!你已经完成了 Gerrit 的安装和基本配置。现在你可以:
|
||||
|
||||
1. ✅ 通过 Web 界面管理代码评审
|
||||
2. ✅ 使用 Git 推送代码进行评审
|
||||
3. ✅ 在网页上进行代码审查和合并
|
||||
4. ✅ 管理项目仓库和用户权限
|
||||
|
||||
**下一步建议**:
|
||||
- 配置邮件通知(如果需要)
|
||||
- 设置项目权限规则
|
||||
- 安装常用插件(如:download-commands, replication)
|
||||
- 配置定期备份
|
||||
|
||||
祝你使用愉快!如有问题,请查看 Gerrit 官方文档:https://www.gerritcodereview.com/
|
||||
|
||||
Reference in New Issue
Block a user