7

I have to clone a set of projects from one repository and push it then to a remote repository automatically. Therefore i'm using python and the specific module GitPython. Until now i can clone the project with gitpython like this:

def main():
  Repo.clone_from(cloneUrl, localRepoPath)
  # Missing: Push the cloned repo to a remote repo.

How can i use GitPython to push the cloned repo to a remote repo?

Oni1
  • 1,445
  • 2
  • 19
  • 39

2 Answers2

8

it's all in the documentation:

repo = Repo.clone_from(cloneUrl, localRepopath)
remote = repo.create_remote(remote_name, url=another_url)
remote.push(refspec='{}:{}'.format(local_branch, remote_branch))

see also the push reference API. You can avoid the refspec setting if you set a tracking branch for the remote you want to push to.

zmo
  • 24,463
  • 4
  • 54
  • 90
  • This is similar to `subprocess.check_call(['git', 'remote', 'set-url', 'remote', url]`. You can leave out the `url=`, no kw arg needed. – Timo Jul 18 '21 at 15:34
  • 2
    This is also similar to opening and writing the `.git/config` file and write the stuff within it. Here the OP asks specifically about GitPython ☺. Though, good point for the `url=`, even though the documentation itself uses the keyword in several places. – zmo Jul 20 '21 at 08:49
5

It should work like this

r = Repo.clone_from(cloneUrl, localRepoPath)
r.remotes.origin.push()

provided that a tracking branch was setup already.

Otherwise you would set a refspec:

r.remotes.origin.push(refspec='master:master')
Byron
  • 3,908
  • 3
  • 26
  • 35