使用
- 用户后台:http://git.kc.com:3000 必须http,没开证书
用户侧git命令
-------------------- 设置host!! -------------------------- 192.168.1.142 git.kc.com -------------------- git环境 -------------------------- git config --global user.name "YourName" # 确保 commit 记录 git config --global user.email "you@example.com" # 确保邮箱正确 git config --global core.autocrlf input # 防止 Windows/Linux 换行符冲突 -------------------- 初始化------------------- cd /your/local/project # 本地项目目录 git init # 本地git初始化,有.gitignore也放进去 git rm -r --cached . # 先清空追踪 git add . # 按照ignore重新追踪 git commit -m "chore: refresh git cache and apply .gitignore" -------------------- 创建远端仓库 ------------------- git branch -M master # 本地分支命名为master git remote remove origin # 先清空关联 git remote add origin http://git.kc.com:3000/用户名/预期仓库名.git # 关联远端仓库 git remote add origin ssh://git.atibm.com/at/预期仓库名.git git config credential.helper store # 开启本地凭证存储,执行一次 git push -u origin master # 推送master分支,会提示输入用户名密码 -------------------- 提交新分支 ------------------- git checkout -b feature-name git add . git commit -m "feat: 你的新功能描述" git push -u origin feature-name -------------------- 拉取代码 ------------------- git clone # 全新下载拉取 git branch -a # 查看远端所有分支 git fetch --all # 拉取:全部分支和提交,不修改本地代码 git pull # 拉取+合并:同分支的提交,会修改本地代码 git pull --rebase # 拉取+垫高:同分支的提交,本地代码被垒到上面去 git cherry-pick commitid # 拉取某次提交 git checkout origin/main -- <文件> # 拉取单个文件 git switch 分支名 # 拉取切换分支 git restore 分支名 # 拉取还原分支 -------------------- 仓库迁移 ------------------- git remote rename origin atdemo # 原挂载点备份 git remote add origin "git.atibm.com:at/my-project.git" # 新挂载点关联 git push -u origin --all # 推送给新挂载点,同时跟踪关系建立 git push origin --tags # 推送所有标签 ############################################################################### # Git 常用命令手册 (vm-alpine Forgejo 环境专用) ############################################################################### # --- 1. 基础配置 --- git config --global user.name "at" # 设置全局用户名 git config --global user.email "at@kc.com" # 设置全局邮箱 git config --global credential.helper store # 永久存储 HTTP 密码 (避免重复输入) git init # 初始化本地仓库 # --- 2. 本地操作 --- git status # 查看当前工作区状态 (哪些文件改了) git add . # 将所有修改添加到暂存区 git commit -m "feat: initial commit" # 提交暂存区代码到本地仓库 git commit --amend # 修正最后一次提交 (改注记或补漏文件) # --- 3. 远端同步 --- git remote add origin http://at:pwd@git.kc.com/at/repo.git # 关联远端 (带用户名密码) git remote set-url origin http://at:new@git.kc.com/at/repo.git # 修改远端地址或密码 git remote -v # 查看当前远程库地址 git push -u origin master # 首次推送并建立分支追踪 (触发自动建库) git push origin master # 推送本地 master 分支到远端 git pull origin master # 拉取远端更新并合并到本地 git fetch origin # 获取远端最新索引 (不合并) # --- 4. 分支管理 --- git branch # 查看本地分支列表 git checkout -b dev # 创建并切换到 dev 分支 git checkout master # 切换回 master 分支 git merge dev # 将 dev 分支的代码合并到当前分支 git branch -D dev # 删除本地分支 git push origin --d dev # 删除远端分支 git fetch -p # 本地清理已删除的引用 git config --global fetch.prune true # 本地自动清理=on # --- 5. 状态检查与日志 --- git log --oneline # 查看简略提交历史 (一行一个) git log --graph --all # 图形化查看分支演变历史 git diff # 查看当前未暂存的修改细节 git ls-remote origin # 检查远端引用 (验证远端库是否存在) git reflog # 查看命令历史 (误删找回神器) # --- 6. 撤销与回滚 --- git checkout -- <file> # 撤销某个文件的修改 (恢复到未改状态) git reset HEAD <file> # 将文件从暂存区撤回工作区 git reset --soft HEAD~1 # 撤销最近一次 commit,代码保留在暂存区 git reset --hard HEAD~1 # 彻底撤销最近一次提交,代码不保留 (慎用!) git clean -fd # 删除工作区中所有未追踪的文件
概述
- 含义:Forgejo 是由 "Forge"(锻造)和 Esperanto(世界语)后缀 "-ejo"(场所)组合而成的造词,意为"锻造工坊",它象征着通过 Git 协作"锻造"代码的过程。项目原是 Gitea 的一个社区驱动分支(fork),2022 年 11 月因 Gitea 转向商业化的治理争议而诞生,
- 仓库:https://codeberg.org/forgejo/forgejo(主仓库,Codeberg 托管)
- 仓库:https://github.com/forgejo/forgejo (镜像仓库,GitHub 托管)
- 特性:✨ Push-to-Create(推送即创建) — 开发者只需
git push到一个尚不存在的远程仓库 URL,Forgejo 便会自动创建对应的仓库。
目录
mkdir -p /www/git/data
docker-compose.yml
services:
forgejo:
image: codeberg.org/forgejo/forgejo:15.0.2-rootless
container_name: git
restart: unless-stopped
networks:
- ghost_net
user: "1000:1000" # rootless 镜像内部默认就是以 1000 运行
environment:
- USER_UID=1000
- USER_GID=1000
- TZ=Asia/Shanghai
# --- 核心运行模式 ---
- FORGEJO__RUN_MODE=prod # 生产模式,关闭调试日志和缓存检查
# --- 数据库连接 ---
- FORGEJO__database__DB_TYPE=mysql
- FORGEJO__database__HOST=mariadb:3306
- FORGEJO__database__NAME=forgejo_db
- FORGEJO__database__USER=ghost
- FORGEJO__database__PASSWD=123456
# --- 域名与 URL 修正 ---
- FORGEJO__server__DOMAIN=git.kc.com # SSH连接域名
- FORGEJO__server__ROOT_URL=http://git.kc.com # HTTP连接、邮件的域名
# --- SSH 配置 (针对 Rootless) ---
- FORGEJO__server__SSH_LISTEN_PORT=2222 # 服务监听,非root大于1024
- FORGEJO__server__SSH_PORT=2222 # 生成url用
- FORGEJO__auth__DISABLE_BASIC_AUTHENTICATION=false # 禁止密码认证,,nginx反代时改为true,只用ssh拉取,增加安全性
- FORGEJO__security__PASSWORD_COMPLEXITY=off # 密码复杂度检查
- FORGEJO__security__MIN_PASSWORD_LENGTH=1 # 最小密码长度
- FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true # 推送即创建仓库
- FORGEJO__repository__ENABLE_PUSH_CREATE_ORG=true # 推送即创建组织
- FORGEJO__server__SSH_SERVER_USE_PROXY_PROTOCOL=true # 支持nginx转发传导来源公网IP
- FORGEJO__service__REQUIRE_SIGNIN_VIEW=true # 登录后才能查看代码
# --- 自动化与工作流 ---
- FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true
- FORGEJO__repository__ENABLE_PUSH_CREATE_ORG=true
volumes:
- ./data:/var/lib/gitea # rootless版本映射路径
- /etc/localtime:/etc/localtime:ro
ports:
- "2222:2222" # 宿主机 2222 映射容器内 2222
- "3000:3000" # HTTP 端口,nginx反代时注释本行
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "3"
deploy:
resources:
limits:
memory: 384M
cpus: 0.7
networks:
ghost_net:
external: trueforgejo.conf
# 80 端口:验证 + 跳转
server {
listen 80;
server_name git.atibm.com;
# Certbot 证书验证路径 (建议保留,方便续签)
location ^~ /.well-known/acme-challenge/ {
root /usr/share/nginx/html;
}
# 其他全部跳转
location / {
return 301 https://$host$request_uri;
}
}
# 443 端口:Trilium 主服务
server {
listen 443 ssl;
http2 on; # 针对你的 1.29.4 版本开启 H2
server_name git.atibm.com;
ssl_certificate /etc/letsencrypt/live/ghost.atibm.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ghost.atibm.com/privkey.pem;
# 日志路径
access_log /var/log/nginx/forgejo-access.log main;
error_log /var/log/nginx/forgejo-error.log warn;
# 静态文件 (Ads/Robots)
# 反向代理核心配置
location / {
proxy_pass http://forgejo:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 动态支持 WebSocket (用于 Forgejo Actions 日志实时查看等功能)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
# 针对大文件 Git Push/Pull 的关键流式传输优化 (防止 Nginx 缓存导致超时)
proxy_buffering off;
proxy_request_buffering off;
# 允许上传/推送单次最大 5MB 的仓库或附件 (可根据需求调整为 1g)
client_max_body_size 100m;
# 针对超大仓库克隆/推送,适当拉长超时时间
proxy_connect_timeout 1200;
proxy_send_timeout 1200;
proxy_read_timeout 1200;
}
}forgejo.stream
# 提示:limit_conn_zone 在全局只能有一个。
# 如果你在 mariadb.stream 里已经写过这一句且 zone 名字也叫 addr,请把下面这句删掉/注释掉,直接复用即可。
# limit_conn_zone $binary_remote_addr zone=addr:10m;
upstream forgejo_ssh_backend {
# 🚨 注意:如果 Nginx 和 Forgejo 在同一个 Docker 网络,通常填容器内端口 22
# 如果你是转发到宿主机或者外网,才填 2222
server forgejo:2222 max_fails=3 fail_timeout=30s;
}
server {
# Nginx 对外监听的 Git SSH 端口
listen 2222 so_keepalive=on;
proxy_pass forgejo_ssh_backend;
proxy_connect_timeout 5s;
proxy_timeout 3600s; # 保留:给大文件传输留足 1 小时超时时间
proxy_buffer_size 16k;
proxy_socket_keepalive on; # 保留:保持 TCP 长连接活性
# 🌟 核心优化:开启 PROXY 协议,把客户端真实公网 IP 塞给 Forgejo
# (注意:开启此项后,必须在 Forgejo 的 app.ini 里配置 SSH_SERVER_USE_PROXY_PROTOCOL = true)
proxy_protocol on;
# 🌟 安全防爆破优化:单个 IP 限制最多 10 个同时运行的 SSH 连接
limit_conn addr 10;
limit_conn_log_level warn;
}