4个稳定版本

1.1.1 2023年9月26日
1.1.0 2023年9月25日
1.0.1 2023年7月27日
1.0.0 2023年7月26日

#1664开发工具

28 每月下载量
用于 moth

MIT 许可证

65KB
1.5K SLoC

纯Rust Git客户端

示例:克隆、提交

use rustgit::*;
use coolssh::create_ed25519_keypair;

let github_account_id = "[email protected]";
let (openssh_encoded_pubkey, keypair) = create_ed25519_keypair(github_account_id);

println!("{}", openssh_encoded_pubkey);
// Add this public key to `authorized_keys` on your server
// -> https://github.com/settings/keys

let remote = Remote::new("github.com:22", "git", "NathanRoyer/rustgit.git", &keypair);

let mut repo = Repository::new();
let the_branch = "main";

// we don't need the full history
let clone_depth = Some(1);

// this will clone the branch via SSH
repo.clone(remote, Reference::Branch(the_branch), clone_depth).unwrap();

// enough with this library
repo.stage("src/lib.rs", None).unwrap();

// let's be nice with each other
repo.stage("content.txt", Some(("Hello World!".into(), FileType::RegularFile))).unwrap();
let new_head = repo.commit(
    "I said hello to the world",
    ("John Doe", github_account_id),
    ("John Doe", github_account_id),
    None,
).unwrap();

// this will update the branch via SSH
repo.push(remote, &[(the_branch, new_head)], false).unwrap();

支持的Git协议

  • 克隆:版本2,可选 shallow 选项。
  • 推送:版本1,支持 report-statusthin-pack 选项。

未来改进

  • 测试除Github之外的git服务器
  • 将对象打包为RefDelta
  • fn Repository::log() ->implIterator<Item = Commit>

欢迎提交这些功能的pull请求。

依赖

~5.5MB
~108K SLoC