当我尝试使用git
gem进行推送时,我收到以下错误:src refspec master does not match any
。我的存储库使用main
而不是master
;但是(假设这就是问题所在),我不知道如何更改上游分支。
详情:
我正在编写一个Ruby脚本,用于修改一组现有的、已经克隆的存储库,并推送更改。
下面是一个最小的例子:
git_dir = '.'
begin
$stderr.puts "Opening with git_dir: #{git_dir}"
g = Git.open("#{git_dir}", :raise => true)
g.config('remote.remote-name.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.push(branch: g.current_branch)
else
$stderr.puts "No changes"
end
rescue Git::GitExecuteError => e
puts "Problem updating repo"
puts "error: #{e.message}"
end
我在修改了一个已经存在的克隆的git repo中的文件后运行了这个程序。当我这样做时,它失败了,并显示以下错误:
Problem updating repo
error: git '--git-dir=testGitRepo' '-c' 'core.quotePath=true' '-c' 'color.ui=false' push '{:branch=>"main"}' 'master' 2>&1:error: src refspec master does not match any
error: failed to push some refs to '{:branch=>"main"}'
我怀疑此错误消息的重要部分是push '{:branch=>"main"}' 'master'
master
仍然出现的事实表明我需要做一些其他的事情来告诉push
命令我想把本地的main
推送到origin main
;但我不知道该怎么做。push
的文档是这样说的:
pushes changes to a remote repository - easiest if this is a cloned repository, otherwise you may have to run something like this first to setup the push parameters:
@git.config('remote.remote-name.push', 'refs/heads/master:refs/heads/master')
但是我不知道如何调用config
来将上游分支设置为main(我尝试了g.config('remote.remote-name.push', 'refs/heads/main:refs/heads/main')
,它似乎没有任何效果。当然,我不完全理解这个命令应该做什么)。
1条答案
按热度按时间eyh26e7m1#
push
将远程名称和分支名称作为单独的参数:https://rubydoc.info/gems/git/Git/Base#push-instance_method
使用以下方法应该可以: