如何使用Ruby的“git”gem推送回GitHub

xkftehaa  于 2023-01-24  发布在  Git
关注(0)|答案(1)|浏览(123)

当我尝试使用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'),它似乎没有任何效果。当然,我不完全理解这个命令应该做什么)。

eyh26e7m

eyh26e7m1#

push将远程名称和分支名称作为单独的参数:

#push(remote = 'origin', branch = 'master', opts = {})

https://rubydoc.info/gems/git/Git/Base#push-instance_method
使用以下方法应该可以:

g.push('origin', 'main')

相关问题