Làm cách nào để tải xuống tarball từ GitHub bằng cURL?


93

Tôi đang cố tải xuống tarball từ GitHub bằng cURL , nhưng có vẻ như nó không chuyển hướng:

$ curl --insecure https://github.com/pinard/Pymacs/tarball/v0.24-beta2
<html><body>You are being <a href="https://nodeload.github.com/pinard/Pymacs/tarball/v0.24-beta2">redirected</a>.</body></html>

Lưu ý: wget phù hợp với tôi:

$ wget --no-check-certificate https://github.com/pinard/Pymacs/tarball/v0.24-beta2

Tuy nhiên, tôi muốn sử dụng cURL vì cuối cùng tôi muốn gỡ bỏ nó trong dòng với một cái gì đó như:

$ curl --insecure https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx

Tôi thấy rằng URL sau khi chuyển hướng hóa ra là https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz , nhưng tôi muốn cURL đủ thông minh để tìm hiểu điều này ra.

Câu trả lời:


148

Sử dụng -Ltùy chọn để theo dõi chuyển hướng:

curl -L https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx

3
Đối với https, bạn cũng có thể cần -k.
nicerobot

1
Tại sao gần đây có vấn đề về chứng chỉ trên raw.github.com? Tôi gặp sự cố khi cài đặt homebrew và rvm trên một máy mới. Tôi đã từng sao chép và dán từ trang chủ và đang làm việc. Bây giờ tôi gặp sự cố với chứng chỉ: ruby ​​-e "$ (curl -fsSL raw.github.com/mxcl/homebrew/go )" curl: (60) Sự cố chứng chỉ SSL: không thể lấy chứng chỉ của tổ chức phát hành địa phương. Chi tiết thêm tại đây: curl. haxx.se/docs/sslcerts.html curl thực hiện xác minh chứng chỉ SSL theo mặc định, sử dụng "gói" .. Nếu bạn muốn tắt xác minh chứng chỉ của curl, hãy sử dụng tùy chọn -k (hoặc --insecure).
Chris Cinelli

Mmmm ... có khả năng bao gồm cả các mô-đun phụ trong tarball không? Có vẻ như đối với các mô-đun con chỉ có các thư mục trống được tạo trong tarball.
aurora

Không chắc liệu đây có phải là sự cố tạm thời ngay bây giờ hay không, nhưng github đang trả về lỗi máy chủ nội bộ 500 cho sự cố này vào lúc này.
BT

15
Và chỉ để có thể cứu ai đó một google, -Lnghĩa là theo dõi các chuyển hướng.
Steve Kehlet

45

Cách hiện đại hóa để làm điều này là:

curl -sL https://github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz | tar xz

Thay thế user-or-org, reposha1-or-reftương ứng.

Nếu bạn muốn tệp zip thay vì tarball, hãy chỉ định .zipthay vì .tar.gzhậu tố.

Bạn cũng có thể truy xuất kho lưu trữ của kho lưu trữ riêng tư, bằng cách chỉ định -u token:x-oauth-basictùy chọn cuộn tròn. Thay thế tokenbằng mã thông báo truy cập cá nhân.


3
trong số tất cả các câu trả lời, đây chính xác là những gì tôi đang tìm kiếm! Nếu bạn có mã thông báo oauth, bạn có thể sử dụng trực tiếp mã đó; https://token@github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz
svenevs

làm thế nào điều này sẽ hoạt động để tải xuống từ các bản phát hành thay vì lưu trữ?
waspinator

1
@waspinator, tôi sử dụng curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gzXem ví dụ ở đây
Wayne

Bạn có thể giải thích làm thế nào điều này tốt hơn câu trả lời được chấp nhận?
Robin Métral

14

Bạn cũng có thể sử dụng wget để »gỡ bỏ nó trong dòng«. Chỉ cần chỉ định stdout làm tệp đầu ra ( -O -):

wget --no-check-certificate https://github.com/pinard/Pymacs/tarball/v0.24-beta2 -O - | tar xz

2

Tất cả các giải pháp khác yêu cầu chỉ định số phát hành / phiên bản, điều này rõ ràng là phá vỡ tự động hóa.

Giải pháp này - hiện đã được thử nghiệm và được biết là hoạt động với Github API v3 - tuy nhiên có thể được sử dụng theo chương trình để lấy bản phát hành MỚI NHẤT mà không cần chỉ định bất kỳ thẻ hoặc số phát hành nào và bỏ TAR nhị phân thành một tên tùy ý bạn chỉ định trong chuyển đổi --one-top-level="pi-ap". Chỉ cần hoán đổi người dùng f1linux và repo pi-ap trong ví dụ dưới đây với thông tin chi tiết của riêng bạn và Bob là chú của bạn:

curl -L https://api.github.com/repos/f1linux/pi-ap/tarball | tar xzvf - --one-top-level="pi-ap" --strip-components 1

Điều này thật đẹp, nhưng thực sự có thể sử dụng một số giải thích. ví dụ: đây là phiên bản API GitHub nào và nó được ghi lại ở đâu?
l3l_aze

1
@ l3l_aze Chỉ cần chỉnh sửa câu trả lời, nó bao gồm số phiên bản API Githib hiện tại mà giải pháp của tôi đã được thử nghiệm và được biết là hoạt động. Cảm ơn phản hồi của bạn! - T
F1Linux

Ái chà. Tôi không nghĩ rằng điều này có thể trở nên tốt hơn những gì bạn đã chia sẻ. Cảm ơn rât nhiều!
l3l_aze

1

với một dir cụ thể

cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx


cách tốt hơn cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
zhengquan
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.