2014-10-13 17 views
10

Tôi lưu trữ kho lưu trữ git của mình trên VPS cá nhân và tôi có một gói mà tôi muốn thực hiện "go get" -able. Tôi đã cố gắng thiết lập mọi thứ cho mỗi tài liệu trợ giúp được tìm thấy bằng cách phát hành "go help importpath" mà không có may mắn. Không có vấn đề gì tôi làm tôi nhận được lỗi sau:Sử dụng "go get" trên repo git cá nhân

package example.com/user/package: unrecognized import path "example.com/user/package" 

Tôi đã thử mọi sự kết hợp của các thẻ META đề cập với kết quả tương tự.

<meta name="go-import" content="example.com git http://example.com/user/package"> 

Kho lưu trữ git thực có thể truy cập qua http://example.com/user/package.git. Tôi có thể sao chép trực tiếp nhưng tôi muốn tải xuống và cài đặt nó đúng cách.

Mỗi tài liệu trợ giúp, nếu thực hiện yêu cầu đến http://example.com/user/package?go-get=1 trang được trả lại chứa thẻ META. Nếu sau đó thực hiện yêu cầu tiếp theo là http://example.com/?go-get=1 trang được trả về cũng chứa cùng một thẻ META.

Có cần thực hiện bất kỳ cấu hình đặc biệt nào trên máy chủ không? Tôi sẽ không nghĩ như vậy kể từ khi đi sẽ được truy cập vào kho lưu trữ thông qua một yêu cầu http.

Tôi sắp hết trí thông minh. Bất kỳ trợ giúp nào bạn có thể cung cấp sẽ được đánh giá cao.

Trả lời

14

Đây là thẻ meta Tôi đã cấu hình nginx để trả lại cho một máy chủ gitlab: nếu bạn yêu cầu http://mygit.server/group/project?go-get=1

bạn nhận được:

<meta content='mygit.server/group/project git git+ssh://[email protected]/group/project.git' name='go-import'> 

Và nó hoạt động như một nét duyên dáng.

Đây là quy tắc viết lại nginx mà thực hiện điều này:

location ~ "(/[^/]+/[^/]+)(/.*)?" { 
    if ($arg_go-get = "1") { 
      echo '<html><head><meta name="go-import" content="my.domain.com$1 git git+ssh://[email protected]$1"/></head></html>'; 
    } 
    try_files $uri $uri/index.html $uri.html @gitlab; 
    } 

Điều này tất nhiên giả sử bạn đang làm việc với git qua ssh. Nếu bạn đang sử dụng https, hãy viết lại url cho phù hợp.

0

Tôi vừa mới thực hiện việc này cho bản thân mình - kịch bản tương tự: một số ít repos nhỏ và trang web chủ yếu là riêng tư. cấu hình nginx:

root /var/www; 

location/{ 
    try_files $uri?$args $uri $uri/ @my-proxy; 
} 

Sau đó tôi chạy:

$ echo '<html><head><meta name="go-import" content="example.com/project-name git git+ssh://example.com/~/code/magic/blah/project-name.git" /></head></html>' > /var/www/project-name\?go-get\=1 
  • Truy vấn-string được nhúng vào một tên tập tin, mà nginx phục vụ nếu nó tồn tại.
  • Chúng tôi tạo một tệp có tên thích hợp (hơi lạ) cho mỗi dự án.
  • Mỗi tập tin chứa một tài liệu HTML gọn gàng cùng với những phù hợp <meta /> thẻ

Chi phí là một stat thêm() gọi mỗi hit vào khối vị trí, nhưng bạn tránh được những sợ hãi nginx if chỉ thị và out-of -tree echo mô-đun và có thể chỉnh sửa nội dung meta cho mỗi kho lưu trữ một cách trivially.

Nếu những tên tệp lạ đó gây lỗi cho bạn, bạn có thể giới hạn phạm vi: import "example.com/code/project-name" trong tệp .go và location /code { try_files ... } trong nginx.

1

Chỉ cần mở rộng câu trả lời @Not_a_Golfer, điều này rất hữu ích.

tôi có mà để cài đặt Gerrit tôi sử dụng Gitiles để duyệt mã nguồn, vì vậy bây giờ công trình godoc (Nó liên kết tài liệu vào dòng bên phải của code):

# http://stackoverflow.com/questions/26347516/using-go-get-on-a-personal-git-repo/26348986#26348986 
    location ~ "(/[^/]+)(/.*)?" { 
     if ($arg_go-get = "1") { 
       echo '<html><head><meta name="go-import" content="myserver.example.com$1 git https://myserver.example.com$1"/><meta name="go-source" content="myserver.example.com$1 https://myserver.example.com/plugins/gitiles$1 https://myserver.example.com/plugins/gitiles$1/+/master/{dir} https://myserver.example.com/plugins/gitiles$1/+/master/{dir}/{file}#{line}" /></head></html>'; 
     } 
     try_files $uri @gerrit; 
    } 

    location/{ 
     try_files $uri @gerrit; 
    } 
Các vấn đề liên quan