web-dev-qa-db-ja.com

GitPythonを介したGitプッシュ

このコードはPython( "import git"を使用)にあります。

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

今、私はこのコミットをプッシュしたいと思います。私は多くのことを試みましたが、成功しませんでした。 Pythonコマンドは、次のBashコマンドに似ています:

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

以下は、git addgit commit、次にgit Pushへのコードで、 GitPython を使用しています。

インストール GitPython を使用して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')    

git_Push()
4
BlackBeard

以下を試すことができます。問題が解決する可能性があります...

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

これは、次のようにインデックス( ここに少し文書化 )を使用することで実現できます。


from git import Repo
repo = Repo('path/to/git/repo')  # if repo is CWD just do '.'

repo.index.add(['bla.txt'])
repo.index.commit('my commit description')
Origin = repo.remote('Origin')
Origin.Push()
1
Marc

私も同じ問題を抱えていました。私はそれを解決しました

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

gitpythonhttp://gitpython.readthedocs.io/en/stable/tutorial.html のドキュメントページをご覧ください。 Origin = repo.create_remote('Origin', repo.remotes.Origin.url)のようなものでリモートリポジトリを定義する必要があります

次にOrigin.pull()

セクションの「リモコンの処理」のドキュメントで例全体を見てみます

これはドキュメントの完全な例です

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
0
Kabard