2012-01-09 6 views
2

GITの作業ディレクトリを更新するための単純なrubyスクリプトを作成しようとしています。スクリプトがエラーを生成していると私は理由を把握することはできません。私は、次の機能を持っている(私はそれがより簡単に書き込むことができます知っているが、私がしようと何も動いていないようにみえ)基本的なrubyスクリプトが期待どおりに動作しない

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

と私は見スクリプトを実行すると、私はそう

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

のようにそれを呼び出します次のエラー:[:名]私のGITリポジトリへの正しいパスです

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

私はレポことを確認しました。私は手動でその値をシェルに貼り付けることができ、gitコマンドは正常に動作します。

ここで何が起こっている可能性がありますか?助けのための

おかげ

+0

ちょうどルビーのgitを使用しないのはなぜ? https://github.com/schacon/ruby-git – coreyward

答えて

3

ないあなたの質問に正確な答えをしていますが、することができます--git-dir--work-treeをgitコマンドに渡して、操作する場所を指示します。

それはGitのdirが.gitであることを意味して私は、これはその上にあなたのリベース以来、裸の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 

あなたのエラーは、Gitの問題のように見えませんRubyの問題。あなたは間違ったディレクトリにいるようです。

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

いいです、私はその第二引数について知りませんでした。ありがとう。 –