Provide credentials function to used with git2::RemoteCallbacks.credentials
use git2;
use git2_credentials::CredentialHandler;
use tempfile;
let mut cb = git2::RemoteCallbacks::new();
let git_config = git2::Config::open_default().unwrap();
let mut ch = CredentialHandler::new(git_config);
cb.credentials(move |url, username, allowed| ch.try_next_credential(url, username, allowed));
// clone a repository
let mut fo = git2::FetchOptions::new();
fo.remote_callbacks(cb)
.download_tags(git2::AutotagOption::All)
.update_fetchhead(true);
let dst = tempfile::tempdir().unwrap();
std::fs::create_dir_all(&dst.as_ref()).unwrap();
git2::build::RepoBuilder::new()
.branch("master")
.fetch_options(fo)
.clone("git@github.com:davidB/git2_credentials.git", dst.as_ref()).unwrap();
You can run the example via
cargo run --example clone -- --nocapture
You can provide custom UI (to ask password, passphrase) by providing a CredentialUI
. A default implementation (with dialoguer is provided.
cargo make ci-flow
Code extracted from:
- cargo/utils.rs at master · rust-lang/cargo (search
with_authentication
)Cargo, a package manager for Rust.
- ffizer
ffizer is a files and folders initializer / generator. Create any kind (or part) of project from template.
- gpm/ssh.rs at master · aerys/gpm
Git-based package manager.