2012-11-23 29 views
21

Là một dự án thú cưng, tôi muốn phát triển một ghi chú dùng ứng dụng bằng cách sử dụng git làm phần lưu trữ phụ trợ. (Tôi nghi ngờ điều này chưa tồn tại, với bài đăng trên blog của anh chàng này: http://jarofgreen.co.uk/2012/08/how-about-a-mobile-note-app-backed-by-git/)thư viện git cho Go

Bây giờ, tôi muốn coi đây là cơ hội để chơi xung quanh với Go một chút. Tuy nhiên, tôi dường như không thể tìm thấy bất kỳ thư viện git nào (thậm chí không phải là thư viện nhỏ nhất) cho Go. Có thực sự không? Rõ ràng kiến ​​thức của tôi về Go là không tồn tại, do đó, viết các ràng buộc cho libgit không có vẻ là một cách thú vị để bắt đầu ... (và tôi có lẽ sẽ dùng đến ruby ​​mà tôi không biết)

+0

Tôi chắc chắn đã nhìn thấy một câu hỏi tương tự cách đây một thời gian nhưng tôi không thể tìm thấy nó. Liệu tôi có sai ? –

Trả lời

34

Tôi muốn nói git2go là thư viện liên kết git để sử dụng trong Go. Nó được cập nhật thường xuyên và được duy trì bởi những người chạy libgit2.

Nếu bạn đang tìm kiếm một thực thi git hoàn toàn được viết bằng Go, go-git từ source{d} là tùy chọn trưởng thành và tích cực nhất.

+0

Gói này tương đối mới (so với câu hỏi).Đây là lựa chọn tốt nhất. (Nên được đánh dấu là câu trả lời chính xác để tham khảo trong tương lai.) – Tomas

+0

Sau hai năm vẫn cập nhật hàng ngày! Thật tuyệt! –

+0

Tôi đã kết thúc với go-git, git2go là một rắc rối lớn để làm việc đúng trên máy tính Windows. –

10

Bạn có thể chỉ cần thoát ra lệnh git bằng cách sử dụng gói os/exec từ thư viện chuẩn Go.

+5

Đó là [lệnh chính thức 'đi' nào] (https://golang.org/src/cmd/go/vcs.go). –

6

Những gì Victor đề xuất thực sự là "chính thức" cách "kịch bản" Git như được hình dung bởi các nhà phát triển của nó. Các lệnh của Git được chia thành hai nhóm rộng đặc biệt cho mục đích này: các lệnh "hệ thống ống nước" ở mức thấp và được sử dụng chủ yếu bởi các chương trình khác; lệnh "sứ" có ý định tương tác với người dùng và gọi các lệnh hệ thống ống nước để thực hiện công việc của họ. Nhìn vào bên trong thư mục /usr/lib/git-core (có thể khác trên hệ thống của bạn) để có được ý tưởng về số lượng lệnh đường ống dẫn nước mà Git có.

Mặt khác, Go hỗ trợ liên kết với các thư viện được chia sẻ qua cơ sở cgo của nó. Do đó bạn có thể thử gói libgit2 với nó. AFAIK, libgit2 chưa hoàn toàn ngang bằng với chính Git, nhưng nó có thể đọc/ghi các kho lưu trữ Git, phân nhánh vv — được cho là sẽ đủ cho công việc của bạn.

Được rồi, sau khi tôi đã viết tất cả những gì, tôi cuộn xuống "Bindings" entry trên trang web của libgit2 và thấy go-git ...

+0

Ok, đủ công bằng. Tôi nghĩ rằng tôi vẫn sẽ nghỉ mát để một số hình thức ràng buộc (go-git có vẻ khá thú vị), mà chỉ có vẻ là một cách dễ dàng hơn để đối phó với các lệnh đầu ra ... – vhdirk

3

Kể từ một vài năm trước, nhóm của tôi và tôi, chúng tôi đã viết mã thực thi git thuần túy trong Go, nó tránh được sự phụ thuộc c/C++ và làm cho nó linh hoạt và dễ mở rộng hơn.

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

go-git nhằm đạt được tính đầy đủ của libgit2 hoặc jgit, ngày nay bao gồm phần lớn các hệ thống ống nước đọc hoạt động và một số các hoạt động ghi chính, nhưng lại thiếu các hoạt động sứ chính như hợp nhất .