package main import ( "fmt" "github.com/spf13/cobra" "skillmgr/internal/config" "skillmgr/internal/repo" ) var syncCmd = &cobra.Command{ Use: "sync [name]", Short: "同步源仓库", Long: `从远程拉取最新代码,更新本地缓存。 示例: skillmgr sync # 同步所有仓库 skillmgr sync my-skills # 同步指定仓库`, RunE: func(cmd *cobra.Command, args []string) error { cfg, err := config.LoadRepositoryConfig() if err != nil { return err } if len(cfg.Repositories) == 0 { fmt.Println("无已配置的源仓库") return nil } // 如果指定了仓库名称,只同步该仓库 if len(args) > 0 { name := args[0] for _, r := range cfg.Repositories { if r.Name == name { fmt.Printf("正在同步 %s...\n", r.Name) if _, err := repo.CloneOrPull(r.URL, r.Branch); err != nil { fmt.Printf(" ✗ 同步失败: %v\n", err) return err } fmt.Printf(" ✓ 同步成功\n") return nil } } return fmt.Errorf("仓库 '%s' 不存在", name) } // 同步所有仓库 var hasError bool for _, r := range cfg.Repositories { fmt.Printf("正在同步 %s...\n", r.Name) if _, err := repo.CloneOrPull(r.URL, r.Branch); err != nil { fmt.Printf(" ✗ 同步失败: %v\n", err) hasError = true continue } fmt.Printf(" ✓ 同步成功\n") } if hasError { fmt.Println("\n部分仓库同步失败") } return nil }, } func init() { rootCmd.AddCommand(syncCmd) }