基本的ruby脚本没有按预期工作

时间:2012-01-09 23:17:50

标签: ruby git shell

我正在尝试编写一个简单的ruby脚本来更新我的GIT工作目录。该脚本产生错误,我无法弄清楚原因。我有以下功能(我知道可以写得更简单,但我尝试的任何东西似乎都没有用)

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命令可以正常工作。

这可能会发生什么?

感谢您的帮助

4 个答案:

答案 0 :(得分:3)

系统命令上有一个chdir选项 - 您可以这样做:

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

答案 1 :(得分:3)

不是您问题的准确答案,但您可以将--git-dir--work-tree传递给git命令,告诉它在哪里操作,这可能对您有所帮助。

我认为这不是一个简单的git存储库,因为你对它进行了重新定义,这意味着git dir位于.git

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

答案 2 :(得分:0)

不是存储实际目录,而是使用带有块的Dir.chdir进行更改并将其切换回来:

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

您的错误看起来像Git问题,而不是Ruby问题。看来你在错误的目录中。

您可以使用Dir.pwd检查工作目录。

答案 3 :(得分:-1)

我解决问题的方法:

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