gitlink-cli/skills/gitlink-wiki/references/wiki-delete.md

13 KiB
Raw Blame History

wiki +delete

前置条件: 先阅读 ../../gitlink-shared/SKILL.md 了解认证、全局参数和安全规则。 ⚠️ 危险操作 — 删除操作无法撤销,执行前必须确认用户意图。

删除指定的 Wiki 页面。⚠️ 此操作不可逆!

命令

# 删除 Wiki 页面
gitlink-cli wiki +delete --title "Old Page"

# 删除指定仓库的 Wiki 页面
gitlink-cli wiki +delete --owner Gitlink --repo forgeplus --title "Outdated"

# 删除前先确认(推荐)
gitlink-cli wiki +view --title "Page to Delete"  # 先查看内容
gitlink-cli wiki +delete --title "Page to Delete"  # 再删除

参数

参数 Short 必填 说明
--title -t 要删除的 Wiki 页面标题
--owner 仓库所有者(自动从 git remote 解析)
--repo 仓库名称(自动从 git remote 解析)
--format 输出格式: json/table/yaml
--debug 开启调试输出

返回字段

Table 格式

列名 说明
message 操作结果消息

JSON 格式

{
  "ok": true,
  "data": {
    "message": "Wiki page deleted successfully"
  }
}

Workflow

  1. Confirm the page title to delete.
  2. Warning that this operation is irreversible.
  3. Optional: View current content with wiki +view for final verification.
  4. Execute gitlink-cli wiki +delete --title "<page title>".
  5. Report the deletion result.

[!DANGER] 删除操作无法撤销! 建议执行前先备份内容:

gitlink-cli wiki +view --title "Page" > backup.md
gitlink-cli wiki +delete --title "Page"

API

DELETE https://gateway.gitlink.org.cn/api/wiki/open/deleteWiki
Body: {
  "owner": "...",
  "repo": "...",
  "projectId": 123,
  "pageName": "<title>",
  "message": ""
}

工作流程

  1. CLI 获取 project_id
  2. 调用 Gateway API 删除页面
  3. 验证删除是否成功(尝试获取页面)
  4. 返回删除结果

删除验证逻辑

  • 如果删除 API 返回成功 → 删除成功
  • 如果删除 API 失败,尝试获取页面:
    • 页面不存在 → 删除成功
    • 页面仍存在 → 删除失败

使用场景

场景 1: 删除过时文档

# 查看过时内容
gitlink-cli wiki +view --title "Old API Reference"

# 确认后删除
gitlink-cli wiki +delete --title "Old API Reference"

场景 2: 清理测试页面

# 列出所有页面
gitlink-cli wiki +list

# 删除测试页面
gitlink-cli wiki +delete --title "Test Page 1"
gitlink-cli wiki +delete --title "Test Page 2"
gitlink-cli wiki +delete --title "Test Page 3"

场景 3: 批量删除(谨慎!)

#!/bin/bash
# 批量删除包含特定关键词的页面

for title in $(gitlink-cli wiki +list --format json | jq -r ".data[].title"); do
    # 删除包含 "Draft" 的页面
    if [[ "$title" == *"Draft"* ]]; then
        echo "Deleting draft page: $title"
        gitlink-cli wiki +delete --title "$title"
    fi
done

场景 4: 删除前备份

#!/bin/bash
# 安全删除工作流:先备份再删除

title="Page to Delete"

# 1. 备份内容
gitlink-cli wiki +view --title "$title" --format json | \
  jq -r ".data.content_decoded" > "${title}-backup.md"

# 2. 确认删除
read -p "Backup created at ${title}-backup.md. Delete now? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    gitlink-cli wiki +delete --title "$title"
    echo "Page deleted. Backup saved at ${title}-backup.md"
else
    echo "Deletion cancelled."
fi

场景 5: 条件删除

#!/bin/bash
# 根据页面内容决定是否删除

title="Deprecated Feature"

# 获取页面内容
content=$(gitlink-cli wiki +view --title "$title" --format json | \
           jq -r ".data.content_decoded")

# 检查是否包含"已废弃"标记
if [[ "$content" == *"此功能已废弃"* ]]; then
    echo "Page is deprecated. Deleting..."
    gitlink-cli wiki +delete --title "$title"
else
    echo "Page is still active. Not deleting."
fi

删除验证

方法 1: 尝试查看页面

# 删除后验证
gitlink-cli wiki +delete --title "Test Page"

# 尝试查看(应该返回 404
gitlink-cli wiki +view --title "Test Page"
# 预期输出Error: 404 Not Found

方法 2: 列出所有页面

# 删除前列出
gitlink-cli wiki +list
# 包含: "Test Page"

gitlink-cli wiki +delete --title "Test Page"

# 删除后列出
gitlink-cli wiki +list
# 不包含: "Test Page"

方法 3: 统计页面数量

# 删除前
before=$(gitlink-cli wiki +list --format json | jq ".meta.total_count")
echo "Pages before: $before"

# 删除
gitlink-cli wiki +delete --title "Old Page"

# 删除后
after=$(gitlink-cli wiki +list --format json | jq ".meta.total_count")
echo "Pages after: $after"
echo "Deleted: $((before - after)) page(s)"

常见问题

Q: 删除后能否恢复?

A: 不能。GitLink Wiki 不提供版本历史或回收站功能。

建议

  1. 删除前务必备份:gitlink-cli wiki +view --title "Page" > backup.md
  2. 考虑使用重命名代替删除:gitlink-cli wiki +update --page "Old" --title "Old-Archived"
  3. 如有备份,可重新创建:gitlink-cli wiki +create --title "Page" --file backup.md

Q: 删除失败提示 "page not found"

A: 页面不存在或已被删除。

解决方法

# 查看现有页面
gitlink-cli wiki +list

# 确认页面标题正确(区分大小写)
gitlink-cli wiki +delete --title "Correct-Title"

Q: 删除后页面链接还能访问吗?

A: 访问已删除页面会返回 404 Not Found

如果有外部链接指向该页面,需要:

  1. 更新外部链接
  2. 或创建同名新页面
  3. 或设置重定向GitLink Wiki 不支持,需手动更新)

Q: 能否批量删除所有页面?

A: 可以,但极其危险!

#!/bin/bash
# ⚠️ 危险操作:删除所有 Wiki 页面

read -p "⚠️  This will delete ALL wiki pages. Continue? (yes/NO) " -r
if [[ "$REPLY" == "yes" ]]; then
    for title in $(gitlink-cli wiki +list --format json | jq -r ".data[].title"); do
        echo "Deleting: $title"
        gitlink-cli wiki +delete --title "$title"
    done
    echo "All pages deleted."
else
    echo "Cancelled."
fi

Q: 删除操作需要什么权限?

A: 需要:

  • 项目写入权限Maintainer 或 Owner 角色)
  • 有效的认证 Token

如果权限不足:

# 403 Forbidden → 检查权限
# 401 Unauthorized → 运行 gitlink-cli auth login

Q: 如何防止误删除?

A: 建议:

  1. 删除前备份:总是先备份内容
  2. 使用别名:创建安全删除别名
  3. 确认操作:删除前再次确认
  4. 文档规范:制定删除流程文档

错误处理

错误 原因 解决方案
required flag --title is missing 未指定页面标题 添加 --title "Page Title"
page not found 页面不存在 使用 wiki +list 查看可用页面
401 Unauthorized 未登录或 Token 过期 运行 gitlink-cli auth login
403 Forbidden 无权限删除 Wiki 检查是否有项目写入权限
failed to delete 删除操作失败 检查网络连接和 API 可用性

安全措施

1. 删除前备份脚本

#!/bin/bash
# safe-delete.sh - 安全删除 Wiki 页面

title="$1"

if [ -z "$title" ]; then
    echo "Usage: ./safe-delete.sh '<Page Title>'"
    exit 1
fi

# 1. 检查页面是否存在
if ! gitlink-cli wiki +view --title "$title" >/dev/null 2>&1; then
    echo "Error: Page '$title' does not exist."
    exit 1
fi

# 2. 备份内容
backup_file="${title}-backup-$(date '+%Y%m%d-%H%M%S').md"
gitlink-cli wiki +view --title "$title" --format json | \
  jq -r ".data.content_decoded" > "$backup_file"

echo "✓ Backup created: $backup_file"

# 3. 显示预览
echo ""
echo "Page content preview:"
head -n 10 "$backup_file"
echo "..."

# 4. 确认删除
read -p "Delete '$title' now? (yes/NO) " -r
echo
if [[ "$REPLY" == "yes" ]]; then
    gitlink-cli wiki +delete --title "$title"
    if [ $? -eq 0 ]; then
        echo "✓ Page deleted. Backup saved at: $backup_file"
    else
        echo "✗ Deletion failed. Backup available at: $backup_file"
    fi
else
    echo "✗ Deletion cancelled. Backup saved at: $backup_file"
fi

2. 创建删除日志

#!/bin/bash
# deleted-pages.log - 记录所有删除操作

log_file="wiki-deletion-log.txt"
title="$1"

# 记录删除操作
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Deleted: $title" >> "$log_file"

# 执行删除
gitlink-cli wiki +delete --title "$title"

echo "Deletion logged to: $log_file"

3. 使用 Git 追踪删除

如果 Wiki 内容也在 Git 中管理:

# 1. Git commit 删除前的状态
git add docs/
git commit -m "Backup before wiki deletion: $title"

# 2. 执行删除
gitlink-cli wiki +delete --title "$title"

# 3. 记录删除
echo "Deleted $title on $(date)" >> wiki-deletions.log

最佳实践

1. 删除前检查清单

在删除 Wiki 页面前,确保:

  • 已备份页面内容
  • 确认页面不再需要
  • 更新了相关链接
  • 通知了相关团队成员
  • 有权限执行删除操作

2. 替代删除的方案

考虑使用重命名代替删除

# 不删除,而是重命名为"已归档"
gitlink-cli wiki +update --page "Old Feature" --title "Archived-Old-Feature"

# 或在页面顶部添加废弃标记
gitlink-cli wiki +update --title "Old Feature" \
  --add "\n\n---\n\n⚠ **此页面已废弃,请勿使用。**"

3. 批量删除的安全流程

#!/bin/bash
# 安全批量删除工作流

# 1. 列出待删除页面
declare -a pages_to_delete=(
    "Test-Page-1"
    "Test-Page-2"
    "Draft-Document"
)

# 2. 创建备份目录
backup_dir="wiki-backup-$(date '+%Y%m%d-%H%M%S')"
mkdir -p "$backup_dir"

# 3. 备份所有页面
for title in "${pages_to_delete[@]}"; do
    filename=$(echo "$title" | sed 's/[^a-zA-Z0-9_-]/_/g').md
    gitlink-cli wiki +view --title "$title" --format json | \
      jq -r ".data.content_decoded" > "$backup_dir/$filename"
    echo "Backed up: $title"
done

# 4. 确认删除
echo ""
echo "Backup created at: $backup_dir"
read -p "Delete all ${#pages_to_delete[@]} pages now? (yes/NO) " -r
echo

if [[ "$REPLY" == "yes" ]]; then
    # 5. 执行删除
    for title in "${pages_to_delete[@]}"; do
        gitlink-cli wiki +delete --title "$title"
        echo "Deleted: $title"
    done
    echo "✓ All pages deleted. Backups saved at: $backup_dir"
else
    echo "✗ Cancelled. Backups available at: $backup_dir"
fi

4. 监控删除操作

#!/bin/bash
# 监控 Wiki 页面数量变化

# 记录当前页面数量
current_count=$(gitlink-cli wiki +list --format json | jq ".meta.total_count")
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Current page count: $current_count" >> wiki-monitor.log

# 如果页面数量异常减少,发出警告
if [ -f "previous-count.txt" ]; then
    previous_count=$(cat previous-count.txt)
    if [ "$current_count" -lt "$previous_count" ]; then
        echo "⚠️  Warning: Page count decreased from $previous_count to $current_count"
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] WARNING: Count decreased: $previous_count -> $current_count" >> wiki-monitor.log
    fi
fi

echo "$current_count" > previous-count.txt

完整示例

示例:清理过时文档

#!/bin/bash
# 完整的文档清理工作流

# 1. 定义过时页面列表
declare -a outdated_pages=(
    "Legacy-API-v1"
    "Deprecated-Feature-X"
    "Old-Installation-Guide"
)

# 2. 创建备份
backup_dir="wiki-cleanup-backup-$(date '+%Y%m%d')"
mkdir -p "$backup_dir"

echo "=== Wiki Cleanup Process ==="
echo "Backing up outdated pages..."

for title in "${outdated_pages[@]}"; do
    if gitlink-cli wiki +view --title "$title" >/dev/null 2>&1; then
        filename=$(echo "$title" | sed 's/[^a-zA-Z0-9_-]/_/g').md
        gitlink-cli wiki +view --title "$title" --format json | \
          jq -r ".data.content_decoded" > "$backup_dir/$filename"
        echo "✓ Backed up: $title"
    else
        echo "✗ Skipped (not found): $title"
    fi
done

# 3. 确认删除
echo ""
echo "Outdated pages to delete:"
printf "  - %s\n" "${outdated_pages[@]}"
echo ""
read -p "Proceed with deletion? (yes/NO) " -r
echo

if [[ "$REPLY" == "yes" ]]; then
    echo "Deleting outdated pages..."

    for title in "${outdated_pages[@]}"; do
        if gitlink-cli wiki +delete --title "$title" 2>/dev/null; then
            echo "✓ Deleted: $title"
        else
            echo "✗ Failed (already deleted?): $title"
        fi
    done

    echo ""
    echo "✓ Cleanup completed. Backups saved at: $backup_dir"
    echo "Remaining pages: $(gitlink-cli wiki +list --format json | jq '.meta.total_count')"
else
    echo "✗ Cleanup cancelled. Backups available at: $backup_dir"
fi

References