2012-01-09 61 views
2

我想寫一個簡單的ruby腳本來更新我的GIT工作目錄。該腳本產生的錯誤,我不明白爲什麼。我有以下功能(我知道可以更簡單地寫,但沒有我嘗試似乎工作)基本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]) 

當我運行該腳本,我看到出現以下錯誤:

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存儲庫的正確路徑。我可以手動將它的值粘貼到shell中,並且git命令可以正常工作。

這裏可能會發生什麼?

感謝您的幫助

+0

爲什麼不直接使用紅寶石混帳? https://github.com/schacon/ruby-git – coreyward 2012-01-09 23:40:15

回答

3

不是一個確切的回答你的問題,但你可以通過--git-dir--work-tree git命令告訴它在哪裏操作,這可能會幫助你。

我猜想這是不是因爲它的墊底裸git倉庫,這樣就意味着git的dir是在.git

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

這似乎解決了我的問題。謝謝您的幫助。 – 2012-01-10 02:17:39

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'有什麼意義? – 2012-01-09 23:37:04

+0

我沒有任何想法可以使用這個腳本,但是@darren在他的例子的2&5行中使用了一些難看的方法來回退舊路徑。我認爲你是對的,這是沒有必要的。 – 2012-01-09 23:43:05

3

上有系統命令CHDIR選項 - 你可能只是這樣做:

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

不錯,我不知道第二個參數。謝謝。 – 2012-01-10 02:16:57

相關問題