【发布时间】:2019-08-21 06:42:30
【问题描述】:
我正在尝试从 R 脚本中自动化一些基本的 git 操作。我在 Windows 操作系统上使用 Rstudio。例如,如果您希望在脚本完成某些自动化任务时更新 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)
}
我的 gitstatus、gitadd 和 gitpush 函数有效。 gitcommit 函数不起作用。它会产生以下错误:
致命:带 -a 的路径没有意义。
警告信息:
在 shell(cmd) 中:'d: & cd D:/Documents/R/my_path & git commit -am 'commit from Rstudio'' 执行失败,错误代码为 128
gitpush 函数之所以有效,是因为如果您切换到终端或 Rstudio 中的 git,您可以提交更改,然后成功调用 gitpush。
关于如何解决此问题的任何想法?
...
注意: 我已经安装了 Git bash,并且可以从 Windows 命令终端和 Rstudio 成功使用 git。我还尝试了另一种策略,即让 R 编写一个临时的 .bat 文件,然后执行它,但是这个策略也会在提交步骤中挂起。
【问题讨论】:
-
CRAN (!!) 上的几个包直接与 git API 接口,因此您不需要 shell -- git2r 就是其中之一。如果命令行程序
git可用,我的drat 包可以使用它或system()命令。您可以检查(相当简单的)函数的来源at the git source repo of drat。
标签: r git shell github rstudio