2012-01-09 2 views
2

내 GIT 작업 디렉토리를 업데이트하기위한 간단한 루비 스크립트를 작성하려고합니다. 스크립트에서 오류가 발생하고 이유를 파악할 수 없습니다. 나는 (I가 더 간단하게 기록 할 수있어,하지만 난 시도 아무것도 작동하는 것 같다 없음) 다음과 같은 기능을 가지고기본 루비 스크립트가 예상대로 작동하지 않습니다.

def performCommandInDir(command, dir) 
    old_dir = Dir.pwd 
    Dir.chdir(dir) 
    system(command) 
    Dir.chdir(old_dir) 
end 

나는 내가 보는 스크립트를 실행하면 나는 그렇게

performCommandInDir("git svn rebase", repo[:name]) 

과 같이 호출 다음 오류 :

fatal: /usr/libexec/git-core/git-rebase cannot be used without a working tree. 
rebase refs/remotes/git-svn: command returned error: 1 

나는 repo [: name]이 (는) 내 GIT 저장소에 대한 올바른 경로임을 확인했습니다. 그 값을 쉘에 수동으로 붙여 넣을 수 있고 git 명령이 정상적으로 작동합니다.

무슨 일 할 수 있을까? 도움을

감사

+0

가 왜 그냥 루비 - 자식을 사용하는이 자식 디렉토리가 .git에 의미하므로

나는이 그것에 당신의 리베이스부터 베어 자식 저장소없는 겠지? https://github.com/schacon/ruby-git – coreyward

답변

3

하지 질문에 대한 정확한 대답,하지만 당신은 할 수 있습니다 --git-dir--work-tree을 전달하여 git 명령을 사용하여 작동 위치를 알려면 도움이 될 수 있습니다.

system("git --git-dir=#{repo[:name]}/.git --work-tree=#{repo[:name]} svn rebase") 
+0

이것은 내 문제를 해결하는 것 같았습니다. 도와 주셔서 감사합니다. –

0

대신 실제 디렉토리를 저장하는, 그것을 변경하고 블록 Dir.chdir를 사용하여 다시 전환 :

Dir.chdir(dir) do 
    # your actions 
end 
# back in the original directory 

귀하의 오류, 힘내 문제처럼 보인다 없습니다 루비 문제. 당신이 잘못된 디렉토리에있는 것 같습니다.

Dir.pwd을 사용하여 작업 디렉토리를 확인할 수 있습니다.

-1

문제 해결에가는 길 :

def performCommandInDir(command, dir) 
    system("cd #{dir} && #{command}") 
end 
+0

'system' 호출에서'cd # {dir}'을 할 것이라면'Dir.chdir'을 사용하는 것이 무엇입니까? –

+0

이 스크립트를 사용할 생각이 없지만 @darren은 그의 예에서 2 행과 5 행의 이전 경로로 되돌아 가야하는 추악한 방법을 사용합니다. 나는 네가 옳다고 생각하고 불필요하다. –

3

시스템 명령에 CHDIR 옵션이 있습니다 - 당신이 단지 수 :

def performCommandInDir(command, dir) 
    system(command, :chdir => dir) 
end 
+0

좋은, 나는 두 번째 논쟁에 대해 몰랐다. 감사. –

관련 문제