# SafeLine 源码推送到内网 Gitea 指南

适用环境
--------
Gitea Web 地址：http://192.168.1.122:3000
目标组织：Shanghai-Wind-Season-Network
项目本地路径：Z:\SafeLine-9.3.9\SafeLine-9.3.9
当前 Gitea 仓库地址：http://192.168.1.122:3000/Shanghai-Wind-Season-Network/SafeLine.git
Git HTTP remote：http://192.168.1.122:3000/Shanghai-Wind-Season-Network/SafeLine.git

访问令牌：b8b03d0cbc921ae2a540f0116f1e96f9b4396484
（只显示一次，用完建议在 Gitea 里删除重新生成）

---

一、准备 Gitea 仓库
------------------
1. 打开 http://192.168.1.122:3000
2. 登录账号
3. 在 Shanghai-Wind-Season-Network 组织下创建仓库
   - 仓库名：SafeLine
   - **不要勾选**：初始化 README、初始化 .gitignore、初始化 License
   - 选择可见性：私有（推荐）

---

二、进入项目目录
--------------
```powershell
Set-Location Z:\SafeLine-9.3.9\SafeLine-9.3.9
```

---

三、初始化 Git 仓库（如果还没初始化）
-------------------------------
```powershell
# 检查是否已有 .git
ls -Force .git

# 如果没有，初始化
git init
git branch -m main
```

---

四、配置 .gitignore（防止提交敏感文件）
-------------------------------
```powershell
# 创建或更新 .gitignore
cat > .gitignore << 'EOF'
# 敏感配置
.env
*.env
.env.local
.env.*.local

# 数据库
*.db
*.db-wal
*.db-shm
*.sqlite
*.sqlite3

# 依赖目录
node_modules/
vendor/

# 构建产物
*.exe
*.dll
*.so
*.dylib
build/
dist/
out/

# IDE
.idea/
.vscode/
*.swp
*.swo

# 日志
*.log
logs/

# 临时文件
*.tmp
*.temp
.DS_Store
Thumbs.db

# 证书/密钥
*.pem
*.key
*.crt
*.p12
*.pfx

# Gitea token 等密钥
gitea-token.txt
token.txt
EOF
```

---

五、配置 Git 用户信息
------------------
```powershell
git config user.name "YourName"
git config user.email "your@email.com"
```

---

六、添加 Gitea remote
-------------------
```powershell
# 检查现有 remote
git remote -v

# 如果没有 gitea remote，添加
git remote add gitea http://192.168.1.122:3000/Shanghai-Wind-Season-Network/SafeLine.git

# 如果已有但地址不对，修改
git remote set-url gitea http://192.168.1.122:3000/Shanghai-Wind-Season-Network/SafeLine.git

# 确认
git remote -v
# 应该显示：
# gitea  http://192.168.1.122:3000/Shanghai-Wind-Season-Network/SafeLine.git (fetch)
# gitea  http://192.168.1.122:3000/Shanghai-Wind-Season-Network/SafeLine.git (push)
```

---

七、检查工作区状态
---------------
```powershell
git status --short --branch
```

---

八、提交所有修改
-------------
```powershell
# 暂存所有文件
git add -A

# 查看将要提交的文件
git status

# 提交
git commit -m "feat: SafeLine CE 9.3.9 with pro features

- Remove telemetry: disabled all phone-home (installation notify, false positives, behavior tracking, upgrade tips)
- Version branding: removed 'ce-' prefix, product name changed to '长亭雷池 WAF'
- Detection engine enhancement: strict preset enables all 17 modules with aggressive configs
- Multi-user RBAC: admin/operator/viewer roles with password + TOTP 2FA
- Rate limiting: nginx limit_req per website (RPS, burst, action)
- JS Challenge: browser fingerprint verification page with cookie-based bypass
- Security fixes: removed InsecureSkipVerify, hardcoded credentials, NO_AUTH backdoor
"
```

---

九、推送到 Gitea（使用令牌认证）
--------------------------
### 方式 1：临时 Header 推送（推荐，不把令牌写入配置）
```powershell
$token = "b8b03d0cbc921ae2a540f0116f1e96f9b4396484"
$user = "YourGiteaUsername"
$pair = "${user}:${token}"
$basic = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($pair))
$header = "Authorization: Basic $basic"

# 推送
git -c http.extraHeader="$header" -c http.postBuffer=524288000 -c http.version=HTTP/1.1 push -u gitea main
```

### 方式 2：Git Credential Manager（会弹窗）
```powershell
git push -u gitea main
# 弹窗时：
# 用户名：YourGiteaUsername
# 密码：粘贴 b8b03d0cbc921ae2a540f0116f1e96f9b4396484
```

---

十、常见错误处理
--------------
| 错误 | 处理 |
|------|------|
| Authentication failed | 确认用户名和令牌正确，令牌有仓库写入权限 |
| repository not found | 检查 remote 地址是否为 `http://192.168.1.122:3000/Shanghai-Wind-Season-Network/SafeLine.git` |
| rejected (remote has work) | `git pull --rebase gitea main` 后重新推送 |
| RPC failed / postBuffer | 已在命令中加了 `-c http.postBuffer=524288000` |
| Permission denied (Z盘) | 执行 `Get-ChildItem -LiteralPath ".git\objects\pack" -Force | ForEach-Object { $_.Attributes = $_.Attributes -band (-bnot [System.IO.FileAttributes]::ReadOnly) -band (-bnot [System.IO.FileAttributes]::Hidden) }` 然后 `git multi-pack-index write` |

---

十一、确认推送成功
--------------
打开浏览器访问：http://192.168.1.122:3000/Shanghai-Wind-Season-Network/SafeLine
查看最新提交是否出现。

本地验证：
```powershell
git status --short --branch
# 应该显示：## main...gitea/main
```

---

十二、安全提醒
------------
1. ✅ 已使用临时 Header 推送，令牌未写入 remote URL 或 Git 配置
2. ✅ .gitignore 已忽略 .env、密钥、证书、数据库文件
3. 用完令牌后，建议在 Gitea 设置里删除旧令牌并重新生成
4. 不要把令牌发到聊天窗口、写进文件、提交到仓库

---

完整一键推送脚本（复制到 PowerShell 执行）
-----------------------------------
```powershell
Set-Location Z:\SafeLine-9.3.9\SafeLine-9.3.9

# 1. 配置用户信息（按需修改）
git config user.name "YourName"
git config user.email "your@email.com"

# 2. 确保 .gitignore 存在
if (-not (Test-Path .gitignore)) {
    cat > .gitignore << 'EOF'
.env
*.env
*.db
*.db-*
node_modules/
vendor/
build/
dist/
*.exe
*.log
logs/
.idea/
.vscode/
*.pem
*.key
*.crt
gitea-token.txt
EOF
}

# 3. 初始化/检查 Git
if (-not (Test-Path .git)) { git init; git branch -m main }

# 4. 配置 remote
git remote remove gitea 2>$null
git remote add gitea http://192.168.1.122:3000/Shanghai-Wind-Season-Network/SafeLine.git

# 5. 提交
git add -A
git commit -m "feat: SafeLine CE 9.3.9 with pro features

- Remove telemetry: disabled all phone-home (installation notify, false positives, behavior tracking, upgrade tips)
- Version branding: removed 'ce-' prefix, product name changed to '长亭雷池 WAF'
- Detection engine enhancement: strict preset enables all 17 modules with aggressive configs
- Multi-user RBAC: admin/operator/viewer roles with password + TOTP 2FA
- Rate limiting: nginx limit_req per website (RPS, burst, action)
- JS Challenge: browser fingerprint verification page with cookie-based bypass
- Security fixes: removed InsecureSkipVerify, hardcoded credentials, NO_AUTH backdoor
"

# 6. 推送（使用令牌）
$token = "b8b03d0cbc921ae2a540f0116f1e96f9b4396484"
$user = "YourGiteaUsername"
$pair = "${user}:${token}"
$basic = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($pair))
$header = "Authorization: Basic $basic"

git -c http.extraHeader="$header" -c http.postBuffer=524288000 -c http.version=HTTP/1.1 push -u gitea main

# 7. 验证
git status --short --branch
```

---

⚠️ 执行前请修改脚本中的 `YourGiteaUsername` 和 `YourName/your@email.com`。生成完成。保存为 `Z:\SafeLine-9.3.9\SafeLine-9.3.9\GITEA-PUSH-GUIDE.md`。

**关键点：**
1. **目标仓库**：`http://192.168.1.122:3000/Shanghai-Wind-Season-Network/SafeLine.git`
2. **令牌**：`b8b03d0cbc921ae2a540f0116f1e91e96f9b4396484`
3. **推送方式**：临时 Header 认证（不写入配置/历史）
4. **需先在 Gitea 创建仓库**：组织 `Shanghai-Wind-Season-Network` 下新建 `SafeLine`，**不要勾选**初始化选项

执行前请将脚本中的 `YourGiteaUsername` 改为你的 Gitea 用户名，`YourName/your@email.com` 改为提交者信息。