GitPython: git push — установить вверх по течению

Я использую GitPython для клонирования основной ветки и проверки функциональной ветки, я делаю свои локальные обновления, фиксирую и отправляю обратно в git. Фрагмент кода выглядит следующим образом:

Примечание. Имя моей ветки — feature/pythontest.

def git_clone():
    repo = Repo.clone_from(<git-repo>, <local-repo>)
    repo.git.checkout("-b", "feature/pythontest")
    # I have done with file updates 
    repo.git.add(update=True)
    repo.index.commit("commit")
    origin = repo.remote(name="origin")
    origin.push()

Когда я запускаю скрипт, я получаю следующую ошибку:

To push the current branch and set the remote as upstream, use
git push --set-upstream origin feature/pythontest

person Rahul gone mad    schedule 20.07.2020    source источник


Ответы (2)


origin.push() не знает, как сопоставить локальную ветку с веткой в ​​ориджине, поэтому нужно указать ее через refspec:

origin.push(refspec="master:origin")

master — это ваша локальная ветка, а origin — цель.

Подробнее см. здесь в определении выборки.

person Nick Gkloumpos    schedule 26.03.2021

Для отправки новых веток вам нужно запустить git push --set-upstream origin branch_name, вы можете прочитать --set-upstream в документации git https://git-scm.com/docs/git-push Это должно работать для gitpython:

def git_clone():
    branch_name = "feature/pythontest"
    repo = Repo.clone_from(<git-repo>, <local-repo>)
    repo.git.checkout("-b", branch_name)
    repo.git.add(repo.working_dir)
    commit_output = repo.git.commit(m="Commit msg")
    push_output = repo.git.push('--set-upstream', repo.remote().name, branch_name)
person Nicky Mirfallah    schedule 23.07.2021