Rust SCM记录工具scm-record的使用:高效管理源代码变更与版本控制
Rust SCM记录工具scm-record的使用:高效管理源代码变更与版本控制
安装
在项目目录中运行以下Cargo命令:
cargo add scm-record
或者在Cargo.toml中添加以下行:
scm-record = "0.8.0"
基本使用示例
scm-record是一个用于记录源代码变更的SCM工具,可以帮助开发者高效管理版本控制。以下是基本使用示例:
use scm_record::{Record, RecordBuilder};
fn main() {
// 创建一个新的记录构建器
let mut builder = RecordBuilder::new();
// 添加文件变更
builder.add_file_change("src/main.rs", "Initial version");
builder.add_file_change("Cargo.toml", "Added scm-record dependency");
// 构建记录
let record: Record = builder.build();
// 打印记录摘要
println!("Record summary: {}", record.summary());
// 可以将记录应用到版本控制系统
record.apply().expect("Failed to apply changes");
}
完整示例DEMO
下面是一个更完整的示例,展示如何使用scm-record来管理复杂的变更:
use scm_record::{Record, RecordBuilder, ChangeType};
use std::path::PathBuf;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建记录构建器
let mut builder = RecordBuilder::new();
// 添加不同类型的变更
builder.add_change(
PathBuf::from("src/lib.rs"),
ChangeType::Modified,
"Added new feature X"
);
builder.add_change(
PathBuf::from("src/old_file.rs"),
ChangeType::Deleted,
"Removed deprecated functionality"
);
builder.add_change(
PathBuf::from("src/new_feature.rs"),
ChangeType::Added,
"Implemented new module"
);
// 设置记录的元数据
builder.set_author("John Doe <john@example.com>");
builder.set_description("这个提交包含多项改进和重构");
// 构建记录
let record = builder.build();
// 验证记录
if record.validate().is_err() {
eprintln!("记录包含无效的变更");
return Ok(());
}
// 应用记录
record.apply()?;
// 也可以将记录保存为文件
record.write_to_file("changes.scm")?;
Ok(())
}
主要功能
- 变更跟踪:可以跟踪添加、修改和删除的文件
- 元数据管理:支持设置作者、描述等提交信息
- 验证功能:在应用前验证变更的有效性
- 序列化支持:可以将记录保存到文件或从文件加载
许可证
scm-record采用MIT或Apache-2.0双许可证发布。
1 回复
Rust SCM记录工具scm-record的使用:高效管理源代码变更与版本控制
scm-record
是一个为Rust开发者设计的源代码管理记录工具,它可以帮助开发者更高效地跟踪和管理代码变更,简化版本控制流程。
主要功能
- 自动记录代码变更
- 生成简洁的变更日志
- 与Git等版本控制系统集成
- 提供变更分类和标记功能
安装方法
cargo install scm-record
或者在你的Cargo.toml
中添加依赖:
[dependencies]
scm-record = "0.3.0"
完整示例代码
下面是一个使用scm-record
的完整工作流示例:
use scm_record::{Repository, Change, ChangeType, GitIntegration};
fn main() {
// 1. 初始化项目记录
let repo = Repository::init(".").expect("初始化仓库失败");
// 2. 初始化Git集成
let git = GitIntegration::new(".").expect("初始化Git集成失败");
// 3. 创建几个变更记录
let bugfix = Change::new("修复登录页面CSS问题")
.set_type(ChangeType::BugFix)
.add_file("src/login.rs")
.add_file("assets/css/login.css");
let feature = Change::new("添加密码重置功能")
.set_type(ChangeType::Feature)
.add_file("src/auth.rs")
.add_file("tests/auth_test.rs");
let chore = Change::new("更新依赖版本")
.set_type(ChangeType::Chore)
.add_file("Cargo.toml");
// 4. 记录变更到仓库
let record = repo.record()
.add_change(bugfix)
.add_change(feature)
.add_change(chore)
.with_message("准备发布1.2.0版本")
.finalize()
.expect("记录变更失败");
println!("成功记录{}项变更", record.changes().len());
// 5. 与Git集成 - 记录暂存区变更
let staged_changes = git.record_staged_changes("自动提交暂存区变更")
.expect("记录暂存区变更失败");
// 6. 生成变更日志
let changelog = repo.generate_changelog()
.expect("生成变更日志失败");
// 7. 保存变更日志到文件
std::fs::write("CHANGELOG.md", changelog)
.expect("写入变更日志文件失败");
println!("变更日志已生成并保存到CHANGELOG.md");
// 8. 使用自定义模板格式化变更
let template = scm_record::ChangeTemplate::new()
.set_header_format("{type}: {description}")
.add_type_mapping(ChangeType::BugFix, "修复")
.add_type_mapping(ChangeType::Feature, "功能");
let sample_change = template.create_change(
ChangeType::Feature,
"添加用户偏好设置页面"
);
println!("格式化后的变更: {}", sample_change.format());
}
配置示例
在项目根目录创建.scm-record.toml
文件:
[core]
auto_detect_vcs = true
default_change_type = "feature"
[output]
changelog_file = "CHANGES.md"
compact_mode = true
[git]
auto_stage = true
commit_message_template = "{type}: {description}"
变更类型说明
scm-record
支持以下几种标准变更类型:
Feature
- 新功能BugFix
- bug修复Chore
- 维护性任务Refactor
- 代码重构Documentation
- 文档更新Performance
- 性能优化Test
- 测试相关变更
高级用法示例
use scm_record::{Change, ChangeType, Record};
// 批量创建变更记录
fn batch_create_changes() -> Record {
let changes = vec![
Change::new("修复用户注册验证逻辑")
.set_type(ChangeType::BugFix)
.add_file("src/auth.rs")
.add_file("tests/auth_test.rs"),
Change::new("添加黑暗模式支持")
.set_type(ChangeType::Feature)
.add_file("src/theme.rs")
.add_file("assets/css/theme.css"),
Change::new("更新项目文档")
.set_type(ChangeType::Documentation)
.add_file("README.md")
];
let mut record = Record::new();
for change in changes {
record.add_change(change);
}
record.finalize()
}
scm-record
通过提供结构化的变更记录方式,可以帮助团队更好地维护代码变更历史,生成更有意义的发布说明,并简化版本控制工作流。