我正在尝试对gitlab进行备份还原,但这种方法很有效,但命令行总是说存储库的还原失败了。我想我在代码中找到了负责[failed]语句的条件语句。有人知道这是在做什么或知道我应该去找我的错误的方向?
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
答案 0 :(得分: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"))
答案 1 :(得分:1)
来自docs:
如果命令为零退出状态,则系统返回
true
,非零退出状态为false
。如果命令执行失败,则返回nil
。$?
中提供了错误状态。
这就是说:不断陷入失败状态意味着系统命令返回false
或nil
。您可能需要检查$?
,原因如下:
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