2013-02-23 37 views
5

Tôi đã hỏi related câu hỏi và nhận ra rằng tôi đã không hỏi đúng câu hỏi (tức là, đây không phải là về git).Gửi tới github qua dòng lệnh curl (Windows)

Câu hỏi đặt ra là cách đẩy dự án vào github mà không cần tạo dự án trong đám mây bằng R. Hiện tại bạn có thể thực hiện điều này từ dòng lệnh git trong RStudio sử dụng thông tin từ this question.

Bây giờ tôi đang cố gắng biến nó thành mã R ngay bây giờ từ một máy Windows (Linux thật dễ dàng). Tôi đang mắc kẹt ở bước đầu tiên sử dụng curl từ dòng lệnh thông qua một cuộc gọi R system. Tôi sẽ hiển thị những gì tôi có và sau đó là thông báo lỗi (Thanks to SimonO101 for getting me this far.). Mỗi bình luận của ông dưới đây, tôi đã chỉnh sửa rất nhiều để phản ánh các vấn đề như nó:

R Mã:

repo <- "New" 
user <- "trinker" 
password <- "password" 

url <- "http://curl.askapache.com/download/curl-7.23.1-win64-ssl-sspi.zip" 
tmp <- tempfile(fileext = ".zip") 
download.file(url,tmp) 
unzip(tmp, exdir = tempdir()) 

system(paste0(tempdir(), "/curl http://curl.haxx.se/ca/cacert.pem -o " , 
    tempdir() , "/curl-ca-bundle.crt")) 

cmd1 <- paste0(tempdir(), "/curl -u '", user, ":", password, 
    "' https://api.github.com/user/repos -d '{\"name\":\"", repo, "\"}'") 

system(cmd1) 

cmd2 <- paste0(tempdir(), "/curl -k -u '", user, ":", password, 
    "' https://api.github.com/user/repos -d '{\"name\":\"", repo, "\"}'") 

system(cmd2) 

Messages Lỗi (tương tự cho cả hai phương pháp):

> system(cmd1) 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 

    0  0 0  0 0  0  0  0 --:--:-- --:--:-- --:--:--  0 
100 12 0  0 100 12  0  24 --:--:-- --:--:-- --:--:-- 30 
100 47 100 35 100 12  65  22 --:--:-- --:--:-- --:--:-- 83{ 
    "message": "Bad credentials" 
} 

Tôi biết tất cả các tệp đều có ở đó vì:

> dir(tempdir()) 
[1] "curl-ca-bundle.crt" "curl.exe"    "file1aec62fa980.zip" "file1aec758c1415.zip" 

Nó không thể được mật khẩu hoặc tên người dùng của tôi bởi vì này hoạt động trên Linux Mint (sự khác biệt duy nhất là phần trước curl):

repo <- "New" 
user <- "trinker" 
password <- "password" 


cmd1 <- paste0("curl -u '", user, ":", password, 
    "' https://api.github.com/user/repos -d '{\"name\":\"", repo, "\"}'") 

system(cmd1) 

LƯU Ý: máy tính Windows 7. R 2.14.1

+0

này không, như bạn đề nghị chỉ làm việc trên máy Mac của tôi như là. Bạn có thử tùy chọn '-k' như lỗi được đề xuất không? nghĩa là 'cmd1 <- paste0 (" curl -k -u '", người dùng,": ", mật khẩu, "' https://api.github.com/user/repos -d '{\ "name \": \ "", repo, "\"} '")' –

+0

Có và dường như treo lên vô thời hạn. Tôi sẽ thử lại lần nữa. –

+0

Ah, nó đã treo cho tôi quá, nhưng sau đó tôi vô tình đóng nắp MBP của tôi. Khi tôi mở cửa trở lại, lệnh đã hoàn thành và repo đã xuất hiện trên GitHub ...! Đi con số. –

Trả lời

4

EDIT - Sau khi OP cung cấp tiền thưởng

Ok, nó quay ra nó là để làm với một số cửa sổ nhân vật điên thoát trên dòng lệnh. Về cơ bản vấn đề là chúng tôi đã chuyển các yêu cầu json không đúng định dạng tới github.

Bạn có thể sử dụng shQuote để định dạng đúng phần vi phạm yêu cầu curl dành cho Windows. Chúng tôi có thể kiểm tra loại nền tảng để xem liệu chúng ta cần phải bao gồm định dạng đặc biệt đối với trường hợp Windows như vậy:

repo <- "NewRepository" 
json <- paste0(" { \"name\":\"" , repo , "\" } ") #string we desire formatting 
os <- .Platform$OS.type #check if we are on Windows 
if(os == "windows"){ 
json <- shQuote(json , type = "cmd") 
cmd1 <- paste0(tempdir() ,"/curl -i -u \"" , user , ":" , password , "\" https://api.github.com/user/repos -d " , json) 
} 

này làm việc trên hộp Windows 7 của tôi mà không bất kỳ vấn đề. Tôi có thể cập nhật tập lệnh GitHub nếu bạn muốn?

OLD ĐÁP

tôi đã làm một số đào bới xung quanh herehere và nó có thể là câu trả lời cho vấn đề của bạn là để cập nhật các curl-ca-bó. Nó có thể giúp trên Windows để có được R sử dụng internet2.dll.

repo <- "New" 
user <- "trinker" 
password <- "password" 

url <- "http://curl.askapache.com/download/curl-7.23.1-win64-ssl-sspi.zip" 
tmp <- tempfile(fileext = ".zip") 
download.file(url,tmp) 
unzip(tmp, exdir = tempdir()) 
system(paste0("curl http://curl.haxx.se/ca/cacert.pem -o " , tempdir() , "/curl-ca-bundle.crt")) 
system(paste0(tempdir(),"/curl", " -u \'USER:PASS\' https://api.github.com/user/repos -d \'{\"name\":\"REPO\"}\'")) 

Một lần nữa, tôi không thể kiểm tra điều này vì tôi không có quyền truy cập vào hộp Windows, nhưng việc cập nhật tệp cơ quan chứng chỉ dường như đã giúp một vài người khác.Từ curl website, phiên bản Windows của curl nên tìm kiếm các tập tin curl-ca-bundle.crt theo thứ tự sau đây:

  1. thư mục ứng dụng của
  2. thư mục
  3. thư mục
  4. Windows System làm việc hiện tại (ví dụ C: \ windows \ system32)
  5. của windows Directory (ví dụ C: \ windows)
  6. tất cả các thư mục cùng% PATH%
+0

Brilliant +1 và +300 bounty –

+0

@TylerRinker Yay. Nhiều nghĩa vụ với bạn thưa bạn. –

+0

Tôi đang ghi nhận tín dụng cho bạn về chức năng này. Nếu bạn muốn tôi sử dụng tên thật của bạn, hãy gửi email cho tôi qua địa chỉ email được cung cấp github. Cảm ơn một lần nữa vì sự giúp đỡ của bạn. –

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