Use GitPython to Checkout a new branch and push to remote

11,537

I've done something like creating a txt in a remote branch from newly created branch and commit, push to remote. Here's my code

import git
import datetime
import os
from time import *
from os import path
from git import Repo

def commit_files():
    if repo != None:
        new_branch = 'your_new_branch'
        current = repo.create_head(new_branch)
        current.checkout()
        master = self.repo.heads.master
        repo.git.pull('origin', master)
        #creating file
        dtime = strftime('%d-%m-%Y %H:%M:%S', localtime())
        with open(self.local_repo_path + path.sep + 'lastCommit' + '.txt', 'w') as f:
            f.write(str(dtime))
        if not path.exists(self.local_repo_path):
            os.makedirs(self.local_repo_path)
        print('file created---------------------')

        if repo.index.diff(None) or repo.untracked_files:

            repo.git.add(A=True)
            repo.git.commit(m='msg')
            repo.git.push('--set-upstream', 'origin', current)
            print('git push')
        else:
            print('no changes')
Share:
11,537
etlsh
Author by

etlsh

Updated on June 08, 2022

Comments

  • etlsh
    etlsh about 2 years

    Given a repo from GitPython, how can I create a new local branch, add some files, and push it to remote using GitPython?

    To create a repo:

    from git import *
    
    curr_dir = os.path.dirname(os.path.realpath(__file__))
    repo = Repo(curr_dir)
    

    For now, I'm just using subprocess:

    def publish_changes_to_git(commit_msg):
        curr_time = time.time()
        ts = datetime.datetime.fromtimestamp(curr_time).strftime('%Y-%m-%d-%H-%M-%S')
        branch_name = "auto-commit-{ts}".format(ts=ts)
        subprocess.check_output(["git", "checkout", "-b", branch_name])
        subprocess.check_output(["git", "add", SOME_PATH])
        subprocess.check_output(
            ["git", "commit", "-m", "auto-git-commit: {msg}".format(msg=commit_msg)])
    
  • etlsh
    etlsh about 8 years
    thanks but using the git module to exactly command is just the same as sub process. ill go deeper into pygit2 but the module seems like he lacks the things i need ( or its very difficult to achieve them)