SwiftGit3,如 App Maker Professional 中所使用。

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)")
}

将 SwiftGit2 添加到您的项目中

// 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"),
    ]
)

SwiftGit3 是 SwiftGit2 的一个分支。

不同之处在于,SwiftGit2 中所有主要改进都已停留在 PR 中,而此处在 main 分支中,并且支持诸如分支更改、push、pull、SSH 克隆等新功能。 由于一个实际的生产应用程序正在使用 SwiftGit3,因此随着新功能请求的完成,它将经常更新。

需要做很多工作来清理一些新功能。 非常欢迎 PR。 虽然 SwiftGit3 远离 SwiftGit2 会很不幸,但解决此处的问题比等待 SwiftGit2 的活动更好。

设计

SwiftGit3 尽可能使用值对象。 这意味着使用 Swift 的 structenum,而不持有对 libgit2 对象的引用。 这有许多优点:

  1. 值可以并发使用。
  2. 使用值不会导致磁盘访问。
  3. 磁盘访问可以包含在更少数量的 API 中。

这极大地简化了长时间运行的应用程序的设计,这是 Swift 中最常见的用例。 因此,SwiftGit3 API 不一定与 libgit2 API 一一对应。

所有从存储库读取或写入存储库的方法都在 SwiftGit 唯一的 class 中:Repository。 这突出了这些方法的可失败性和突变性,同时释放了所有其他实例,使其成为不可变的 structenum

所需工具(对于非 SPM 构建)

要构建 SwiftGit2,您需要在本地安装以下工具:

brew install cmake libssh2 libtool autoconf automake pkg-config

贡献

我们 ❤️ 欢迎收到 pull request! GitHub 使之变得容易

  1. Fork 存储库
  2. 创建一个包含您的更改的分支
  3. 发送 Pull Request

所有贡献应符合 GitHub 的 Swift 风格指南

许可证

SwiftGit3 在 MIT 许可证下可用。