2016-08-10 186 views
0

我正在尝试做一个gitlab的备份恢复,它的工作类型,但命令行总是说,存储库的恢复失败。我想我在代码中发现了条件语句,它负责[失败]语句。有人知道这是做什么,或知道我应该去找出我的错误的方向?这段Ruby代码是什么意思?

if Kernel.system("git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1") 
puts "[DONE]".green                                        
      else                                             
      puts "[FAILED]".red                                        
      end 

回答

1

Kernel.system调用给定的shell命令。当它失败时,返回一个false值。

就你而言,这意味着git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1失败。

当您在命令行上手动执行此命令时,您可以检查它为什么会失败,而无需使用> /dev/null 2>&1

到命令

if Kernel.system(pp("git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1"))

+0

如果我检查/ dev/null 2>&1。我得到的输出:-bash:/ dev/null:权限被拒绝我试图改变dev/null和repo的chmod和chown。但我仍然得到了持久性拒绝信息。我究竟做错了什么? –

+0

您的主机是裸机还是虚拟机或容器?看起来您的用户对/ dev/null没有写入权限。你使用哪个操作系统? – slowjack2k

+0

我使用一个虚拟机(在一个盒子中的壳) –

1

从之前在调试打印得到的命令就可以了docs

系统返回true如果命令给出零个退出状态,false非零退出状态。如果命令执行失败,则返回nil$?有错误状态。

这就是说:落入不断在衰竭状态意味着系统命令返回falsenil。你可能想检查$?的原因:

command = Kernel.system("git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1") 
if command 
    puts "[DONE]".green 
else 
    puts "[FAILED]".red 
    puts "Reason:" 
    puts $? 
end 
+0

如果我这样做,我得到输出:pid 7169(每个pid有一个不同的数字)退出128(所有退出都有相同的数字) –

+0

当你得到错误代码128 [这个问题和答案](https:// stackoverflow .com/questions/9617336/how-to-resolve-git-did-not-exit-cleanly-exit-code-128-error-on-tortoisegit)可能会对你感兴趣。 – spickermann