我正在尝试编写一个简单的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命令可以正常工作。
这可能会发生什么?
感谢您的帮助
答案 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