如何使用git 2-rs从分支克隆仓库?

mmvthczy  于 2023-05-12  发布在  Git
关注(0)|答案(1)|浏览(202)

最近我想从repo中复制文件,在rust中使用Repository::clone,但此函数不支持分支。我想问一下如何从分支复制文件。
我目前使用的是git 2版本0.17.1和rust版本1.69.0(84 c898 d 65 2023-04-16)。

let repo = match Repository::clone(repo_url, temp_dir.path()) {
        Ok(repo) => repo,
        Err(e) => panic!("failed to clone: {}", e),
    };

    println!("Cloned {} to {}", repo_url, temp_dir.path().display());
    repo.remote_anonymous(repo_url)?
        .fetch(&[branch_name], None, None)?;

    let head = repo.head().unwrap();
    let oid = head.target().unwrap();
    let commit = repo.find_commit(oid).unwrap();
    let branch = repo
        .branch(branch_name, &commit, false)
        .expect("Faild to find branch");

    let obj = repo
        .revparse_single(&("refs/heads/".to_owned() + branch_name))
        .unwrap();

    repo.set_head(&("refs/heads/".to_owned() + branch_name));

    repo.checkout_tree(&obj, None);

这是我试过的代码。分支已更改。但我不知道如何将那个分支中的文件与已经复制的文件交换。

blmhpbnm

blmhpbnm1#

如果您阅读clone的文档,它会告诉您:
有关详细信息,请参阅RepoBuilder结构。
然后如果你转到RepoBuilder,有一个branch方法。

git2::build::RepoBuilder::new()
    .branch(branch_name)
    .clone(repo_url, temp_dir.path())

相关问题