对比项 | Gitea | GitLab |
---|---|---|
核心定位 | 轻量级 Git 仓库管理 | 全功能 DevOps 平台 |
资源占用 | 低(内存:100MB+,CPU:单核即可) | 高(内存:4GB+,CPU:多核推荐) |
安装复杂度 | 简单,依赖少 | 复杂,依赖多(PostgreSQL、Redis 等) |
代码管理 | 基础 Git 仓库管理 | 强大的 Git 仓库管理,支持代码审查、合并请求等 |
CI/CD | 无内置 CI/CD,需通过插件或外部工具 | 内置完整的 CI/CD 流水线,支持自动化构建、测试和部署 |
项目管理 | 基础问题跟踪和 Wiki | 完整的项目管理工具,包括看板、里程碑、时间跟踪等 |
用户权限管理 | 基础权限控制 | 细粒度的权限管理和角色控制 |
监控与运维 | 无内置监控工具 | 内置监控、日志管理和性能分析工具 |
容器镜像仓库 | 不支持 | 支持内置容器镜像仓库(Container Registry) |
集成与扩展 | 支持 Webhook 和插件扩展 | 支持丰富的 API 和插件,生态更完善 |
社区与生态 | 社区活跃,生态较小 | 社区和生态非常强大,文档丰富 |
开源与商业版 | 完全开源,免费使用 | 提供开源社区版(GitLab CE)和商业版(GitLab EE) |
适用场景 | 个人开发者、小型团队、资源有限环境 | 中大型团队或企业,需要完整 DevOps 工具链 |
yamlversion: '3'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: always
depends_on:
- mysql
volumes:
- /opt/gitea/data:/data
- /opt/gitea/config:/etc/gitea
shm_size: 3g
ports:
- "80:3000"
- "2222:22"
environment:
- USER_UID=1000
- USER_GID=1000
- DB_TYPE=mysql # 指定数据库类型
- DB_HOST=mysql:3306 # 使用 Docker 服务名连接
- DB_NAME=gitea # 数据库名称
- DB_USER=gitea # 数据库用户
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks:
- gitea_network
mysql:
image: mysql:5.7
container_name: mysql
restart: always
volumes:
- /opt/gitea/mysql/data:/var/lib/mysql # 持久化 MySQL 数据
# ports:
# - "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=1234 # MySQL root 密码
- MYSQL_DATABASE=gitea # 自动创建数据库
- MYSQL_USER=gitea # 自动创建用户
- MYSQL_PASSWORD=1234
networks:
- gitea_network
# command: --default-authentication-plugin=mysql_native_password # 兼容旧版身份验证
networks:
gitea_network:
driver: bridge
在cf上设置一个域名指向服务器IP
默认的都不改。
需要加端口:
git clone ssh://git@gitea.dong-blog.fun:2222/dong/vanblog.git
一个项目太大,资源不够是push不了的,可以执行这个脚本分批推送:
bash#!/bin/bash
set -e
# 用户配置区(按需修改)
repo_path="/root/vanblog/" # 手动指定仓库路径
batch_size=10 # 每批提交文件数
# 自动检测git仓库路径(如果手动指定则优先使用)
if [ -z "$repo_path" ] && current_repo=$(git rev-parse --show-toplevel 2>/dev/null); then
repo_path="$current_repo"
elif [ ! -d "$repo_path/.git" ]; then
echo "错误:未找到有效的Git仓库路径"
exit 1
fi
cd "$repo_path" || { echo "无法进入仓库目录:$repo_path"; exit 1; }
# 获取所有未暂存的修改和未跟踪文件
mapfile -t files < <(
git -c core.quotePath=false ls-files --modified --others --exclude-standard |
while IFS= read -r file; do
[ -e "$file" ] && echo "$file" # 过滤已删除的文件
done
)
total=${#files[@]}
[ $total -eq 0 ] && { echo "没有需要提交的文件"; exit 0; }
counter=1
echo "▷▷ 在仓库路径:$repo_path 处理 $total 个文件"
for ((i=0; i<total; i+=batch_size)); do
current_files=("${files[@]:i:batch_size}")
echo -e "\n▷ 批次 $counter:"
printf '• %s\n' "${current_files[@]}"
# 安全添加文件(包含未跟踪和修改的)
git -c core.quotePath=false add -- "${current_files[@]}"
git -c core.quotePath=false commit -m "增量提交(批次 $counter)"
# 带重试机制的推送
for attempt in {1..3}; do
if [ $counter -eq 1 ]; then
git push -u origin "$(git branch --show-current)"
else
git push
fi && break
echo "⚠️ 尝试 $attempt/3 推送失败,10秒后重试..."
sleep 10
done || { echo "❌ 连续3次推送失败"; exit 1; }
((counter++))
done
echo -e "\n✅ 所有 $total 个文件已分 $((counter-1)) 批提交推送"
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!