2013-12-08 2 views
1

ruby, system command을 사용하여 10 개의 커밋 된 커밋에서 rebase HEAD~5 and squash 5 commits together into 1으로 시도하려고 시도합니다. 기본 편집기로 vim를 사용하여이 오류 점점 : 일을하려고git rebase 명령을 사용하여 Vim 경고 I/O를 터미널로 리디렉션

# 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 

모든 아이디어를 어떻게 작동하게하는 무엇을 개선하기 위해?

답변

1

위 코드의 문제는 backticks 연산자를 사용하여 ruby에서 외부 명령 (이 경우 git의 inbuilt rebase 명령을 통해)을 실행하려고한다는 것입니다.

대신이 목적으로 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