Я пытаюсь автоматизировать некоторые основные операции с git из скрипта R.Я использую Rstudio на ОС Windows.Это может быть полезно, например, если вы хотите обновить GitHub, когда скрипт завершит выполнение какой-либо автоматизированной задачи.
Я написал несколько простых функций, которые используют функцию R shell()
и оператор канала &
Window для отправки цепочки команд на терминал ОС:
# Git status.
gitstatus <- function(dir = getwd()){
cmd_list <- list(
cmd1 = tolower(substr(dir,1,2)),
cmd2 = paste("cd",dir),
cmd3 = "git status"
)
cmd <- paste(unlist(cmd_list),collapse = " & ")
shell(cmd)
}
# Git add.
gitadd <- function(dir = getwd()){
cmd_list <- list(
cmd1 = tolower(substr(dir,1,2)),
cmd2 = paste("cd",dir),
cmd3 = "git add --all"
)
cmd <- paste(unlist(cmd_list),collapse = " & ")
shell(cmd)
}
# Git commit.
gitcommit <- function(msg = "commit from Rstudio", dir = getwd()){
cmd_list <- list(
cmd1 = tolower(substr(dir,1,2)),
cmd2 = paste("cd",dir),
cmd3 = paste0("git commit -am ","'",msg,"'")
)
cmd <- paste(unlist(cmd_list),collapse = " & ")
shell(cmd)
}
# Git push.
gitpush <- function(dir = getwd()){
cmd_list <- list(
cmd1 = tolower(substr(dir,1,2)),
cmd2 = paste("cd",dir),
cmd3 = "git push"
)
cmd <- paste(unlist(cmd_list),collapse = " & ")
shell(cmd)
}
My gitstatus
, gitadd
и gitpush
функции работают.Функция gitcommit
не работает.Он генерирует следующую ошибку:
неустранимый: пути с -a не имеет смысла.
Предупреждающее сообщение:
В оболочке (cmd): 'd: & cd D: / Documents/ R / my_path & git commit -am 'commit from Rstudio' 'выполнение завершилось неудачно с кодом ошибки 128
Функция gitpush
работает, потому что если вы переключаетесь на терминал или git в Rstudio, вы можетепередайте изменения и затем успешно позвоните gitpush
.
Есть идеи, как решить эту проблему?
...
Примечание: У меня установлен Git bash, и я могу успешно использовать gitиз командного терминала Windows и Rstudio.Я также попробовал альтернативную стратегию, которая заключалась в том, чтобы R записал временный файл .bat
, а затем выполнил его, но эта стратегия также зависает на этапе фиксации.