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
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)
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()
J'ai eu le même problème. Je l'ai résolu en appelant
repo.git.Push("Origin", "HEAD:refs/for/master")
En regardant la page de documentation de gitpython
http://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