| 对比项 | 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 工具链 | 
yaml展开代码version: '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 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!