修改git过滤文件

This commit is contained in:
zyj
2026-03-04 10:14:12 +08:00
parent a9f9330744
commit 89d64cb117
12 changed files with 570 additions and 1 deletions

View File

@@ -0,0 +1,59 @@
package commands
import (
"fmt"
"github.com/spf13/cobra"
)
func newCaptureCmd() *cobra.Command {
var (
name string
description string
profile string
collectors string
filter string
all bool
encrypt bool
exclude string
tag string
yes bool
)
cmd := &cobra.Command{
Use: "capture",
Short: "捕获环境并生成 Pack",
Long: `捕获当前开发环境的配置和工具信息,生成一个 Pack。`,
RunE: func(cmd *cobra.Command, args []string) error {
if name == "" {
return fmt.Errorf("必须指定 Pack 名称 (--name)")
}
fmt.Printf("📦 Capturing environment \"%s\"...\n", name)
// TODO: Implement capture logic
// 1. Load profile
// 2. Run collectors
// 3. Write data to temp directory
// 4. Generate manifest
// 5. Encrypt sensitive data (if enabled)
// 6. Create pack
fmt.Printf("✅ Pack created: %s\n", name)
fmt.Printf("\nRun 'devpack export %s -o %s.devpack' to export.\n", name, name)
return nil
},
}
cmd.Flags().StringVarP(&name, "name", "n", "", "Pack 名称(必需)")
cmd.Flags().StringVarP(&description, "description", "d", "", "Pack 描述")
cmd.Flags().StringVarP(&profile, "profile", "p", "", "使用指定 Profile")
cmd.Flags().StringVarP(&collectors, "collectors", "c", "", "指定采集器(逗号分隔)")
cmd.Flags().StringVar(&filter, "filter", "", "过滤表达式")
cmd.Flags().BoolVar(&all, "all", false, "捕获所有可用采集器")
cmd.Flags().BoolVar(&encrypt, "encrypt", false, "加密敏感数据")
cmd.Flags().StringVar(&exclude, "exclude", "", "排除模式(逗号分隔)")
cmd.Flags().StringVar(&tag, "tag", "", "标签(逗号分隔)")
cmd.Flags().BoolVarP(&yes, "yes", "y", false, "跳过确认提示")
_ = cmd.MarkFlagRequired("name")
return cmd
}

View File

@@ -0,0 +1,45 @@
package commands
import (
"fmt"
"github.com/spf13/cobra"
)
func newDiffCmd() *cobra.Command {
var (
current bool
with string
collectors string
output string
)
cmd := &cobra.Command{
Use: "diff <pack-name>",
Short: "对比环境差异",
Long: `对比两个环境之间的差异。`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
packName := args[0]
if current {
fmt.Printf("🔍 Comparing \"%s\" with current environment...\n\n", packName)
} else if with != "" {
fmt.Printf("🔍 Comparing \"%s\" with \"%s\"...\n\n", packName, with)
} else {
return fmt.Errorf("请指定对比目标: --current 或 --with <pack-name>")
}
// TODO: Implement diff logic
fmt.Println("(diff not yet implemented)")
return nil
},
}
cmd.Flags().BoolVar(&current, "current", false, "与当前环境对比")
cmd.Flags().StringVar(&with, "with", "", "与另一个 Pack 对比")
cmd.Flags().StringVarP(&collectors, "collectors", "c", "", "只对比指定采集器")
cmd.Flags().StringVarP(&output, "output", "o", "table", "输出格式 (table|json|yaml)")
return cmd
}

View File

@@ -0,0 +1,58 @@
package commands
import (
"fmt"
"github.com/spf13/cobra"
)
func newExportCmd() *cobra.Command {
var output string
cmd := &cobra.Command{
Use: "export <pack-name>",
Short: "导出 Pack 为文件",
Long: `将 Pack 导出为可移植的 .devpack 文件。`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
packName := args[0]
if output == "" {
output = packName + ".devpack"
}
fmt.Printf("📤 Exporting \"%s\" to %s...\n", packName, output)
// TODO: Implement export logic
fmt.Printf("✅ Exported: %s\n", output)
return nil
},
}
cmd.Flags().StringVarP(&output, "output", "o", "", "输出文件路径")
return cmd
}
func newImportCmd() *cobra.Command {
var (
name string
verify bool
)
cmd := &cobra.Command{
Use: "import <file-path>",
Short: "导入 Pack 文件",
Long: `导入 .devpack 文件到本地 Pack 存储。`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
filePath := args[0]
fmt.Printf("📥 Importing %s...\n", filePath)
// TODO: Implement import logic
fmt.Println("✅ Import complete!")
return nil
},
}
cmd.Flags().StringVarP(&name, "name", "n", "", "导入后的名称")
cmd.Flags().BoolVar(&verify, "verify", false, "导入前验证文件完整性")
return cmd
}

View File

@@ -0,0 +1,39 @@
package commands
import (
"fmt"
"github.com/spf13/cobra"
)
func newInitCmd() *cobra.Command {
var (
profile string
template string
force bool
)
cmd := &cobra.Command{
Use: "init",
Short: "初始化 DevPack 配置",
Long: `初始化 DevPack创建配置目录和默认配置文件。`,
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println("🚀 Initializing DevPack...")
// TODO: Implement init logic
// 1. Create ~/.devpack/ directory
// 2. Create config.yaml
// 3. Create profiles/ directory
// 4. Create packs/ directory
// 5. Create logs/ directory
fmt.Println("✅ DevPack initialized successfully!")
fmt.Println("\nRun 'devpack scan' to scan your current environment.")
return nil
},
}
cmd.Flags().StringVarP(&profile, "profile", "p", "", "创建并使用指定名称的 Profile")
cmd.Flags().StringVarP(&template, "template", "t", "standard", "使用预设模板 (minimal|standard|full)")
cmd.Flags().BoolVar(&force, "force", false, "覆盖已有配置")
return cmd
}

View File

@@ -0,0 +1,51 @@
package commands
import (
"fmt"
"github.com/spf13/cobra"
)
func newListCmd() *cobra.Command {
var (
output string
detailed bool
)
cmd := &cobra.Command{
Use: "list [packs|profiles|collectors]",
Short: "列出 Pack、Profile 或采集器",
Long: `列出本地存储的 Pack、配置的 Profile 或所有可用的采集器。`,
Args: cobra.MaximumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
subCmd := "packs"
if len(args) > 0 {
subCmd = args[0]
}
switch subCmd {
case "packs":
fmt.Println("📦 Local Packs:")
// TODO: List packs
fmt.Println(" (none)")
case "profiles":
fmt.Println("📋 Profiles:")
// TODO: List profiles
fmt.Println(" (none)")
case "collectors":
fmt.Println("🔌 Available Collectors:")
// TODO: List collectors
fmt.Println(" (none)")
default:
return fmt.Errorf("未知的子命令: %s (可选: packs, profiles, collectors)", subCmd)
}
return nil
},
}
cmd.Flags().StringVarP(&output, "output", "o", "table", "输出格式 (table|json|yaml)")
cmd.Flags().BoolVar(&detailed, "detailed", false, "显示详细信息")
return cmd
}

View File

@@ -0,0 +1,102 @@
package commands
import (
"fmt"
"github.com/spf13/cobra"
)
func newProfileCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "profile",
Short: "管理 Profile 配置文件",
Long: `创建、编辑、删除和管理 Profile 配置方案。`,
}
// Subcommands
cmd.AddCommand(newProfileCreateCmd())
cmd.AddCommand(newProfileShowCmd())
cmd.AddCommand(newProfileListCmd())
cmd.AddCommand(newProfileDeleteCmd())
cmd.AddCommand(newProfileUseCmd())
return cmd
}
func newProfileCreateCmd() *cobra.Command {
var template string
cmd := &cobra.Command{
Use: "create <name>",
Short: "创建新 Profile",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
name := args[0]
fmt.Printf("📋 Creating profile \"%s\"...\n", name)
// TODO: Create profile
fmt.Printf("✅ Profile \"%s\" created.\n", name)
fmt.Printf("Edit with: devpack profile edit %s\n", name)
return nil
},
}
cmd.Flags().StringVarP(&template, "template", "t", "standard", "模板 (minimal|standard|full)")
return cmd
}
func newProfileShowCmd() *cobra.Command {
return &cobra.Command{
Use: "show <name>",
Short: "显示 Profile 内容",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
name := args[0]
fmt.Printf("📋 Profile: %s\n", name)
// TODO: Show profile content
return nil
},
}
}
func newProfileListCmd() *cobra.Command {
return &cobra.Command{
Use: "list",
Short: "列出所有 Profile",
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println("📋 Profiles:")
// TODO: List profiles
fmt.Println(" (none)")
return nil
},
}
}
func newProfileDeleteCmd() *cobra.Command {
return &cobra.Command{
Use: "delete <name>",
Short: "删除 Profile",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
name := args[0]
fmt.Printf("🗑️ Deleting profile \"%s\"...\n", name)
// TODO: Delete profile
fmt.Printf("✅ Profile \"%s\" deleted.\n", name)
return nil
},
}
}
func newProfileUseCmd() *cobra.Command {
return &cobra.Command{
Use: "use <name>",
Short: "设置默认 Profile",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
name := args[0]
fmt.Printf("✅ Default profile set to \"%s\".\n", name)
// TODO: Set default profile
return nil
},
}
}

View File

@@ -0,0 +1,60 @@
package commands
import (
"fmt"
"github.com/spf13/cobra"
)
func newRestoreCmd() *cobra.Command {
var (
dryRun bool
conflict string
noRollback bool
collectors string
exclude string
parallel int
yes bool
force bool
)
cmd := &cobra.Command{
Use: "restore <pack-name>",
Short: "从 Pack 还原开发环境",
Long: `从指定的 Pack 还原开发环境到当前系统。`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
packName := args[0]
if dryRun {
fmt.Printf("🔍 Dry Run — Restore Plan for \"%s\"\n\n", packName)
// TODO: Generate and display restore plan
fmt.Println("⚠ This is a dry run. No changes were made.")
fmt.Println("Run without --dry-run to apply these changes.")
return nil
}
fmt.Printf("🚀 Restoring environment from \"%s\"...\n", packName)
// TODO: Implement restore logic
// 1. Load and verify pack
// 2. Check platform compatibility
// 3. Detect conflicts
// 4. Create restore point
// 5. Execute restore plan
// 6. Verify results
fmt.Println("✅ Environment restored successfully!")
return nil
},
}
cmd.Flags().BoolVar(&dryRun, "dry-run", false, "预览更改(不实际执行)")
cmd.Flags().StringVar(&conflict, "conflict", "prompt", "冲突处理策略 (skip|overwrite|merge|prompt|newest)")
cmd.Flags().BoolVar(&noRollback, "no-rollback", false, "不创建还原点")
cmd.Flags().StringVarP(&collectors, "collectors", "c", "", "只还原指定采集器")
cmd.Flags().StringVar(&exclude, "exclude", "", "排除指定采集器")
cmd.Flags().IntVar(&parallel, "parallel", 4, "并行还原数")
cmd.Flags().BoolVarP(&yes, "yes", "y", false, "跳过确认提示")
cmd.Flags().BoolVar(&force, "force", false, "强制还原")
return cmd
}

View File

@@ -0,0 +1,80 @@
package commands
import (
"fmt"
"os"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/user/devpack/pkg/version"
)
var (
cfgFile string
verbose bool
quiet bool
logLevel string
noColor bool
)
// rootCmd represents the base command
var rootCmd = &cobra.Command{
Use: "devpack",
Short: "DevPack - 开发环境打包迁移工具",
Long: `DevPack 是一个开发环境打包迁移工具。
它能够扫描、捕获并打包你的完整开发环境,
在另一台同系统的电脑上一键还原。
让开发环境像 U 盘一样即插即用。`,
Version: version.GetVersionString(),
}
// Execute adds all child commands to the root command and sets flags appropriately.
func Execute() error {
return rootCmd.Execute()
}
func init() {
cobra.OnInitialize(initConfig)
// Global flags
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "配置文件路径 (默认: ~/.devpack/config.yaml)")
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "详细输出")
rootCmd.PersistentFlags().BoolVarP(&quiet, "quiet", "q", false, "静默模式")
rootCmd.PersistentFlags().StringVar(&logLevel, "log-level", "info", "日志级别 (trace|debug|info|warn|error)")
rootCmd.PersistentFlags().BoolVar(&noColor, "no-color", false, "禁用彩色输出")
// Add subcommands
rootCmd.AddCommand(newInitCmd())
rootCmd.AddCommand(newScanCmd())
rootCmd.AddCommand(newCaptureCmd())
rootCmd.AddCommand(newRestoreCmd())
rootCmd.AddCommand(newExportCmd())
rootCmd.AddCommand(newImportCmd())
rootCmd.AddCommand(newListCmd())
rootCmd.AddCommand(newDiffCmd())
rootCmd.AddCommand(newProfileCmd())
rootCmd.AddCommand(newVersionCmd())
}
func initConfig() {
if cfgFile != "" {
viper.SetConfigFile(cfgFile)
} else {
home, err := os.UserHomeDir()
if err != nil {
fmt.Fprintln(os.Stderr, "Error:", err)
os.Exit(1)
}
viper.AddConfigPath(home + "/.devpack")
viper.SetConfigName("config")
viper.SetConfigType("yaml")
}
viper.SetEnvPrefix("DEVPACK")
viper.AutomaticEnv()
// Read config file (ignore error if not found)
_ = viper.ReadInConfig()
}

View File

@@ -0,0 +1,44 @@
package commands
import (
"fmt"
"github.com/spf13/cobra"
)
func newScanCmd() *cobra.Command {
var (
collectors string
category string
profile string
output string
save string
detailed bool
)
cmd := &cobra.Command{
Use: "scan",
Short: "扫描当前开发环境",
Long: `扫描当前系统的开发环境,检测已安装的工具、配置和设置。`,
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println("🔍 Scanning development environment...")
// TODO: Implement scan logic
// 1. Load profile (if specified)
// 2. Determine which collectors to run
// 3. Run collectors in parallel
// 4. Aggregate results
// 5. Display results
fmt.Println("✅ Scan complete!")
return nil
},
}
cmd.Flags().StringVarP(&collectors, "collectors", "c", "", "指定采集器(逗号分隔)")
cmd.Flags().StringVar(&category, "category", "", "按分类扫描 (runtime|package|editor|shell|git|env)")
cmd.Flags().StringVarP(&profile, "profile", "p", "", "使用指定 Profile 的扫描配置")
cmd.Flags().StringVarP(&output, "output", "o", "table", "输出格式 (table|json|yaml)")
cmd.Flags().StringVar(&save, "save", "", "保存扫描结果到文件")
cmd.Flags().BoolVar(&detailed, "detailed", false, "显示详细信息")
return cmd
}

View File

@@ -0,0 +1,18 @@
package commands
import (
"fmt"
"github.com/spf13/cobra"
"github.com/user/devpack/pkg/version"
)
func newVersionCmd() *cobra.Command {
return &cobra.Command{
Use: "version",
Short: "显示版本信息",
Run: func(cmd *cobra.Command, args []string) {
fmt.Println(version.GetFullVersionInfo())
},
}
}