2012-11-23 13 views
21

Come progetto domestico, desidero sviluppare una nota che utilizzi git come backend di archiviazione. (Sospetto che questo non esista ancora, dato il post sul blog di questo tizio: http://jarofgreen.co.uk/2012/08/how-about-a-mobile-note-app-backed-by-git/)git library per Go

Ora, mi piacerebbe cogliere questa opportunità per giocare un po 'con Go. Tuttavia, non riesco a trovare alcun (nemmeno il più piccolo approccio a) git library per Go. Esiste davvero?

Ovviamente la mia conoscenza del Go è inesistente, in modo da scrivere le associazioni per libgit non sembra un modo divertente per iniziare ... (e io probabilmente ricorrere a Ruby, che io non so neanche)

+0

Ero sicuro di aver visto una domanda simile qualche tempo fa ma non riesco a trovarlo. Ho sbagliato ? –

risposta

34

Direi che git2go è la libreria di git binding da utilizzare in Go. Viene aggiornato regolarmente e gestito dagli utenti che eseguono libgit2.

Se si sta cercando un'implementazione git scritta semplicemente in Go, go-git da source{d} è l'opzione più matura e attiva.

+0

Questo pacchetto è relativamente nuovo (rispetto alla domanda).Questa è attualmente la scelta migliore. (Dovrebbe essere contrassegnato come risposta corretta per riferimento futuro.) – Tomas

+0

Dopo due anni aggiornamenti ancora giornalieri! Veramente bello! –

+0

Ho finito con go-go, git2go è un enorme problema per funzionare correttamente su una macchina Windows. –

10

È possibile eseguire il comando git tramite il pacchetto os/exec dalla libreria standard Go.

+5

Questo è [ciò che fa il comando 'go' ufficiale] (https://golang.org/src/cmd/go/vcs.go). –

6

Quello che Victor ha proposto è davvero il modo "ufficiale" di "scrivere" Git come previsto dai suoi sviluppatori. I comandi di Git sono divisi nei due gruppi principali appositamente per questo scopo: i comandi "idraulici" sono di basso livello e sono destinati principalmente ad essere utilizzati da altri programmi; il comando "porcellana" ha lo scopo di interagire con l'utente e di chiamare i comandi idraulici per svolgere il proprio lavoro. Guarda all'interno della directory /usr/lib/git-core (potrebbe essere diverso sul tuo sistema) per avere l'idea di quanti comandi idraulici abbia Git.

D'altra parte, Go supporta il collegamento con librerie condivise tramite la sua funzione cgo. Quindi potresti provare a inserire libgit2 con esso. AFAIK, libgit2 non è ancora completamente alla pari con Git stesso, ma è in grado di leggere/scrivere repository Git, fare branching ecc. — presumibilmente sarà sufficiente per il tuo compito.

Va bene, dopo che ho scritto tutto questo, scorrere verso il basso la voce "binding" in loco s' il libgit2 e ho trovato go-git ...

+0

Ok, abbastanza giusto. Penso che ricorrerò ancora a qualche forma di binding (go-git sembra abbastanza interessante), che sembra un modo più semplice per gestire i comandi in uscita ... – vhdirk

3

Da alcuni anni, io e il mio team, stavamo codificando un'implementazione git pura in Go, evitiamo di avere qualsiasi dipendenza da c/C++ e di renderlo più flessibile e facile da estendere.

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

go-git punta a raggiungere la completezza della libgit2 o jgit, copre oggi la maggior parte delle tubature operazioni di lettura e alcune delle principali operazioni di scrittura, ma manca le principali operazioni di porcellana come fusioni .