2016-09-29 3 views
2

gitpython 모듈을 사용하여 새로운 git repo를 업스트림에 넣으려고합니다. 아래는 내가 뭘 단계는 푸시를 (실행하는 동안) 오류를 128gitpython은 'git push --porcelain origin'을 종료 코드 128과 함께 반환합니다.

# Initialize a local git repo 
init_repo = Repo.init(gitlocalrepodir+"%s" %(gitinitrepo)) 

# Add a file to this new local git repo 
init_repo.index.add([filename]) 

# Initial commit 
init_repo.index.commit('Initial Commit - %s' %(timestr)) 

# Create remote 
init_repo.create_remote('origin', giturl+gitinitrepo+'.git') 

# Push upstream (Origin) 
init_repo.remotes.origin.push() 

를 얻을 gitpython에서 예외가 발생합니다 : GitHub의에

'git push --porcelain origin' returned with exit code 128 

액세스가 SSH를 통해입니다.

내가 잘못하고있는 것을보고 있습니까?

답변

0

git 명령의 출력을 캡처해야합니다.

을 감안할 때이 진행 클래스 :이 함께 실행하면

progress = Progress() 

try: 
    for info in remote.push(progress=progress): 
     info_callback(info) 

    for line in progress.allDroppedLines(): 
     log.info(line) 

except GitCommandError: 
    for line in progress.allErrorLines(): 
     log.error(line) 

    raise 

는 여전히 128 오류가 발생합니다,하지만 당신은 또한 출력을해야합니다 :

class Progress(git.RemoteProgress): 
    def __init__(self, progress_call_back): 
     self.progress_call_back = progress_call_back 
     super().__init__() 

     self.__all_dropped_lines = [] 

    def update(self, op_code, cur_count, max_count=None, message=''): 
     pass 

    def line_dropped(self, line): 
     if line.startswith('POST git-upload-pack'): 
      return 

     self.__all_dropped_lines.append(line) 

    def allErrorLines(self): 
     return self.error_lines() + self.__all_dropped_lines 

    def allDroppedLines(self): 
     return self.__all_dropped_lines 

당신은 다음과 같은 코드를 작성할 수 있습니다 문제를 설명하는 git.