Git.framework

A high-level swift framework to work with git command line in macOS

Git 是一个基于 macOS 命令行 Git 工具的高级 Swift 框架。

功能

Git.framework 没有依赖项。只需克隆并构建即可。

要求

安装

在安装此框架之前,请确保您在系统中使用的是正确版本的 Git。您可以通过终端应用查看当前版本

git --version
$ git version 2.15.1

Carthage

要安装 Carthage,您可以使用 Homebrew。在终端应用中使用以下命令

$ brew update
$ brew install carthage

要使用 Carthage 将 Git.framework 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "way-to-code/git-macOS" ~> 3.2.0

运行 carthage update 以构建框架,并将构建的 Git.framework 拖到您的 Xcode 项目中。

Swift 4.2

如果您想在 Xcode 10.1 或更低版本上使用 Git.framework,请使用版本 1.5.1

github "way-to-code/git-macOS" ~> 1.5.1

手动

您可以手动安装 Git.framework。在本地克隆项目,构建并将其作为框架集成到您的项目中

XCFramework

您可以从最新的 发布页面 下载 XCFramework,并将其集成到您的项目中。

请注意,XCFramework 支持 自版本 3.0.0 起可用。

Swift Package 依赖

当您想在其他包中使用 Git.framework 作为依赖项时,您可以按照给定的示例进行操作

let package = Package(
    name: "MyPackage",
    
    products: [
        .library(name: "myProduct", targets: ["myTarget"]),
    ],
    
    dependencies: [
        .package(name: "Git",
                 url: "https://github.com/way-to-code/git-macOS.git",
                 .upToNextMajor(from: "3.2.0")),
    ],
    
    targets: [
        .target(name: "myTarget", dependencies: [
            .product(name: "Git", package: "Git")
        ]),
    ]
)

基础

Wiki 页面 中阅读更多关于 Git.framework 的信息

快速示例

简单克隆

要克隆远程仓库,您需要创建一个 GitRepository 对象

let repository = GitRepository(fromUrl: URL(string: "https://github.com/github/hub.git"))

接下来,只需调用 clone 方法

try? repository.clone(atPath: "/Users/youruser/hub")

提供凭据

您可以使用 GitCredentialsProvider 帮助为仓库指定凭据。如果未指定凭据,则默认使用来自全局 macOS 系统 git 配置的凭据。

let credentialsProvider = GitCredentialsProvider(username:"user", password:"****")
let repository = GitRepository(from: URL(string: "https://github.com/github/hub.git"), using: credentialsProvider)

接收进度

您可以通过在仓库上设置委托对象来跟踪克隆操作的进度

let progressTracker = MyCustomObject()

let repository: GitRepository
repository.delegate = progressTracker

// implement RepositoryDelegate protocol in order to track the events
extension MyCustomObject: RepositoryDelegate {
func repository(_ repository: Repository, didProgressClone progress: String) {
}
}