CodeRepoIndex 多项目管理指南

概述

CodeRepoIndex 现在支持完整的多项目管理功能,确保不同项目的代码索引和搜索数据完全隔离。每个项目都有唯一的标识符,可以独立管理和搜索。

核心功能

1. 项目唯一标识

  • 每个项目都有唯一的 project_id(即 repository_id

  • 可以手动指定ID,也可以基于仓库URL或路径自动生成

  • 所有的代码块、向量嵌入、元数据都通过此ID进行隔离

2. 项目信息管理

from coderepoindex.core import create_project_manager

# 创建项目管理器
pm = create_project_manager()

with pm:
    # 创建项目
    project = pm.create_project(
        name="我的项目",
        description="项目描述",
        local_path="/path/to/project",
        repository_url="https://github.com/user/repo"
    )
    
    # 列出所有项目
    projects = pm.list_projects()
    
    # 获取项目信息
    project_info = pm.get_project("project_id")

3. 当前项目管理

# 设置当前活跃项目
pm.set_current_project("project_id")

# 获取当前项目
current = pm.get_current_project()

# 在当前项目中搜索
results = pm.search_in_project("查询内容")

4. 项目统计信息

# 获取项目统计
stats = pm.get_project_stats("project_id")
print(f"代码块: {stats['total_blocks']}")
print(f"文件数: {stats['total_files']}")
print(f"语言分布: {stats['language_distribution']}")

5. 项目删除

# 删除项目及其所有数据
pm.delete_project("project_id", delete_data=True)

数据隔离机制

1. 存储层面

  • 代码块存储: SQLite中的 repository_id 字段建立索引

  • 向量存储: 每个向量都包含项目元数据

  • 元数据存储: 项目信息独立存储

2. 查询层面

# 所有查询都支持项目过滤
blocks = storage.query_code_blocks(repository_id="project_id")
vectors = storage.search_vectors(metadata_filter={"repository_id": "project_id"})

3. 搜索层面

from coderepoindex.core import create_code_searcher

searcher = create_code_searcher()
with searcher:
    # 在指定项目中搜索
    results = searcher.search(
        query="函数定义",
        repository_id="project_id"  # 项目隔离
    )

使用场景

1. 多仓库管理

# 管理多个Git仓库
pm.create_project(
    name="前端项目",
    repository_url="https://github.com/company/frontend"
)

pm.create_project(
    name="后端项目", 
    repository_url="https://github.com/company/backend"
)

2. 版本分支管理

# 同一仓库的不同分支
pm.create_project(
    name="主分支",
    repository_url="https://github.com/user/repo",
    project_id="repo_main"
)

pm.create_project(
    name="开发分支",
    repository_url="https://github.com/user/repo",
    project_id="repo_dev"
)

3. 本地项目管理

# 管理本地项目
pm.create_project(
    name="私人项目",
    local_path="/home/user/my_project"
)

最佳实践

1. 项目命名

  • 使用描述性的项目名称

  • 添加详细的项目描述

  • 为不同版本使用不同的project_id

2. 数据管理

  • 定期查看项目统计信息

  • 及时删除不需要的项目数据

  • 备份重要项目的索引数据

3. 搜索优化

  • 在搜索时明确指定项目范围

  • 利用当前项目机制提高搜索效率

  • 根据项目特点调整搜索参数

API 参考

ProjectManager 类

class ProjectManager:
    def create_project(name, description="", local_path="", repository_url="", project_id=None) -> ProjectInfo
    def get_project(project_id: str) -> Optional[ProjectInfo]
    def list_projects() -> List[ProjectInfo]
    def delete_project(project_id: str, delete_data: bool = True) -> bool
    def set_current_project(project_id: str) -> bool
    def get_current_project() -> Optional[ProjectInfo]
    def get_project_stats(project_id: str) -> Dict[str, Any]
    def search_in_project(query: str, project_id: Optional[str] = None) -> List[Any]

ProjectInfo 类

class ProjectInfo:
    project_id: str           # 项目唯一标识
    name: str                # 项目名称
    description: str         # 项目描述
    local_path: str          # 本地路径
    repository_url: str      # 仓库URL
    created_at: datetime     # 创建时间
    last_indexed_at: datetime # 最后索引时间

演示脚本

运行项目管理演示:

python project_management_demo.py

这个脚本会演示:

  • 项目创建和管理

  • 项目切换和数据隔离

  • 项目统计和搜索

  • 完整的项目生命周期

与现有功能的集成

1. 代码索引器

from coderepoindex.core import create_code_indexer

indexer = create_code_indexer()
with indexer:
    # 索引时会自动设置repository_id
    stats = indexer.index_repository(repo_config)

2. 代码搜索器

from coderepoindex.core import create_code_searcher

searcher = create_code_searcher()  
with searcher:
    # 搜索支持项目过滤
    results = searcher.search(
        query="查询内容",
        repository_id="project_id"
    )

注意事项

  1. 项目ID唯一性: 确保每个项目都有唯一的ID

  2. 数据一致性: 删除项目时建议同时删除相关数据

  3. 性能考虑: 大量项目时建议定期清理不用的项目

  4. 备份重要性: 重要项目的索引数据建议定期备份

通过这个多项目管理系统,你现在可以:

  • ✅ 在同一个系统中管理多个代码项目

  • ✅ 确保不同项目的数据完全隔离

  • ✅ 方便地在项目间切换和搜索

  • ✅ 获得项目级别的统计和管理功能