Thanks to visit codestin.com
Credit goes to chromium.googlesource.com

blob: 07a9f786c33be41f979dec6be6ca7a1654df0f8a [file] [log] [blame] [view]
Máximo Cuadrosa0a0ec72020-03-16 09:58:151## WE CONTINUE THE DEVELOPMENT AT [go-git/go-git](https://github.com/go-git/go-git). This repository is abandoned, and no further updates will be done on the code base, nor issue/prs will be answered or attended.
2
Máximo Cuadros110e7012017-12-18 09:29:293![go-git logo](https://cdn.rawgit.com/src-d/artwork/02036484/go-git/files/go-git-github-readme-header.png)
4[![GoDoc](https://godoc.org/gopkg.in/src-d/go-git.v4?status.svg)](https://godoc.org/github.com/src-d/go-git) [![Build Status](https://travis-ci.org/src-d/go-git.svg)](https://travis-ci.org/src-d/go-git) [![Build status](https://ci.appveyor.com/api/projects/status/nyidskwifo4py6ub?svg=true)](https://ci.appveyor.com/project/mcuadros/go-git) [![codecov.io](https://codecov.io/github/src-d/go-git/coverage.svg)](https://codecov.io/github/src-d/go-git) [![Go Report Card](https://goreportcard.com/badge/github.com/src-d/go-git)](https://goreportcard.com/report/github.com/src-d/go-git)
Máximo Cuadros579d1ac2016-02-16 12:22:255
Máximo Cuadros110e7012017-12-18 09:29:296*go-git* is a highly extensible git implementation library written in **pure Go**.
Máximo Cuadros579d1ac2016-02-16 12:22:257
hnarasaki1a2248b2018-10-17 10:01:118It can be used to manipulate git repositories at low level *(plumbing)* or high level *(porcelain)*, through an idiomatic Go API. It also supports several types of storage, such as in-memory filesystems, or custom implementations thanks to the [`Storer`](https://godoc.org/gopkg.in/src-d/go-git.v4/plumbing/storer) interface.
Máximo Cuadros579d1ac2016-02-16 12:22:259
Lukasz Kokot190bfd62018-10-29 00:55:2210It's being actively developed since 2015 and is being used extensively by [source{d}](https://sourced.tech/) and [Keybase](https://keybase.io/blog/encrypted-git-for-everyone), and by many other libraries and tools.
Máximo Cuadros579d1ac2016-02-16 12:22:2511
Máximo Cuadros110e7012017-12-18 09:29:2912Comparison with git
13-------------------
Máximo Cuadros579d1ac2016-02-16 12:22:2514
Máximo Cuadros110e7012017-12-18 09:29:2915*go-git* aims to be fully compatible with [git](https://github.com/git/git), all the *porcelain* operations are implemented to work exactly as *git* does.
Máximo Cuadros579d1ac2016-02-16 12:22:2516
Lukasz Kokot190bfd62018-10-29 00:55:2217*git* is a humongous project with years of development by thousands of contributors, making it challenging for *go-git* to implement all the features. You can find a comparison of *go-git* vs *git* in the [compatibility documentation](COMPATIBILITY.md).
Máximo Cuadros579d1ac2016-02-16 12:22:2518
Máximo Cuadros579d1ac2016-02-16 12:22:2519
20Installation
21------------
22
23The recommended way to install *go-git* is:
24
25```
Antonio Jesus Navarro Perez33e7c162017-03-07 11:58:1826go get -u gopkg.in/src-d/go-git.v4/...
Máximo Cuadros579d1ac2016-02-16 12:22:2527```
28
Lukasz Kokot190bfd62018-10-29 00:55:2229> We use [gopkg.in](http://labix.org/gopkg.in) to version the API, this means that when `go get` clones the package, it's the latest tag matching `v4.*` that is cloned and not the master branch.
Máximo Cuadros579d1ac2016-02-16 12:22:2530
31Examples
32--------
33
Lukasz Kokot190bfd62018-10-29 00:55:2234> Please note that the `CheckIfError` and `Info` functions used in the examples are from the [examples package](https://github.com/src-d/go-git/blob/master/_examples/common.go#L17) just to be used in the examples.
Máximo Cuadros40875ee2016-12-13 15:01:3535
Máximo Cuadros579d1ac2016-02-16 12:22:2536
Máximo Cuadros23080662017-01-31 13:43:4937### Basic example
Máximo Cuadros579d1ac2016-02-16 12:22:2538
Máximo Cuadros23080662017-01-31 13:43:4939A basic example that mimics the standard `git clone` command
40
41```go
42// Clone the given repository to the given directory
43Info("git clone https://github.com/src-d/go-git")
44
45_, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{
46 URL: "https://github.com/src-d/go-git",
47 Progress: os.Stdout,
48})
49
50CheckIfError(err)
51```
52
53Outputs:
54```
55Counting objects: 4924, done.
56Compressing objects: 100% (1333/1333), done.
57Total 4924 (delta 530), reused 6 (delta 6), pack-reused 3533
58```
59
60### In-memory example
61
62Cloning a repository into memory and printing the history of HEAD, just like `git log` does
63
64
65```go
66// Clones the given repository in memory, creating the remote, the local
67// branches and fetching the objects, exactly as:
Máximo Cuadros40875ee2016-12-13 15:01:3568Info("git clone https://github.com/src-d/go-siva")
Máximo Cuadros579d1ac2016-02-16 12:22:2569
Máximo Cuadros23080662017-01-31 13:43:4970r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
71 URL: "https://github.com/src-d/go-siva",
72})
73
Máximo Cuadros40875ee2016-12-13 15:01:3574CheckIfError(err)
Máximo Cuadros579d1ac2016-02-16 12:22:2575
Lukasz Kokot190bfd62018-10-29 00:55:2276// Gets the HEAD history from HEAD, just like this command:
Máximo Cuadros40875ee2016-12-13 15:01:3577Info("git log")
Máximo Cuadros579d1ac2016-02-16 12:22:2578
Máximo Cuadros40875ee2016-12-13 15:01:3579// ... retrieves the branch pointed by HEAD
80ref, err := r.Head()
81CheckIfError(err)
Máximo Cuadros579d1ac2016-02-16 12:22:2582
Máximo Cuadros40875ee2016-12-13 15:01:3583
84// ... retrieves the commit history
Eiso Kant63df1812017-11-29 15:01:4985cIter, err := r.Log(&git.LogOptions{From: ref.Hash()})
Máximo Cuadros40875ee2016-12-13 15:01:3586CheckIfError(err)
87
88// ... just iterates over the commits, printing it
Eiso Kant63df1812017-11-29 15:01:4989err = cIter.ForEach(func(c *object.Commit) error {
90 fmt.Println(c)
91 return nil
92})
93CheckIfError(err)
Máximo Cuadros579d1ac2016-02-16 12:22:2594```
95
96Outputs:
97```
Máximo Cuadrosc9353b22016-12-16 20:53:4098commit ded8054fd0c3994453e9c8aacaf48d118d42991e
99Author: Santiago M. Mola <[email protected]>
100Date: Sat Nov 12 21:18:41 2016 +0100
Máximo Cuadros579d1ac2016-02-16 12:22:25101
Máximo Cuadrosc9353b22016-12-16 20:53:40102 index: ReadFrom/WriteTo returns IndexReadError/IndexWriteError. (#9)
Máximo Cuadros579d1ac2016-02-16 12:22:25103
Máximo Cuadrosc9353b22016-12-16 20:53:40104commit df707095626f384ce2dc1a83b30f9a21d69b9dfc
105Author: Santiago M. Mola <[email protected]>
106Date: Fri Nov 11 13:23:22 2016 +0100
Máximo Cuadros579d1ac2016-02-16 12:22:25107
Máximo Cuadrosc9353b22016-12-16 20:53:40108 readwriter: fix bug when writing index. (#10)
109
110 When using ReadWriter on an existing siva file, absolute offset for
111 index entries was not being calculated correctly.
Máximo Cuadros579d1ac2016-02-16 12:22:25112...
113```
114
Lukasz Kokot190bfd62018-10-29 00:55:22115You can find this [example](_examples/log/main.go) and many others in the [examples](_examples) folder.
Santiago M. Mola6c7871b2017-05-09 15:42:56116
Máximo Cuadros40875ee2016-12-13 15:01:35117Contribute
118----------
Máximo Cuadrosbcefb5b2016-04-25 07:01:28119
Máximo Cuadros110e7012017-12-18 09:29:29120[Contributions](https://github.com/src-d/go-git/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) are more than welcome, if you are interested please take a look to
121our [Contributing Guidelines](CONTRIBUTING.md).
Máximo Cuadrosaab18532016-02-16 12:37:47122
Máximo Cuadros579d1ac2016-02-16 12:22:25123License
124-------
Máximo Cuadros110e7012017-12-18 09:29:29125Apache License Version 2.0, see [LICENSE](LICENSE)