web-dev-qa-db-fra.com

Git Push via GitPython

J'ai ce code en Python (en utilisant "import git"):

repo = git.Repo("my_repository")
repo.git.add("bla.txt")
repo.git.commit("my commit description")

Maintenant, je veux pousser ce commit. J'ai essayé beaucoup sans succès. La commande Python devrait ressembler à cette commande Bash:

git Push Origin HEAD:refs/for/master
5
amigo

Vous pouvez essayer ce qui suit. Il se peut que votre problème soit résolu ...

repo.git.pull('Origin', new_branch)
repo.git.Push('Origin', new_branch)
2
Shahaji

Voici le code pour git add, git commit et ensuite git Push en utilisant GitPython

Installez GitPython en utilisant pip install gitpython.

from git import Repo

PATH_OF_GIT_REPO = r'path\to\your\project\folder\.git'  # make sure .git folder is properly configured
COMMIT_MESSAGE = 'comment from python script'

def git_Push():
    try:
        repo = Repo(PATH_OF_GIT_REPO)
        repo.git.add(update=True)
        repo.index.commit(COMMIT_MESSAGE)
        Origin = repo.remote(name='Origin')
        Origin.Push()
    except:
        print('Some error occured while pushing the code')
    finally:
        print('Code Push from script succeeded')       

git_Push()
1
BlackBeard

J'ai eu le même problème. Je l'ai résolu en appelant

repo.git.Push("Origin", "HEAD:refs/for/master")
0
imolit

En regardant la page de documentation de gitpythonhttp://gitpython.readthedocs.io/fr/stable/tutorial.html . Vous devez définir un dépôt distant avec quelque chose comme Origin = repo.create_remote('Origin', repo.remotes.Origin.url)

alors Origin.pull()

Je regarderais tout l'exemple dans la documentation dans la section "Manipulation des télécommandes"

Voici l'exemple complet de la documentation

empty_repo = git.Repo.init(osp.join(rw_dir, 'empty'))
Origin = empty_repo.create_remote('Origin', repo.remotes.Origin.url)
assert Origin.exists()
assert Origin == empty_repo.remotes.Origin == empty_repo.remotes['Origin']
Origin.fetch()                  # assure we actually have data. fetch() returns useful information
# Setup a local tracking branch of a remote branch
empty_repo.create_head('master', Origin.refs.master)  # create local branch "master" from remote "master"
empty_repo.heads.master.set_tracking_branch(Origin.refs.master)  # set local "master" to track remote "master
empty_repo.heads.master.checkout()  # checkout local "master" to working tree
# Three above commands in one:
empty_repo.create_head('master', Origin.refs.master).set_tracking_branch(Origin.refs.master).checkout()
# rename remotes
Origin.rename('new_Origin')
# Push and pull behaves similarly to `git Push|pull`
Origin.pull()
Origin.Push()
# assert not empty_repo.delete_remote(Origin).exists()     # create and delete remotes