我试图使用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。
你认为我做错了吗?
答案 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())