2012-11-23 15 views
21

ペットプロジェクトとして、ストレージバックエンドとしてgitを使用してアプリケーションを作成するメモを作成したいと考えています。 (私はこれがまだ存在しないと思う、この男のブログポスト:http://jarofgreen.co.uk/2012/08/how-about-a-mobile-note-app-backed-by-git/git library for go

ここで私はちょっとゴーと遊んでみたいと思っている。しかし、Goのためのgitライブラリを見つけることはできません。 実際にはありますか?

明らかに私のGoの知識は存在しないので、libgit用のバインディングを書くのは楽しい方法ではありません...(私はおそらく私も知らないルビーに頼るでしょう)

+0

私は以前も同様の質問を見たことがありましたが、私はそれを見つけることができませんでした。私が間違っている ? –

答えて

34

私はgit2goがGoで使用するgitバインディングライブラリであると言います。これは定期的に更新され、libgit2を実行している人が管理します。

純粋にGoで書かれたgit実装を探している場合は、からsource{d}までが最も成熟したアクティブなオプションです。

+0

このパッケージは比較的新しいです(質問と比較して)。これは現在のところ最良の選択です。 (今後の参照のために正解とマークする必要があります) – Tomas

+0

2年後も毎日更新されます!すごくいい! –

+0

git2goはWindowsマシン上で正常に動作するには大変な作業です。 –

10

Go標準ライブラリのos/execパッケージを使用して、gitコマンドにシェルすることができます。

+5

それは[公式の 'goコマンドが何をするのか](https://golang.org/src/cmd/go/vcs.go)です。 –

6

Victorが提案したのは、実際に開発者が想像しているようにGitを「スクリプト」する「公式の」方法です。 Gitのコマンドは、この目的のために特に2つの広いグループに分かれています。「配管」コマンドは、低レベルであり、主に他のプログラムで使用されるように意図されています。 「porcelain」コマンドはユーザーとやりとりし、仕事をするために配管命令を呼び出すためのものです。 Gitにあるplumbingコマンドの数を知るには、/usr/lib/git-coreディレクトリ(システムによって異なるかもしれない)を調べてください。

一方、Goは、cgo機能を介して共有ライブラリとのリンクをサポートしています。したがって、libgit2をラップしてみることができます。 AFAIK、libgit2は、Git自身とはまだ完全には一致しませんが、Gitリポジトリの読み書きは可能です。分岐などは—とすれば十分です。私はすべてのことを書いた後

さて、私はlibgit2のサイトの「バインディング」のエントリをスクロールダウンしてgo-gitを見つけた...

+0

オクラホマ、十分に。私はまだいくつかの形式のバインディングに頼っていると思います(go-gitはかなり面白いようです)、コマンド出力を処理する簡単な方法と思われます... – vhdirk

3

数年前、私のチームと私はGoで純粋なgitの実装をコーディングしていましたが、c/C++の依存関係を避け、柔軟性が高く簡単に拡張できます。

https://github.com/src-d/go-git

ゴーgitのは、今日の配管の大半は読み取り操作とメイン書き込み操作のいくつかのカバーが、そのようなマージなどの主要な磁器の操作を欠い、libgit2またはjgitの完全性に到達することを目指して。