我问了一个related问题并意识到我没有问正确的问题(即,这不是关于git)。
问题是如何在没有首先使用R在云中创建项目的情况下将项目推送到github。目前,您可以使用this question中的信息从RStudio中的git命令行执行此操作。
现在我正在尝试从Windows机器中将其转换为R代码(Linux很简单)。我通过R system
调用从命令行使用curl进入第一步。我将展示我所拥有的内容,然后显示错误消息(Thanks to SimonO101 for getting me this far.)。根据他在下面的评论,我已经进行了大量编辑以反映出问题:
R代码:
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)
错误消息(两种方法都相同):
> 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"
}
我知道所有文件都在那里因为:
> dir(tempdir())
[1] "curl-ca-bundle.crt" "curl.exe" "file1aec62fa980.zip" "file1aec758c1415.zip"
它不能是我的密码或用户名,因为这适用于Linux Mint(唯一的区别是curl之前的部分):
repo <- "New"
user <- "trinker"
password <- "password"
cmd1 <- paste0("curl -u '", user, ":", password,
"' https://api.github.com/user/repos -d '{\"name\":\"", repo, "\"}'")
system(cmd1)
注意:Windows 7计算机。 R 2.14.1
答案 0 :(得分:4)
编辑 - OP提供赏金后
好的,事实证明这是在命令行上逃避一些疯狂的Windows角色。基本上问题是我们将格式不正确的json请求传递给github。
您可以使用shQuote
正确格式化Windows卷曲请求的有问题部分。我们可以测试平台类型,看看是否需要为Windows案例包含特殊格式,如下所示:
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 )
}
这在我的Windows 7机箱上运行没有任何问题。如果你愿意,我可以更新GitHub脚本吗?
OLD ANSWER
我在here和here进行了一些挖掘,可能是您的问题的答案是更新curl-ca-bundle。在Windows上可以帮助R使用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\"}\'") )
同样,我无法测试这个,因为我无法访问我的Windows框,但更新证书颁发机构文件似乎已经帮助了其他一些人。从curl website开始,Windows版本的curl应按以下顺序查找curl-ca-bundle.crt
文件: