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"
)
注意事项
项目ID唯一性: 确保每个项目都有唯一的ID
数据一致性: 删除项目时建议同时删除相关数据
性能考虑: 大量项目时建议定期清理不用的项目
备份重要性: 重要项目的索引数据建议定期备份
通过这个多项目管理系统,你现在可以:
✅ 在同一个系统中管理多个代码项目
✅ 确保不同项目的数据完全隔离
✅ 方便地在项目间切换和搜索
✅ 获得项目级别的统计和管理功能