在ruby脚本中,如何让git打开它的消息编辑器

时间:2013-11-09 07:08:37

标签: ruby git shell

我目前正在开发一个命令行ruby gem,它可以自动化https://gist.github.com/jbenet/ee6c9ac48068889b0912中讨论的“rebase + no-ff merge”工作流程。您可以在https://github.com/gsmendoza/git_pretty_accept/tree/git_pretty_accept找到此gem的WIP代码。宝石会做这样的事情:

git co master
git pull
git co pull_request
git rebase master
git co master
git merge --edit --no-ff pull_request
git push
git branch -d pull_request
git push origin:pull_request

当我尝试通过ruby运行这些git命令时,git merge --edit --no-ff pull_request不会像我希望的那样打开git commit消息编辑器。相反,我认为git只是从编辑器收到一个空白的合并消息,而ruby继续使用脚本的其余部分。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

请阅读your code

`git merge --no-ff --message "#{merge_message}" #{branch}`

在Ruby中,这种反引号语法重定向STDIN和STDOUT。

只需尝试一下:

system("git merge --edit --no-ff #{branch}")

system函数只是分叉进程并等待子进程完成,而不触及STDIN / STDOUT。我测试过它的确有效。