使用Ruby git gem推送至GitHub遇分支错误,main分支配置求助
解决方案:修复ruby-git推送main分支的
src refspec master does not match any错误 问题根源
你的错误来自两个核心问题:
- 配置
remote.remote-name.push时,remote-name是占位符,你没替换成仓库实际的远程名(通常是origin),导致配置完全不生效。 g.push(branch: g.current_branch)的调用方式不符合ruby-git的API规范,命令解析出错后默认尝试推送master分支。
修复步骤
1. 修正远程推送规则配置
把占位符remote-name替换为真实的远程名(比如常用的origin),确保配置能被Git识别:
g.config('remote.origin.push', 'refs/heads/main:refs/heads/main')
2. 调整push方法的调用格式
ruby-git的push方法需要明确指定远程名和分支名,而不是用branch参数。修改推送代码为:
g.push('origin', g.current_branch)
3. 可选:设置分支上游(推荐)
如果想让本地main分支默认关联远程origin/main,后续推送无需重复指定参数,可以添加上游配置:
g.branch(g.current_branch).set_upstream('origin/' + g.current_branch)
修改后的完整代码
git_dir = '.' begin $stderr.puts "Opening with git_dir: #{git_dir}" g = Git.open("#{git_dir}", :raise => true) # 配置origin远程的推送规则 g.config('remote.origin.push', 'refs/heads/main:refs/heads/main') $stderr.puts "Current branch: #{g.current_branch}" if g.status.changed.any? g.add g.commit('Updated grade report') # 设置上游(可选,首次配置后后续推送可简化) g.branch(g.current_branch).set_upstream('origin/' + g.current_branch) # 正确调用push方法:指定远程和分支 g.push('origin', g.current_branch) else $stderr.puts "No changes" end rescue Git::GitExecuteError => e puts "Problem updating repo" puts "error: #{e.message}" end
验证说明
修改后,推送命令会正确执行git push origin main,不再错误地尝试推送master分支,彻底解决src refspec master does not match any的问题。
内容的提问来源于stack exchange,提问作者Zack
相关产品推荐
相关产品推荐

