gitpython返回' git push --porcelain origin'返回退出代码128

时间:2016-09-29 16:25:43

标签: python gitpython

我试图使用gitpython模块向上游推送一个新的git repo。以下是我正在执行的步骤并收到错误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()

执行push()时,gitpython会抛出异常:

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

通过SSH访问github。

你认为我做错了吗?

2 个答案:

答案 0 :(得分:0)

您需要捕获git命令的输出。

鉴于此Progress类:

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

您可以编写如下代码:

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错误,但你也会有输出og git来解释这个问题。

答案 1 :(得分:0)

我使用类似的方法对其进行了追踪:

class ProgressPrinter(git.RemoteProgress):

    def line_dropped(self, line):
        print("line dropped : " + str(line))

然后您可以调用您的代码:

init_repo.remotes.origin.push(progress=ProgressPrinter())