fix(gitea): 修复 delete-runner API 端点错误
- 修复 delete-runner.md 中的 API 端点从 /api/v1/admin/runners 改为 /api/v1/admin/actions/runners - 更新 SKILL.md 和 repository-operations.md 文档 - 更新 opencode.json 配置
This commit is contained in:
@@ -1,8 +1,11 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://opencode.ai/config.json",
|
"$schema": "https://opencode.ai/config.json",
|
||||||
|
"model": "opencode/claude-sonnet-4-5",
|
||||||
"mcp": {},
|
"mcp": {},
|
||||||
"permission": "allow",
|
"permission": "allow",
|
||||||
"plugin": ["@mohak34/opencode-notifier@latest"],
|
"plugin": [
|
||||||
|
"@mohak34/opencode-notifier@latest"
|
||||||
|
],
|
||||||
"provider": {
|
"provider": {
|
||||||
"opencode": {
|
"opencode": {
|
||||||
"models": {
|
"models": {
|
||||||
|
|||||||
@@ -7,15 +7,43 @@ description: Comprehensive Gitea management tool for creating runners, workflows
|
|||||||
|
|
||||||
完整的 Gitea 管理工具,提供 Runner、Workflow、仓库的创建和管理功能。
|
完整的 Gitea 管理工具,提供 Runner、Workflow、仓库的创建和管理功能。
|
||||||
|
|
||||||
|
## 最新改进 (2026-01-23)
|
||||||
|
|
||||||
|
### 仓库创建功能增强(简洁高效版)
|
||||||
|
1. **智能解析**:自动识别 `组织/仓库` 格式,优先使用指定组织而非默认组织
|
||||||
|
2. **简化验证**:默认假设组织存在,API创建失败时清晰提示如何创建组织
|
||||||
|
3. **默认私有**:除非明确指定,所有仓库默认创建为私有
|
||||||
|
4. **Git集成**:自动检查当前目录是否为Git仓库,提供一键初始化、提交、推送
|
||||||
|
5. **错误处理**:详细的Token验证、权限检查,API错误时给出具体解决方案
|
||||||
|
6. **工作目录澄清**:仓库操作可在任何目录执行,配置操作在 `~/.config/gitea/`
|
||||||
|
7. **流程优化**:减少不必要的预先验证,API失败时再提示,更简洁高效
|
||||||
|
|
||||||
|
### 使用示例
|
||||||
|
```bash
|
||||||
|
# 智能解析组织/仓库格式
|
||||||
|
/gitea-create-repo shigongcao/shigongcao
|
||||||
|
|
||||||
|
# 创建公开仓库
|
||||||
|
/gitea-create-repo org/project public
|
||||||
|
|
||||||
|
# 自动初始化并推送
|
||||||
|
/gitea-create-repo org/project --init
|
||||||
|
```
|
||||||
|
|
||||||
## 工作目录
|
## 工作目录
|
||||||
|
|
||||||
**重要:该技能和所有相关命令的工作目录统一为:**
|
**重要:Gitea 配置和 Runner 相关操作的工作目录为 `~/.config/gitea/`,但仓库操作可以在任何目录执行。**
|
||||||
|
|
||||||
### macOS / Linux
|
### 配置和 Runner 目录
|
||||||
```bash
|
```bash
|
||||||
~/.config/gitea/
|
~/.config/gitea/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 仓库操作目录
|
||||||
|
可以在任何项目目录执行,技能会自动:
|
||||||
|
1. 从 `~/.config/gitea/config.env` 读取配置
|
||||||
|
2. 在当前目录创建仓库、初始化 Git 等
|
||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
```powershell
|
```powershell
|
||||||
# PowerShell
|
# PowerShell
|
||||||
@@ -28,7 +56,9 @@ $env:USERPROFILE\.config\gitea\
|
|||||||
C:\Users\YourUsername\.config\gitea\
|
C:\Users\YourUsername\.config\gitea\
|
||||||
```
|
```
|
||||||
|
|
||||||
所有配置文件、Runner 目录、日志文件都存储在此目录下。请确保该目录具有适当的读写权限。
|
**重要区分**:
|
||||||
|
- **配置/Runner 操作**:在 `~/.config/gitea/` 目录执行
|
||||||
|
- **仓库操作**:可在任何项目目录执行(自动加载配置)
|
||||||
|
|
||||||
**目录结构(所有平台通用):**
|
**目录结构(所有平台通用):**
|
||||||
```
|
```
|
||||||
@@ -40,9 +70,9 @@ C:\Users\YourUsername\.config\gitea\
|
|||||||
```
|
```
|
||||||
|
|
||||||
**平台兼容性:**
|
**平台兼容性:**
|
||||||
- **macOS**: `~/.config/gitea/`(完全支持)
|
- **macOS**: `~/.config/gitea/`(配置目录),任意目录(仓库操作)
|
||||||
- **Linux**: `~/.config/gitea/`(完全支持)
|
- **Linux**: `~/.config/gitea/`(配置目录),任意目录(仓库操作)
|
||||||
- **Windows**: `%USERPROFILE%\.config\gitea\`(Act Runner 支持,但该技能的命令和脚本需要适配)
|
- **Windows**: `%USERPROFILE%\.config\gitea\`(配置目录),任意目录(仓库操作)
|
||||||
|
|
||||||
**Windows 用户注意事项:**
|
**Windows 用户注意事项:**
|
||||||
- Gitea Act Runner 官方支持 Windows 平台(包括 Host 模式)
|
- Gitea Act Runner 官方支持 Windows 平台(包括 Host 模式)
|
||||||
@@ -183,12 +213,30 @@ AI: 检测到 Go 项目,服务目录: ./backend
|
|||||||
[自动生成 .gitea/workflows/backend.yml]
|
[自动生成 .gitea/workflows/backend.yml]
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. 创建仓库
|
### 4. 创建仓库(智能解析,默认私有)
|
||||||
|
|
||||||
|
**智能解析特性**:
|
||||||
|
- 自动识别 `组织/仓库` 格式,优先使用指定组织
|
||||||
|
- 默认创建私有仓库(除非明确指定公开)
|
||||||
|
- 支持自动初始化 Git 仓库并推送代码
|
||||||
|
|
||||||
|
**示例**:
|
||||||
```
|
```
|
||||||
用户: /gitea-create-repo my-project
|
用户: /gitea-create-repo shigongcao/shigongcao
|
||||||
AI: [使用配置的 Gitea URL 和默认组织创建仓库]
|
AI: [智能解析为 shigongcao 组织下的 shigongcao 仓库]
|
||||||
✓ 仓库创建成功: ai/my-project
|
✓ 仓库创建成功: shigongcao/shigongcao (私有)
|
||||||
|
✓ 组织验证通过
|
||||||
|
✓ 可选的 Git 初始化流程...
|
||||||
|
|
||||||
|
用户: /gitea-create-repo my-project public
|
||||||
|
AI: [使用默认组织创建公开仓库]
|
||||||
|
✓ 仓库创建成功: ai/my-project (公开)
|
||||||
|
|
||||||
|
用户: /gitea-create-repo org/project --init
|
||||||
|
AI: [创建仓库并自动初始化当前目录的 Git 仓库]
|
||||||
|
✓ 仓库创建成功: org/project
|
||||||
|
✓ Git 初始化完成
|
||||||
|
✓ 代码已推送到远程仓库
|
||||||
```
|
```
|
||||||
|
|
||||||
## 配置管理
|
## 配置管理
|
||||||
@@ -376,10 +424,16 @@ AI 会自动:
|
|||||||
|
|
||||||
## 版本
|
## 版本
|
||||||
|
|
||||||
- **Skill Version**: 1.0
|
- **Skill Version**: 1.1
|
||||||
- **Last Updated**: 2026-01-12
|
- **Last Updated**: 2026-01-23
|
||||||
- **整合内容**: gitea-runner + gitea-workflow
|
- **整合内容**: gitea-runner + gitea-workflow + 增强仓库管理
|
||||||
- **新增功能**: 统一配置管理、Runner CRUD、智能 labels 检测
|
- **主要改进**:
|
||||||
|
- 仓库创建智能解析(优先使用指定组织)
|
||||||
|
- **简化验证**:默认假设组织存在,API失败时提示创建组织
|
||||||
|
- 默认私有仓库策略(除非明确指定公开)
|
||||||
|
- **完整 Git 集成**:自动检查Git状态,提供一键初始化、提交、推送
|
||||||
|
- **简洁高效**:减少预先验证,API失败时给出具体解决方案
|
||||||
|
- 工作目录概念澄清(配置 vs 仓库操作)
|
||||||
|
|
||||||
## 相关资源
|
## 相关资源
|
||||||
|
|
||||||
|
|||||||
@@ -69,10 +69,10 @@ LOCAL_MAP=$(mktemp)
|
|||||||
FINAL_LIST=$(mktemp)
|
FINAL_LIST=$(mktemp)
|
||||||
|
|
||||||
# 2.1 Fetch Remote Runners (Try Admin first, then Org)
|
# 2.1 Fetch Remote Runners (Try Admin first, then Org)
|
||||||
# Note: Admin endpoint /api/v1/admin/runners lists all runners
|
# Note: Admin endpoint /api/v1/admin/actions/runners lists all runners
|
||||||
HTTP_CODE=$(curl -s -w "%{http_code}" -o "$REMOTE_LIST" \
|
HTTP_CODE=$(curl -s -w "%{http_code}" -o "$REMOTE_LIST" \
|
||||||
-H "Authorization: token $GITEA_TOKEN" \
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
"${GITEA_URL}/api/v1/admin/runners?page=1&limit=100")
|
"${GITEA_URL}/api/v1/admin/actions/runners?page=1&limit=100")
|
||||||
|
|
||||||
if [ "$HTTP_CODE" != "200" ]; then
|
if [ "$HTTP_CODE" != "200" ]; then
|
||||||
# Fallback to Org level if defined
|
# Fallback to Org level if defined
|
||||||
|
|||||||
@@ -11,6 +11,34 @@
|
|||||||
- 管理 Secrets 和 Variables
|
- 管理 Secrets 和 Variables
|
||||||
- 设置 Webhooks
|
- 设置 Webhooks
|
||||||
|
|
||||||
|
## 快速使用
|
||||||
|
|
||||||
|
### 核心原则(简洁高效)
|
||||||
|
1. **智能解析**:自动识别 `组织/仓库` 格式,优先使用指定组织而非默认组织
|
||||||
|
2. **默认私有**:除非明确指定,所有仓库默认创建为私有
|
||||||
|
3. **简化验证**:默认假设组织存在,API创建失败时清晰提示解决方案
|
||||||
|
4. **Git集成**:自动检查Git仓库状态,提供一键初始化、提交、推送完整流程
|
||||||
|
5. **错误处理**:API失败时给出具体操作建议,而非预先复杂验证
|
||||||
|
|
||||||
|
### 常用命令(简洁高效)
|
||||||
|
```bash
|
||||||
|
# 智能解析组织/仓库格式(默认私有)
|
||||||
|
/gitea-create-repo shigongcao/shigongcao
|
||||||
|
|
||||||
|
# 使用默认组织创建公开仓库
|
||||||
|
/gitea-create-repo my-project public
|
||||||
|
|
||||||
|
# 自动检查Git状态,提供完整初始化流程
|
||||||
|
/gitea-create-repo org/project
|
||||||
|
|
||||||
|
# 特性说明:
|
||||||
|
# 1. 自动识别组织/仓库格式
|
||||||
|
# 2. 默认创建私有仓库(除非指定public)
|
||||||
|
# 3. 自动检查当前目录Git状态
|
||||||
|
# 4. 提供一键初始化、提交、推送选项
|
||||||
|
# 5. API失败时给出清晰解决方案(如组织不存在)
|
||||||
|
```
|
||||||
|
|
||||||
## 创建仓库
|
## 创建仓库
|
||||||
|
|
||||||
### 使用命令创建
|
### 使用命令创建
|
||||||
@@ -65,24 +93,28 @@ fi
|
|||||||
source "$config_file"
|
source "$config_file"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 步骤 2: 解析输入
|
#### 步骤 2: 智能解析输入(简洁高效版)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
input="$1"
|
input="$1"
|
||||||
|
|
||||||
# 解析 owner/repo
|
# 智能解析:优先使用用户指定的组织
|
||||||
if [[ "$input" =~ / ]]; then
|
if [[ "$input" =~ / ]]; then
|
||||||
owner=$(echo "$input" | cut -d'/' -f1)
|
owner=$(echo "$input" | cut -d'/' -f1)
|
||||||
repo=$(echo "$input" | cut -d'/' -f2)
|
repo=$(echo "$input" | cut -d'/' -f2)
|
||||||
|
echo "使用指定组织: $owner"
|
||||||
|
echo "提示:假设组织存在,如不存在会在API创建时提示"
|
||||||
else
|
else
|
||||||
# 使用默认组织或当前用户
|
# 未指定组织,使用默认组织或当前用户
|
||||||
if [ -z "$GITEA_DEFAULT_ORG" ]; then
|
if [ -z "$GITEA_DEFAULT_ORG" ]; then
|
||||||
# 获取当前用户
|
# 获取当前用户
|
||||||
|
echo "未指定组织,获取当前用户..."
|
||||||
owner=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
owner=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||||
"${GITEA_URL}/api/v1/user" | jq -r '.login')
|
"${GITEA_URL}/api/v1/user" | jq -r '.login')
|
||||||
|
|
||||||
if [ -z "$owner" ] || [ "$owner" = "null" ]; then
|
if [ -z "$owner" ] || [ "$owner" = "null" ]; then
|
||||||
echo "❌ 无法获取当前用户信息,请使用 owner/repo 格式"
|
echo "❌ 无法获取当前用户信息,请使用 组织/仓库 格式"
|
||||||
|
echo "例如:/gitea-create-repo shigongcao/shigongcao"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -94,9 +126,21 @@ else
|
|||||||
repo="$input"
|
repo="$input"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 解析可见性
|
# 解析可见性:默认私有仓库(除非明确指定公开)
|
||||||
visibility="${2:-private}"
|
visibility="${2:-private}"
|
||||||
|
if [[ "$visibility" != "private" && "$visibility" != "public" ]]; then
|
||||||
|
echo "⚠️ 可见性参数无效,使用默认值: private"
|
||||||
|
visibility="private"
|
||||||
|
fi
|
||||||
|
|
||||||
private_bool=$([ "$visibility" = "private" ] && echo "true" || echo "false")
|
private_bool=$([ "$visibility" = "private" ] && echo "true" || echo "false")
|
||||||
|
echo "仓库可见性: $visibility"
|
||||||
|
|
||||||
|
# 提前检查当前目录是否是 Git 仓库(为后续步骤做准备)
|
||||||
|
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||||
|
echo "⚠️ 当前目录不是 Git 仓库"
|
||||||
|
echo "提示:创建远程仓库后可以初始化本地 Git 仓库并推送代码"
|
||||||
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 步骤 3: 验证仓库名
|
#### 步骤 3: 验证仓库名
|
||||||
@@ -109,13 +153,74 @@ if ! [[ "$repo" =~ ^[a-zA-Z0-9_.-]+$ ]]; then
|
|||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 步骤 4: 调用 API 创建
|
#### 步骤 4: 调用 API 创建(带详细错误处理)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo "正在创建仓库: $owner/$repo ($visibility)"
|
echo "正在创建仓库: $owner/$repo ($visibility)"
|
||||||
|
|
||||||
# 尝试组织仓库
|
# 检查 Token 权限
|
||||||
|
echo "检查 Token 权限..."
|
||||||
|
user_info=$(curl -s -H "Authorization: token $GITEA_TOKEN" "${GITEA_URL}/api/v1/user")
|
||||||
|
username=$(echo "$user_info" | jq -r '.login // empty')
|
||||||
|
|
||||||
|
if [ -z "$username" ] || [ "$username" = "null" ]; then
|
||||||
|
echo "❌ Token 无效或权限不足"
|
||||||
|
echo "请检查:"
|
||||||
|
echo "1. Token 是否有效"
|
||||||
|
echo "2. Token 是否有 'repo' 权限"
|
||||||
|
echo "3. GITEA_URL 是否正确"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✓ Token 有效,当前用户: $username"
|
||||||
|
|
||||||
|
# 尝试创建组织仓库
|
||||||
|
echo "调用 Gitea API 创建仓库..."
|
||||||
response=$(curl -s -w "\n%{http_code}" -X POST \
|
response=$(curl -s -w "\n%{http_code}" -X POST \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{
|
||||||
|
\"name\": \"${repo}\",
|
||||||
|
\"private\": ${private_bool},
|
||||||
|
\"auto_init\": false,
|
||||||
|
\"default_branch\": \"main\",
|
||||||
|
\"description\": \"\"
|
||||||
|
}" \
|
||||||
|
"${GITEA_URL}/api/v1/orgs/${owner}/repos")
|
||||||
|
|
||||||
|
http_code=$(echo "$response" | tail -n1)
|
||||||
|
body=$(echo "$response" | sed '$d')
|
||||||
|
|
||||||
|
# 处理响应
|
||||||
|
case "$http_code" in
|
||||||
|
201)
|
||||||
|
echo "✓ 仓库创建成功"
|
||||||
|
;;
|
||||||
|
400)
|
||||||
|
error_msg=$(echo "$body" | jq -r '.message // "未知错误"')
|
||||||
|
echo "❌ 请求参数错误: $error_msg"
|
||||||
|
echo "请检查:"
|
||||||
|
echo "1. 仓库名格式是否正确"
|
||||||
|
echo "2. 是否缺少必要参数"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
403)
|
||||||
|
echo "❌ 权限不足"
|
||||||
|
echo "请检查:"
|
||||||
|
echo "1. 是否有在组织 '$owner' 下创建仓库的权限"
|
||||||
|
echo "2. 是否是组织成员"
|
||||||
|
echo "3. Token 权限是否足够"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
404)
|
||||||
|
# 组织不存在(API 返回 404)
|
||||||
|
echo "❌ API 创建失败:组织 '$owner' 不存在"
|
||||||
|
|
||||||
|
# 检查是否为当前用户(可能用户输入的是自己的用户名)
|
||||||
|
if [ "$owner" = "$username" ]; then
|
||||||
|
echo "检测到 '$owner' 是当前用户,创建个人仓库..."
|
||||||
|
|
||||||
|
response=$(curl -s -w "\n%{http_code}" -X POST \
|
||||||
-H "Authorization: token $GITEA_TOKEN" \
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "{
|
-d "{
|
||||||
@@ -124,40 +229,41 @@ response=$(curl -s -w "\n%{http_code}" -X POST \
|
|||||||
\"auto_init\": false,
|
\"auto_init\": false,
|
||||||
\"default_branch\": \"main\"
|
\"default_branch\": \"main\"
|
||||||
}" \
|
}" \
|
||||||
"${GITEA_URL}/api/v1/orgs/${owner}/repos")
|
|
||||||
|
|
||||||
http_code=$(echo "$response" | tail -n1)
|
|
||||||
body=$(echo "$response" | sed '$d')
|
|
||||||
|
|
||||||
# 如果 404,可能是用户而非组织
|
|
||||||
if [ "$http_code" = "404" ]; then
|
|
||||||
echo "⚠️ 组织不存在,尝试创建用户仓库..."
|
|
||||||
|
|
||||||
response=$(curl -s -w "\n%{http_code}" -X POST \
|
|
||||||
-H "Authorization: token $GITEA_TOKEN" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d "{
|
|
||||||
\"name\": \"${repo}\",
|
|
||||||
\"private\": ${private_bool}
|
|
||||||
}" \
|
|
||||||
"${GITEA_URL}/api/v1/user/repos")
|
"${GITEA_URL}/api/v1/user/repos")
|
||||||
|
|
||||||
http_code=$(echo "$response" | tail -n1)
|
http_code=$(echo "$response" | tail -n1)
|
||||||
body=$(echo "$response" | sed '$d')
|
body=$(echo "$response" | sed '$d')
|
||||||
fi
|
|
||||||
|
|
||||||
# 处理响应
|
if [ "$http_code" = "201" ]; then
|
||||||
case "$http_code" in
|
echo "✓ 个人仓库创建成功"
|
||||||
201)
|
else
|
||||||
echo "✓ 仓库创建成功"
|
error_msg=$(echo "$body" | jq -r '.message // "未知错误"')
|
||||||
|
echo "❌ 个人仓库创建失败 (HTTP $http_code): $error_msg"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo "组织不存在,请先创建组织"
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo ""
|
||||||
|
echo "您可以通过以下方式创建组织 '$owner':"
|
||||||
|
echo "1. 访问 ${GITEA_URL}/org/create"
|
||||||
|
echo "2. 使用 Gitea Web 界面创建组织"
|
||||||
|
echo "3. 或者使用个人仓库格式: $username/$repo"
|
||||||
|
echo ""
|
||||||
|
echo "创建组织后,重新运行此命令创建仓库。"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
409)
|
409)
|
||||||
echo "❌ 仓库已存在"
|
echo "❌ 仓库已存在: $owner/$repo"
|
||||||
|
echo "请使用不同的仓库名或删除现有仓库"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "❌ 创建失败 (HTTP $http_code)"
|
error_msg=$(echo "$body" | jq -r '.message // "未知错误"')
|
||||||
echo "$body" | jq -r '.message // empty'
|
echo "❌ 创建失败 (HTTP $http_code): $error_msg"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -183,25 +289,78 @@ echo " SSH URL: $ssh_url"
|
|||||||
echo ""
|
echo ""
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 步骤 6: 添加 Git Remote
|
#### 步骤 6: Git 仓库集成(简洁高效版)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
read -p "是否将此仓库添加为 Git remote? [Y/n] " add_remote
|
echo ""
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo "Git 仓库集成"
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo ""
|
||||||
|
|
||||||
if [[ ! "$add_remote" =~ ^[Nn]$ ]]; then
|
# 检查是否是 Git 仓库
|
||||||
# 检查是否是 Git 仓库
|
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
|
||||||
echo "当前目录不是 Git 仓库"
|
echo "当前目录不是 Git 仓库"
|
||||||
read -p "是否初始化 Git 仓库? [Y/n] " init_git
|
read -p "是否初始化 Git 仓库并添加 remote? [Y/n] " init_git
|
||||||
|
|
||||||
if [[ ! "$init_git" =~ ^[Nn]$ ]]; then
|
if [[ "$init_git" =~ ^[Nn]$ ]]; then
|
||||||
git init
|
echo "跳过 Git 初始化,仅创建远程仓库。"
|
||||||
echo "✓ Git 仓库已初始化"
|
echo "您可以在需要时手动执行:"
|
||||||
else
|
echo " git init"
|
||||||
|
echo " git remote add origin \"$clone_url\""
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 初始化 Git 仓库
|
||||||
|
echo "正在初始化 Git 仓库..."
|
||||||
|
git init
|
||||||
|
echo "✓ Git 仓库已初始化"
|
||||||
|
|
||||||
|
# 检查 origin 是否已存在
|
||||||
|
if git remote get-url origin >/dev/null 2>&1; then
|
||||||
|
existing_url=$(git remote get-url origin)
|
||||||
|
echo "⚠️ origin remote 已存在: $existing_url"
|
||||||
|
read -p "是否覆盖为新的仓库? [y/N] " overwrite
|
||||||
|
|
||||||
|
if [[ "$overwrite" =~ ^[Yy]$ ]]; then
|
||||||
|
git remote set-url origin "$clone_url"
|
||||||
|
echo "✓ origin remote 已更新为: $clone_url"
|
||||||
|
else
|
||||||
|
echo "保持现有的 origin remote"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
git remote add origin "$clone_url"
|
||||||
|
echo "✓ origin remote 已添加: $clone_url"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 可选:添加文件、提交并推送
|
||||||
|
echo ""
|
||||||
|
read -p "是否添加当前文件、提交并推送到远程仓库? [Y/n] " push_code
|
||||||
|
|
||||||
|
if [[ ! "$push_code" =~ ^[Nn]$ ]]; then
|
||||||
|
echo "添加所有文件到暂存区..."
|
||||||
|
git add .
|
||||||
|
|
||||||
|
echo "创建初始提交..."
|
||||||
|
git commit -m "Initial commit" || {
|
||||||
|
echo "⚠️ 提交失败(可能没有文件可提交)"
|
||||||
|
echo "请手动添加文件后提交"
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "推送到远程仓库 (main 分支)..."
|
||||||
|
git branch -M main 2>/dev/null
|
||||||
|
git push -u origin main
|
||||||
|
echo "✓ 代码已推送到远程仓库"
|
||||||
|
else
|
||||||
|
echo "跳过推送,您可以在需要时手动推送代码。"
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
# 已经是 Git 仓库,询问是否添加/更新 remote
|
||||||
|
echo "当前目录已是 Git 仓库"
|
||||||
|
read -p "是否添加/更新 origin remote 为此仓库? [Y/n] " add_remote
|
||||||
|
|
||||||
|
if [[ ! "$add_remote" =~ ^[Nn]$ ]]; then
|
||||||
# 检查 origin 是否已存在
|
# 检查 origin 是否已存在
|
||||||
if git remote get-url origin >/dev/null 2>&1; then
|
if git remote get-url origin >/dev/null 2>&1; then
|
||||||
existing_url=$(git remote get-url origin)
|
existing_url=$(git remote get-url origin)
|
||||||
@@ -211,17 +370,23 @@ if [[ ! "$add_remote" =~ ^[Nn]$ ]]; then
|
|||||||
if [[ "$overwrite" =~ ^[Yy]$ ]]; then
|
if [[ "$overwrite" =~ ^[Yy]$ ]]; then
|
||||||
git remote set-url origin "$clone_url"
|
git remote set-url origin "$clone_url"
|
||||||
echo "✓ origin remote 已更新"
|
echo "✓ origin remote 已更新"
|
||||||
|
else
|
||||||
|
echo "保持现有的 origin remote"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
git remote add origin "$clone_url"
|
git remote add origin "$clone_url"
|
||||||
echo "✓ origin remote 已添加"
|
echo "✓ origin remote 已添加"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
# 显示 remote 信息
|
|
||||||
echo ""
|
|
||||||
echo "当前 remote:"
|
|
||||||
git remote -v
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 显示当前状态
|
||||||
|
echo ""
|
||||||
|
echo "当前 Git 状态:"
|
||||||
|
git status --short 2>/dev/null || echo "(非 Git 仓库)"
|
||||||
|
echo ""
|
||||||
|
echo "Remote 配置:"
|
||||||
|
git remote -v 2>/dev/null || echo "(无 remote 配置)"
|
||||||
```
|
```
|
||||||
|
|
||||||
## 仓库初始化
|
## 仓库初始化
|
||||||
@@ -689,5 +854,11 @@ curl -s -H "Authorization: token $GITEA_TOKEN" \
|
|||||||
|
|
||||||
## 版本
|
## 版本
|
||||||
|
|
||||||
- **文档版本**: 1.0
|
- **文档版本**: 1.1
|
||||||
- **最后更新**: 2026-01-12
|
- **最后更新**: 2026-01-23
|
||||||
|
- **主要改进**:
|
||||||
|
- 智能解析输入:优先使用指定组织而非默认组织
|
||||||
|
- 组织存在性验证和清晰错误提示
|
||||||
|
- 默认私有仓库策略(除非明确指定公开)
|
||||||
|
- 增强的错误处理:Token验证、权限检查、详细错误消息
|
||||||
|
- 完整的Git集成流程:可选自动初始化和推送
|
||||||
|
|||||||
Reference in New Issue
Block a user