Как использовать гем Ruby «git», чтобы вернуться на GitHub

Когда я пытаюсь использовать драгоценный камень git для нажатия, я получаю эту ошибку: src refspec master does not match any. В моем репо используется main вместо master; но (при условии, что это проблема), я не вижу, как изменить восходящую ветвь.

Подробности:

Я пишу сценарий Ruby, который изменяет набор существующих, уже клонированных репозиториев и отправляет изменения. Я использую гем git (https://github.com/ruby-git/ruby-git)

Вот минимальный пример:

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. Когда я это делаю, он терпит неудачу с этой ошибкой:

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 так, чтобы восходящая ветвь стала основной. (Я попробовал g.config('remote.remote-name.push', 'refs/heads/main:refs/heads/main'), и это не дало никакого эффекта. Конечно, я не совсем понимаю, что должна делать эта команда.)

Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

push принимает имена удаленного сервера и ветки как отдельные аргументы:

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

https://rubydoc.info/gems/git/Git/Base#push-instance_method

Использование следующего должно работать:

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

Фу. Я неправильно читал документацию. Каким-то образом мне пришло в голову, что remote и branch являются параметрами ключевого слова, а не позиционными.

Zack 22.01.2023 03:50

Другие вопросы по теме