Swift bindings to libgit2.
let URL: NSURL = ...
let repo = Repository.at(URL)
if let repo = repo.value {
let latestCommit: Result<Commit, NSError> = repo
.HEAD()
.flatMap { repo.commit($0.oid) }
if let commit = latestCommit.value {
print("Latest Commit: \(commit.message) by \(commit.author.name)")
} else {
print("Could not get commit: \(latestCommit.error)")
}
} else {
println("Could not open repository: \(repo.error)")
}
SwiftGit2 uses value objects wherever possible. That means using Swift’s struct
s and enum
s without holding references to libgit2 objects. This has a number of advantages:
- Values can be used concurrently.
- Consuming values won’t result in disk access.
- Disk access can be contained to a smaller number of APIs.
This vastly simplifies the design of long-lived applications, which are the most common use case with Swift. Consequently, SwiftGit2 APIs don’t necessarily map 1-to-1 with libgit2 APIs.
All methods for reading from or writing to a repository are on SwiftGit’s only class
: Repository
. This highlights the failability and mutation of these methods, while freeing up all other instances to be immutable struct
s and enum
s.
To build SwiftGit2, you'll need the following tools installed locally:
- cmake
- libssh2
- libtool
- autoconf
- automake
- pkg-config
The easiest way to add SwiftGit2 to your project is to use Carthage. Simply add github "SwiftGit2/SwiftGit2"
to your Cartfile
and run carthage update
.
If you’d like, you can do things the hard old-fashioned way:
- Add SwiftGit2 as a submodule of your project’s repository.
- Run
git submodule update --init --recursive
to fetch all of SwiftGit2’s depedencies. - Add
SwiftGit2.xcodeproj
to your project’s Xcode project or workspace. - On the “Build Phases” tab of your application target, add
SwiftGit2.framework
to the “Link Binary With Libraries” phase. SwiftGit2 must also be added to a “Copy Frameworks” build phase. - If you added SwiftGit2 to a project (not a workspace), you will also need to add the appropriate SwiftGit2 target to the “Target Dependencies” of your application.
If you want to build a copy of SwiftGit2 without Carthage, possibly for development:
- Clone SwiftGit2
- Run
git submodule update --init --recursive
to clone the submodules - Build in Xcode
To incorporate SwiftGit2 to your project, you may want to use SPMCLI to automate tedious tasks including linking and passing flags.
We encourage you to check SPMCLI.resolved file.
To generate Xcodeproj using SPMCLI, you need to use it's xcproj
branch. It will automate set up OTHER_CFLAGS and OTHER_LDFLAGS.
We ❤️ to receive pull requests! GitHub makes it easy:
- Fork the repository
- Create a branch with your changes
- Send a Pull Request
All contributions should match GitHub’s Swift Style Guide.
SwiftGit2 is available under the MIT license.