2016-06-15 2 views
1

Repo (GitPython) - 새 로컬 분기를 만들고 일부 파일을 추가 한 다음 GitPython을 사용하여 원격에 푸시 할 수 있습니까?GitPython을 사용하여 새 분기를 체크 아웃하고 리모컨으로 푸시

REPO 예 : 지금 난 그냥 서브 프로세스를 사용하고 있습니다위한

from git import * 

curr_dir = os.path.dirname(os.path.realpath(__file__)) 
repo = Repo(curr_dir) 

:

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)]) 

누군가가 내가 듣고 드리겠습니다 다른 자식 - 파이썬 라이브러리가있는 경우.

답변

0

gitypython은 git에 대한 하위 및 레벨 액세스를 제공하지만 git 명령을 호출 할 수 있습니다 (http://gitpython.readthedocs.io/en/stable/reference.html#module-git.cmd 참조).

높은 수준의 액세스를 위해서는 http://www.pygit2.org/ 대신 http://www.pygit2.org/을 사용하는 것이 좋습니다. 여기에 몇 가지 예가 있습니다 http://www.pygit2.org/recipes.html

+0

감사하지만 정확히 명령에 자식 모듈을 사용하여 내 코드입니다. 아픈 사람은 파이크 2로 깊숙이 간다.하지만 그가 필요로하는 것들이 부족한 것 같아서 (또는 그것들을 얻기가 매우 어렵다) – etlsh

0

새로 만든 분기에서 원격 지점에 txt를 만들고 커밋하고 원격으로 푸시하는 것과 같은 작업을했습니다. 여기에 단지 하위 프로세스와 동일

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')