使用git-rebase命令将Vim警告I/O重定向到/从终端重定向



尝试使用rubysystem command从10个伪提交中rebase HEAD~5 and squash 5 commits together into 1。使用vim作为默认编辑器并得到此错误:

# ERROR
# Vim  warning: output does not redirect on terminal
# Vim  warning: input does not come from terminal

尝试做:

# DESIRED
# 1. open VIM terminal window
# 2. manualy select files for squashing
#!/usr/bin/env ruby
# create dummy files
1.upto(10) { |i| `touch  "file#{i}.txt"`  }
files = Dir.glob('*.txt')
# initialize repo
`git init`
# commit each file separately
files.each do |f|
`git add #{f}`
`git commit -m "add #{f} to repo"`
end
# rebasing
`git rebase -i HEAD~5`
# error 

有什么想法可以让它发挥作用以及需要改进的地方吗?

上面代码的问题是,您试图使用backticks运算符从ruby运行外部命令(在本例中,通过git的内置rebase命令运行vim)。

相反,请尝试为此使用system命令
参考:http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-system

因此,更正后的代码是:

#!/usr/bin/env ruby
# DESIRED
# 1. open VIM terminal window
# 2. manualy select files for squashing
# create dummy files
1.upto(10) { |i| `touch  "file#{i}.txt"`  }
files = Dir.glob('*.txt')
# initialize repo
system "git init"
# commit each file separately
files.each do |f|
system "git add #{f}"
system "git commit -m 'add #{f} to repo'"
end
# rebasing
system "git rebase -i HEAD~5"
# error 

最新更新