package index import ( "os/exec" "strings" ) // GetGitCommit 获取知识库当前 git commit hash func GetGitCommit(vaultPath string) (string, error) { cmd := exec.Command("git", "-C", vaultPath, "rev-parse", "HEAD") out, err := cmd.Output() if err != nil { return "", err // 不是 git 仓库 } return strings.TrimSpace(string(out)), nil } // NeedsRebuild 检查是否需要重建索引 func NeedsRebuild(store *Store, vaultPath string) (bool, string, error) { currentCommit, err := GetGitCommit(vaultPath) if err != nil { // 不是 git 仓库,总是需要重建 return true, "", nil } storedCommit, err := store.GetMeta("git_commit") if err != nil { return true, currentCommit, nil } if storedCommit == "" { // 没有记录,需要重建 return true, currentCommit, nil } if storedCommit != currentCommit { // commit 变了,需要重建 return true, currentCommit, nil } // 检查是否有节点 count, _ := store.NodeCount() if count == 0 { return true, currentCommit, nil } return false, currentCommit, nil }