如何使用 git2-rs Rust 箱完成“git pull”?

问题描述 投票:0回答:1

我正在使用 git2-rs 在 Rust 应用程序中实现一些标准 git 功能。我一直在阅读 git 内部结构,并了解在高层次上“git pull”是“git fetch”,然后是“git merge”,但我仍然无法理解如何使其与 git2-rs 一起工作。有一个关于问题的讨论here,大家一致认为 git2-rs“git pull”示例会很好,但从未创建过。该讨论中有一个进行硬重置的示例,但我想避免覆盖本地更改(因此合并)。我无法在任何其他也使用 git2-rs 的代码库中找到示例。

“git重置”示例here显示了如何在获取后获取OID,但合并函数需要一个AnnotatedCommit,我不确定如何在两者之间进行转换,或者即使这是正确的方向。

git rust pull libgit2
1个回答
0
投票

尝试类似:

        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")),
        }
    } 
© www.soinside.com 2019 - 2024. All rights reserved.