2012-02-29 20 views
20

Chúng tôi cần phải tìm nạp một zipball của một kho lưu trữ riêng tư. Đối với những người dùng công cộng, việc này khá dễ dàng thông qua API GitHub hoặc theo cách thủ công (https://github.com/user/repo/zipball/master). Nhưng những gì về repos tư nhân? Không rõ ràng làm thế nào để làm điều đó ngay cả khi có mã thông báo oAuth.Có anyway để lập trình lấy một zipball của repo github tư nhân?

+0

"Zipball" này là gì? –

+0

Đó là tệp zip. – CMCDragonkai

Trả lời

25

New Alternative

Bởi vì câu trả lời chấp nhận được không làm việc nữa, tôi nghĩ tôi sẽ giải thích làm thế nào tôi đã có thể làm điều đó với những thay đổi mới trong API github.

Các Tải Api mới liên kết

Trước tiên, tôi tìm thấy thông tin về tải các kho lưu trữ ở đây: https://developer.github.com/v3/repos/contents/#get-archive-link

Công Repo

Nếu đó là một repo nào thì nó là rất dễ dàng ... bạn có thể làm:

 
curl -L https://api.github.com/repos/pengwynn/octokit/tarball > octokit.tar.gz 

Riêng Repo

Nếu đó là một repo riêng, bạn cần tạo mã thông báo oAuth bằng cách đi tới hồ sơ của bạn rồi chọn "Ứng dụng". (https://github.com/settings/applications) Tôi đã tạo một mã thông báo cá nhân.

Sau đó, sử dụng các hướng dẫn trên trang sau tôi phát hiện ra như thế nào để có được repo tin rằng bạn có quyền: https://developer.github.com/v3/#authentication

Full Mã

Như thế này

 
curl -H "Authorization: token ab499f3b..." \ 
-L https://api.github.com/repos/godzilla/my_priv_repo/tarball > wut.tar.gz 

Be đảm bảo thay thế ab499f3b... bằng mã thông báo thực của bạn.

1

Tôi dường như không gặp sự cố khi tải một tệp zipball từ các bản repos riêng tư để tải xuống. Tôi sử dụng cùng một định dạng mà bạn đã chỉ định và nó hoạt động hoàn hảo.

Tôi sử dụng OAuth2 để nhận các kho lưu trữ nhưng tôi tạo liên kết cho khối zip bằng định dạng bạn đã cung cấp. Here is the application Tôi làm điều này.

Nếu bạn đang tìm kiếm mã thông báo OAuth2, chỉ cần sử dụng định dạng GitHubt API v3, nó khá đơn giản. Mặc dù điều này không phù hợp với vấn đề của bạn một cách chính xác:

This là làm thế nào tôi nhận được một thẻ OAuth2 từ GitHub cho this chrome extension

CẬP NHẬT

@jayarjo I build the URL here on line 202. Tôi chỉ xây dựng URL giống như URL bạn đã chỉ định, mã thông báo OAuth2 thậm chí không được sử dụng cho nó. Tất cả mã thông báo của tôi cho phép tôi làm là tìm nạp tất cả dữ liệu cá nhân của người dùng trước khi tôi tạo đánh dấu. Nhưng nó hoạt động không có vấn đề gì ...

Tôi nghĩ lý do tôi thực sự có thể tải xuống zipball là vì URL thực sự là https://github.com/ * và vì tôi hiện đang đăng nhập vì OAuth2 tôi có quyền nhận đến URL đó - nơi có vẻ như bạn không nhận được lỗi 404.

Bạn có thể thử gửi yêu cầu tới trang và nếu bạn nhận được thông báo lỗi nhắc người dùng đăng nhập trước, khi bạn yêu cầu zipball, bạn sẽ không gặp vấn đề gì.

+0

Thật lạ ... Tôi gặp lỗi "không tìm thấy" mỗi lần tôi thử. Ngoài ra khi sử dụng cùng một định dạng tôi đã chỉ định không chắc chắn nơi để đặt mã thông báo ở đó? .. Bạn có thể liên kết dòng mã cụ thể nơi bạn làm điều này không? – jayarjo

+0

@jayarjo Cập nhật câu trả lời của tôi - về cơ bản người dùng phải đăng nhập để URL có sẵn cho họ. Sau đó, bạn sẽ không nhận được một 404 – jjNford

+0

Nhưng tôi lấy mã thông báo (tôi có nghĩa là tôi có nó khi tôi thử url đó). Nhưng đây là tất cả những gì bạn làm và nó hoạt động? Có lẽ tôi bỏ qua một cái gì đó đơn giản ở đây ... – jayarjo

2

với CURL:

curl -L -F "login=$USER" -F "token=$TOKEN" https://github.com/$USER/$REPO/$PKGTYPE/$BRANCHorTAG 

nơi $TOKEN là mã thông báo API trong hồ sơ của github của bạn, không phải là một dấu hiệu OAuth2 sử dụng để giao tiếp với các APIv3.

$USER là tài khoản người dùng mà mã thông báo được kết nối với, không nhất thiết là tổ chức/người dùng khác mà repo thuộc về. Trường hợp thứ hai của $USER là tài khoản người dùng/tài khoản repo.

$REPO là tên của kho tin

$PKGTYPE là tarball hoặc zipball và $BRANCHorTAG là một chi nhánh, giống như bậc thầy, hoặc một tên tag cho một cam kết.

Ví dụ đầu tiên của $USER phải có quyền truy cập vào repo thuộc trường hợp thứ hai là $USER.

Tôi không thể tìm thấy tài liệu này ở bất kỳ đâu, vì vậy tôi cũng có một chút viết về nó nếu bạn muốn bất cứ điều gì chi tiết hơn.

+0

Không chắc chắn nếu điều này hoạt động nữa: http://stackoverflow.com/questions/10418596/cant-find-api-token-in-github –

2

tôi đi qua cùng một vấn đề và điều này làm việc cho tôi (tính đến tháng 2 năm 2015):

curl -O -J -L -u $YOUROAUTHKEY:x-oauth-basic https://github.com/$USER/$REPO/archive/master.zip 

Các ouath như một giải pháp tiêu đề không làm việc cho tôi nhưng những gì làm việc là nhồi nhét chìa khóa vào tên người dùng và loại chỉ định. Sau đó nó đưa ra 302 để chuyển hướng với liên kết thích hợp.

Lệnh Verbose thực sự đã giúp tôi gỡ rối xem thông tin đăng nhập tôi đang sử dụng có được chấp nhận hay không (404 vs 401)

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