Cách thực hiện "truy cập" vào một thẻ cụ thể của kho lưu trữ github


89

Tôi đang cố gắng biên dịch cơ sở dữ liệu InfluxDB (phiên bản v0.8.8) bằng cách sử dụng go get github.com/influxdb/influxdb

Nhưng điều này kéo nhánh chính và tôi cần v0.8.8thẻ.

Tôi đã cố gắng làm: go get github.com/influxdb/influxdb/releases/tag/v0.8.8nhưng điều này không thành công khi nói rằng không thể tìm thấy.

Tôi cũng đã cố gắng để làm một thường xuyên go getcủa chi nhánh chủ, và sau đó tự kiểm tra ra các thẻ sử dụng gittrong GOPATH/src/github...để thiết lập các phiên bản corret.

Vấn đề khi sử dụng cách tiếp cận cuối cùng là khi tôi cố gắng kéo các phần phụ thuộc với go get -u -f ./...nó sẽ cố gắng tìm chúng trong nhánh chính và một số trong số chúng không tồn tại trên nhánh chính ...

TL; DR : thực hiện go gettrên một thẻ github cụ thể và kéo các phần phụ thuộc chính xác.


Hãy thử cái này .. git tag -a v0.8.8 - "Nhận xét của bạn"
Ashok Londhe

2
@AshokLondhe Anh ấy đang hỏi cách sử dụng thẻ cho go getchứ không phải cách tạo thẻ.
wonderb0lt

@ wonderb0lt đây là lệnh thêm thẻ.
Ashok Londhe

Tôi nghĩ rằng tôi đã cố gắng tìm hiểu làm thế nào để kiểm tra một từ khóa cụ thể là tốt, và lần cuối cùng tôi đã cố gắng đó là không thể ...
wonderb0lt

1
Hãy xem cái này . Gần cuối các trang trình bày cung cấp một số lựa chọn thay thế quản lý phụ thuộc.
wonderb0lt

Câu trả lời:


34

Không thể sử dụng go getcông cụ này. Thay vào đó, bạn cần sử dụng công cụ quản lý gói go của bên thứ ba hoặc tạo các nhánh của riêng bạn cho các gói mà bạn muốn quản lý chi tiết hơn.

Nói chuyện với một anh chàng làm việc tại Google và anh ấy thừa nhận vấn đề / yêu cầu này, anh ấy nói rằng việc cung cấp mà nhóm của anh ấy sử dụng rất cồng kềnh và họ có thể sẽ sớm giải quyết nó bằng các công cụ chính thức.

Đọc thêm:

Bán hàng trong Go 1.6

Vendoring đã được phát hành từ thử nghiệm trong phiên bản 1.6 (sau khi bài đăng này được viết ban đầu) giúp quá trình sử dụng các thẻ / phiên bản gói cụ thể bằng các công cụ của bên thứ ba dễ dàng hơn. go getvẫn không có chức năng tìm nạp các thẻ hoặc phiên bản cụ thể.

Tìm hiểu thêm về cách hoạt động của nhà cung cấp : Hiểu và sử dụng thư mục nhà cung cấp

Các mô-đun trong Go 1.11

Go 1.11 đã phát hành một tính năng thử nghiệm được gọi là mô-đun để cải thiện quản lý phụ thuộc, họ hy vọng sẽ phát hành nó ổn định trong Go 1.12: Thông tin về mô-đun trong Go 1.11


1
Bạn có thể nói rõ hơn một chút về phần google? Có một cuộc thảo luận lớn về vấn đề này trên danh sách gửi thư của cộng đồng cờ vây, có hướng nào khác chưa được thảo luận ở đó không?
Not_a_Golfer

1
@Not_a_Golfer Đó là một anh chàng không thuộc đội cờ vây, nhưng đã nói về việc họ hiện đang sử dụng dịch vụ bán hàng nội bộ và nó khá cồng kềnh. Vì vậy, họ quan tâm đến việc giải quyết nó tốt hơn bằng các công cụ chính thức. Mặc dù vậy, hãy nghĩ rằng đó là một tuyên bố không chính thức, sẽ làm cho điều đó rõ ràng hơn.
Robin Andersson

2
AFAIK, đề xuất duy nhất dành cho nhà cung cấp chính thức / định dạng tệp phụ thuộc. Điều này vẫn tuyệt vời, trong đó các dự án sẽ không bị ràng buộc với một công cụ phụ thuộc và có thể tương tác với bất kỳ giải pháp nào họ muốn (tức là tôi thích khóa sửa đổi, trong khi những người khác thích cung cấp).
JimB

mô-đun không thực sự đối phó với sự phụ thuộc vào trình biên dịch mã, điều này buộc chúng ta phải sử dụng go get protoc-gen-go ở một nơi khác với phiên bản sửa chữa. Do đó, chúng tôi cần theo dõi cùng một phiên bản ở 2 nơi khác nhau (vì các thư viện được kết hợp chặt chẽ với trình tạo)
Martin

24

go mod hiện có sẵn.

Đối với những người cần tạo tệp nhị phân của một thẻ cụ thể , đây là cách của tôi:

mkdir temp
cd temp
go mod init .
go get -d -v github.com/nsqio/nsq@v1.1.0
mkdir bin
go build -o bin/nsqd.exe github.com/nsqio/nsq/apps/nsqd

Giải trình:

  • Đoạn mã trên kéo NSQ v1.1.0 và xây dựng nsqd.
  • go mod init .tạo một go.modtệp trong thư mục hiện tại, cho phép sử dụng go getvới các thẻ / bản sửa đổi. (xem liên kết này )
  • -d có nghĩa là "chỉ tải xuống", nếu bạn muốn cài đặt trực tiếp, hãy bỏ qua cờ này và các lệnh xây dựng bên dưới dòng này.
  • -v có nghĩa là "dài dòng".
  • Đoạn mã trên dành cho Windows. Nếu bạn sử dụng Linux, hãy thay thế bin/nsqd.exebằng bin/nsqd.

Mô-đun đã tải xuống được lưu trữ trong %GOPATH%\pkg\mod. Nếu bạn không muốn làm ô nhiễm GOPATHthư mục của mình , hãy tạo một thư mục mới và đặt của bạn GOPATHcho nó.


4
Trong phiên bản 1.13, go mod initcần một id mô-đun, ví dụgo mod init local/build
archie 9/9/19

11

Tôi đã thành công với điều này:

  • Chạy lệnh get mà không có thẻ - nó sẽ sao chép nhánh chính.
  • Di chuyển đến thư mục sao chép và kiểm tra thẻ hoặc nhánh mà bạn muốn.
  • Chạy lại lệnh go get, nó sẽ xử lý lệnh trên nhánh đã kiểm tra.

4
Trong lần chạy đầu tiên, bạn có thể sử dụng go get -d <git-url>để tải xuống các gói và bỏ qua quá trình cài đặt.
webwurst

Đây là những gì nên được sử dụng khi bạn cần một thẻ cụ thể, gopkg.in quá hạn chế.
Hrishikesh Kumar

3

Câu hỏi này có trước Mô-đun Go, nhưng để tham khảo trong tương lai, quy trình chính xác trong Go 1.11 để tìm nạp một phiên bản cụ thể là:

go get github.com/influxdb@[version]

Hoặc để nhận một thẻ git cụ thể:

go get github.com/influxdb@[gitref]


1

Tôi có một cách tiếp cận (hơi hackish, nhưng đang hoạt động) để giải quyết vấn đề này, ít nhất là đối với kho git: Vì gói go get'ed là kho lưu trữ kiểm soát nguồn thông thường, người ta có thể kiểm tra các thẻ bằng cách sử dụng công cụ git bình thường (có thể sử dụng git từ dòng lệnh , Tôi đang sử dụng Atlassian SourceTree).

Để chia sẻ cấu hình gói của tôi với đồng đội, tôi đã tạo một kho lưu trữ git trên GOPATH của mình . Sau đó, tôi đã thêm tất cả các gói (ít nhất là những gói tôi muốn quản lý theo cách này) vào repo này dưới dạng git submodule. Điều này đòi hỏi bạn phải di chuyển các thư mục repo đang tồn tại và thêm lại chúng dưới dạng git submodule, để tránh nhầm lẫn giữa git. Quá trình này hơi tẻ nhạt, nhưng được chứng minh là đáng để rắc rối:

Bây giờ tôi có thể cam kết và đẩy lên GOPATH-repo của mình mỗi khi tôi sử dụng gói go mới. Khi đồng đội của tôi lấy từ repo này và đưa ra bản cập nhật git submodule (hoặc đơn giản là cập nhật qua SoureTree, tính năng này sẽ tự động thực hiện), phiên bản gói của họ sẽ được kiểm tra trên cùng một thẻ của tôi.

Tất nhiên điều này chỉ hoạt động đối với các gói được kiểm soát nguồn git ...


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.