Swift 对 libgit2 的绑定。
此版本支持 SSH 克隆、切换分支、git push/pull,并且与 GitProviders 配合良好,GitProviders 是一个 SPM,提供了一个 SwiftUI 界面来管理 git 托管提供商凭据。
所有二进制依赖项现在都作为此存储库中包含的本地 XCFramework 提供。
SwiftGit3 是 SwiftGit2 的一个分支,并尽可能地尝试遵循他们的指导。名称 SwiftGit3
仅在存储库名称中使用,因此 Swift 包、测试、文件等都将使用 SwiftGit2
命名。
import SwiftGit2
let URL: URL = ...
let result = Repository.at(URL)
switch result {
case let .success(repo):
let latestCommit = repo
.HEAD()
.flatMap {
repo.commit($0.oid)
}
switch latestCommit {
case let .success(commit):
print("Latest Commit: \(commit.message) by \(commit.author.name)")
case let .failure(error):
print("Could not get commit: \(error)")
}
case let .failure(error):
print("Could not open repository: \(error)")
}
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "YOUR_PROJECT_NAME",
dependencies: [
.package(url: "https://github.com/App-Maker-Software/SwiftGit3.git", from: "1.2.0"),
]
)
不同之处在于,SwiftGit2 中所有主要改进都已停留在 PR 中,而此处在 main
分支中,并且支持诸如分支更改、push、pull、SSH 克隆等新功能。 由于一个实际的生产应用程序正在使用 SwiftGit3,因此随着新功能请求的完成,它将经常更新。
需要做很多工作来清理一些新功能。 非常欢迎 PR。 虽然 SwiftGit3 远离 SwiftGit2 会很不幸,但解决此处的问题比等待 SwiftGit2 的活动更好。
SwiftGit3 尽可能使用值对象。 这意味着使用 Swift 的 struct
和 enum
,而不持有对 libgit2 对象的引用。 这有许多优点:
这极大地简化了长时间运行的应用程序的设计,这是 Swift 中最常见的用例。 因此,SwiftGit3 API 不一定与 libgit2 API 一一对应。
所有从存储库读取或写入存储库的方法都在 SwiftGit 唯一的 class
中:Repository
。 这突出了这些方法的可失败性和突变性,同时释放了所有其他实例,使其成为不可变的 struct
和 enum
。
要构建 SwiftGit2,您需要在本地安装以下工具:
brew install cmake libssh2 libtool autoconf automake pkg-config
我们 ❤️ 欢迎收到 pull request! GitHub 使之变得容易
所有贡献应符合 GitHub 的 Swift 风格指南。
SwiftGit3 在 MIT 许可证下可用。