2013-06-03 34 views
28

Nó không phải là rõ ràng đối với tôi từ Golang hướng dẫn làm thế nào để đặt mã Golang để Github để có thể nhập mã đó như là một gói từ Github sau này.Cách đặt dự án Golang (một bộ gói) vào Github?

Đây là một ví dụ dự án không gian làm việc (cấu trúc thư mục) từ Golang hướng dẫn http://golang.org/doc/code.html:

bin/ 
    hello    # command executable 
pkg/ 
    linux_amd64/  # this will reflect your OS and architecture 
     github.com/user/ 
      newmath.a # package object 
src/ 
    github.com/user/ 
     hello/ 
      hello.go # command source 
     newmath/ 
      sqrt.go # package source 

Vì vậy, những gì tôi cần phải làm, nơi nào tôi cần phải git init trong vùng làm việc này, để có thể sau:

  1. Chỉ nhập newmath gói vào dự án riêng biệt của tôi. Bằng cách này:

    import "github.com/user/newmath" 
    
  2. Để chỉ thực hiện hello.exe thực thi.

  3. Để nhận toàn bộ không gian làm việc của dự án (tất cả thư mục: bin, pkg, src).

Trả lời

33
  1. Đối với gói newmath nó giống như (sau này 2.)

    $ mkdir $GOPATH/src/github.com/username/newmath 
    $ cd $GOPATH/src/github.com/username/newmath 
    $ git init 
    $ ... more git setup 
    $ touch sqrt.go 
    $ gvim sqrt.go 
    $ git add sqrt.go 
    $ git commit -a -m 'Inital commit' 
    $ git push 
    

    Bây giờ mọi người có thể làm

    $ go get github.com/username/newmath 
    

    import "github.com/username/newmath"

    giờ đây sẽ hoạt động trong nguồn của chúng. Gói sẽ được cài đặt theo yêu cầu tự động.

  2. tôi sẽ giả định rằng hello lệnh và newmath gói là không liên quan, hoặc không đủ liên quan chặt chẽ đến thuộc về một kho .

    $ mkdir $GOPATH/src/github.com/username/hello 
    $ cd $GOPATH/src/github.com/username/hello 
    $ git init 
    $ ... more git setup 
    $ touch hello.go 
    $ gvim hello.go 
    $ git add hello.go 
    $ git commit -a -m 'Inital commit' 
    $ git push 
    

    Bây giờ mọi người có thể làm

    $ go get github.com/username/hello 
    $ go install github.com/username/hello 
    

    để cài đặt lệnh của bạn hello.

    • Nó làm cho hầu như không có ý nghĩa để xuất bản nội dung của $GOPATH/pkg tại các dịch vụ lưu trữ.
    • Nó làm cho một số ý nghĩa xuất bản nội dung của $GOPATH/bin tại dịch vụ lưu trữ. Nhưng tôi không khuyến khích thực hành này vì lý do rõ ràng là . Ngoài ra, nếu bạn đang xuất bản các nguồn - các tệp nhị phân là không cần thiết và mọi người có thể tự xây dựng (01)của mình.

Bạn dường như có lẽ vẫn còn là một chút bối rối bởi các thuật ngữ 'không gian làm việc'.Một vùng làm việc thường chỉ tồn tại một lần tại máy của nhà phát triển, nhưng nó thường chứa một vài kho lưu trữ. Một số tác giả của các nhà phát triển, những người khác "đi getted" từ Internet. Để xuất bản một toàn bộ không gian trong trường hợp này có ý nghĩa rất ít.

Tuy nhiên, có những người sử dụng không gian làm việc riêng cho mỗi dự án hoặc mỗi kho lưu trữ hoặc thậm chí có thể cho mỗi gói. Tôi không biết những lợi ích là gì. Hoặc tốt hơn nói, tôi nghĩ rằng không có gì so với không gian làm việc duy nhất, được xác định bởi, nói export GOPATH=$HOME (như là trường hợp của tôi trong nhiều năm w/o bất kỳ rắc rối với nó trong nhiều năm).

2

Kiểm tra liên kết này ra để biết thêm chi tiết:

github go wiki on github code layout

dưới đây là một phần vĩnh viễn:

Ứng dụng và cả thư viện sống trên Github, mỗi trong kho riêng của mình. $ GOPATH là gốc của dự án - mỗi repo Github của bạn sẽ được kiểm tra một số thư mục bên dưới $ GOPATH.

bố trí Mã của bạn sẽ trông như thế này:

$GOPATH/ 
src/ 
    github.com/ 
     jmcvetta/ 
      useless/ 
       .git/ 
       useless.go 
       useless_test.go 
       README.md 
      uselessd/ 
       .git/ 
       uselessd.go 
       uselessd_test.go 
       README.md 

Mỗi thư mục dưới src/github.com/jmcvetta/là gốc rễ của một kiểm git riêng biệt.

0

Nếu bạn không phải là fan của git cli thì tất cả những gì bạn thực sự cần làm là tải lên github repo qua giao diện web. Chỉ cần chắc chắn rằng bạn có tên gói của bạn cùng tên như repo (chữ thường) và bạn nên được tốt để đi. Tôi đã làm điều tương tự với github.com/Digitalblueeye/enroute cho thư viện API REST của tôi.

Các vấn đề liên quan