编辑
2025-03-11
Linux运维
00

目录

Gitea 和 GitLab 的主要差异
docker compose
域名DNS
gitea设置
创建仓库
配置ssh密钥
clone项目
分批次推送

Gitea 和 GitLab 的主要差异

对比项GiteaGitLab
核心定位轻量级 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 工具链

docker compose

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

域名DNS

在cf上设置一个域名指向服务器IP

gitea设置

默认的都不改。

image.png

image.png

image.png

image.png

创建仓库

配置ssh密钥

clone项目

需要加端口:

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)) 批提交推送"
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!