我正在使用 git2-rs 在 Rust 应用程序中实现一些标准 git 功能。我一直在阅读 git 内部结构,并了解在高层次上“git pull”是“git fetch”,然后是“git merge”,但我仍然无法理解如何使其与 git2-rs 一起工作。有一个关于问题的讨论here,大家一致认为 git2-rs“git pull”示例会很好,但从未创建过。该讨论中有一个进行硬重置的示例,但我想避免覆盖本地更改(因此合并)。我无法在任何其他也使用 git2-rs 的代码库中找到示例。
“git重置”示例here显示了如何在获取后获取OID,但合并函数需要一个AnnotatedCommit,我不确定如何在两者之间进行转换,或者即使这是正确的方向。
尝试类似:
let our_commit = find_last_commit()?;
let reference = repo.find_reference("FETCH_HEAD")?;
let their_commit = reference.peel_to_commit()?;
let _index = repo
.merge_commits(&our_commit, &their_commit, Some(&MergeOptions::new()))?;
使用
pub fn find_last_commit(repo: &Repository) -> Result<Commit, RepoError> {
let obj = repo.head()?.resolve()?.peel(ObjectType::Commit)?;
match obj.into_commit() {
Ok(c) => Ok(c),
_ => Err(RepoError::new("commit error")),
}
}