Verwenden Sie R, um das lokale Repo unter Windows an Github zu senden

Ich habe mal einen sehr gefragtähnliche Frage und bekam eine Antwort, die von der Kommandozeile aus funktionierte, aber jetzt R verwenden möchte, um den Prozess von Windows aus zu automatisieren (Linux ist viel einfacher).

Folgendes versuche ich zu tun:

Erstellen Sie ein lokales Verzeichnis (oder es existiert bereits)Erzeugen Sie ein neues Github-Repo in der Cloud mit demselben Namen wie local (basierend auf dieser Antwort)Fügen Sie dem lokalen Repo einen .git hinzuMachen Sie ein erstes CommitStellen Sie die Verbindung zwischen Cloud-Repo und lokalem Repo herSchieben Sie das Commit und die Dateien im lokalen Repo zu Github

Ich glaubebasierend auf der Ausgabe dass ich bis zu Schritt 5 komme, bevor ich versage (da das Festschreiben und die Dateien aus dem lokalen Verzeichnis niemals an github in der Cloud gesendet werden). Ich weiß, dass Schritt 2 funktioniert, weil das leere Repo erstellt wirdHier. Ich kann Schritt 5 nicht testen. Im letzten Schrittshell(cmd6, intern = T) RGui und RStudio führen zu einer ewigen Todesspirale. Die Frage ist:Wie kann ich das Commit und das lokale Repo in die Cloud übertragen?

Hier ist mein aktualisierter Code (Das einzige, was benutzerspezifisch ist, sind Benutzername und Passwort im dritten Codeabschnitt):

## Create Directory
repo <- "foo5"
dir.create(repo)
project.dir <- file.path(getwd(), repo) 

## Throw a READ.ME in the directory
cat("This is a test", file=file.path(project.dir, "READ.ME"))

## Github info (this will change per user)
password <-"pass" 
github.user <- "trinker"  

## Get git location
test <- c(file.exists("C:/Program Files (x86)/Git/bin/git.exe"),
    file.exists("C:/Program Files/Git/bin/git.exe"))
gitpath <- c("C:/Program Files (x86)/Git/bin/git.exe",
  "C:/Program Files/Git/bin/git.exe")[test][1]

## download curl and set up github api
wincurl <- "http://curl.askapache.com/download/curl-7.32.0-win64-ssl-sspi.zip"
url <- wincurl
tmp <- tempfile( fileext = ".zip" )
download.file(url,tmp)
unzip(tmp, exdir = tempdir())       
shell(paste0(tempdir(), "/curl http://curl.haxx.se/ca/cacert.pem -o " , 
    tempdir() , "/curl-ca-bundle.crt"))
json <- paste0(" { \"name\":\"" , repo , "\" } ") #string we desire formatting
json <- shQuote(json , type = "cmd" )
cmd1 <- paste0( tempdir() ,"/curl -i -u \"" , github.user , ":" , password , 
    "\" https://api.github.com/user/repos -d " , json )

shell(cmd1, intern = T)

## Change working directory
wd <- getwd()
setwd(project.dir)

## set up the .git directory
cmd2 <- paste0(shQuote(gitpath), " init")
shell(cmd2, intern = T)

## add all the contents of the directory for tracking
cmd3 <- paste0(shQuote(gitpath), " add .")  
shell(cmd3, intern = T)       

cmdStat <- paste0(shQuote(gitpath), " status")  
shell(cmdStat, intern = T)

## Set email (may not be needed)
Trim <- function (x) gsub("^\\s+|\\s+$", "", x) #remove trailing/leading white 

x <- file.path(path.expand("~"), ".gitconfig")
if (file.exists(x)) {
    y <- readLines(x)
    email <- Trim(unlist(strsplit(y[grepl("email = ", y)], "email ="))[2])
} else {
    z <- file.path(Sys.getenv("HOME"), ".gitconfig")
    if (file.exists(z)) {
        email <- Trim(unlist(strsplit(y[grepl("email = ", y)], "email ="))[2])
    } else {
        warning(paste("Set `email` in", x))
    }
}
cmdEM <- paste0(shQuote(gitpath), sprintf(" config --global user.email %s", email))        
system(cmdEM, intern = T)

## Initial commit
cmd4 <- paste0(shQuote(gitpath), ' commit -m "Initial commit"')  
system(cmd4, intern = T) 

## establish connection between local and remote
cmd5 <- paste0(shQuote(gitpath), " remote add origin https://github.com/",
    github.user, "/", repo, ".git")  
shell(cmd5, intern = T) 

## push local to remote 
cmd6 <- paste0(shQuote(gitpath), " push -u origin master")  
shell(cmd6, intern = T) 

setwd(wd)

Ich weiß, dass das Skript etwas länger ist, aber es ist alles notwendig, um das Problem neu zu erstellen und das Problem zu replizieren:

Hinweis Ich habe die Frage im Lichte von Simons Antwort aktualisiert, da er korrekt war und dem Vorstoß näher kam. Der Inhalt der ursprünglichen Frage kann gefunden werdenHier.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage