将 GitPython 配置为 output/log 命令并处理输出
Configure GitPython to output/log commands and process output
我正在使用 GitPython 运行 针对回购的几个简单命令。基本上大部分只是:
repo = Repo(repo_dir)
repo.git.fetch()
result = repo.git.diff("origin", name_only=True)
repo.git.merge()
# ...
是否有某种方法可以将 GitPython 设置为 output/log 运行 命令,并显示它们产生的原始输出?
例如,上面的内容我希望是这样的:
$ git fetch
$ git diff --name-only origin
path/to/differing_file
path/to/another/differing_file
$ git merge
GitPython
使用模块 logging
。通过在您的代码前添加 logging.basicConfig(level=logging.DEBUG)
,它会打印类似
的日志
DEBUG:git.cmd:Popen(['git', 'fetch'], cwd=E:\path\foo, universal_newlines=False, shell=None)
如果您希望它按照您的预期打印格式化日志,您可以修改GitPython
的源代码。我正在使用 Python 2.7,我的 GitPython
安装在 C:\Python27\lib\site-packages\git
。你可以在REPL中运行git.__file__
找到你的安装目录。在文件 C:\Python27\lib\site-packages\git\cmd.py
中,您可以找到一个方法 def execute
。它调用 subprocess.Popen
到 运行 命令。您可以修改 Popen
之前的 log.debug
行,或者只在适当的行插入 print(' '.join(cmd))
。如果您使用的是 Python 3.3 或更新版本,您还可以参考 this answer 如何使用 subprocess
.
打印命令
您还可以:
pull = self.repo.git.pull('--rebase')
log.info(pull)
我正在使用 GitPython 运行 针对回购的几个简单命令。基本上大部分只是:
repo = Repo(repo_dir)
repo.git.fetch()
result = repo.git.diff("origin", name_only=True)
repo.git.merge()
# ...
是否有某种方法可以将 GitPython 设置为 output/log 运行 命令,并显示它们产生的原始输出?
例如,上面的内容我希望是这样的:
$ git fetch
$ git diff --name-only origin
path/to/differing_file
path/to/another/differing_file
$ git merge
GitPython
使用模块 logging
。通过在您的代码前添加 logging.basicConfig(level=logging.DEBUG)
,它会打印类似
DEBUG:git.cmd:Popen(['git', 'fetch'], cwd=E:\path\foo, universal_newlines=False, shell=None)
如果您希望它按照您的预期打印格式化日志,您可以修改GitPython
的源代码。我正在使用 Python 2.7,我的 GitPython
安装在 C:\Python27\lib\site-packages\git
。你可以在REPL中运行git.__file__
找到你的安装目录。在文件 C:\Python27\lib\site-packages\git\cmd.py
中,您可以找到一个方法 def execute
。它调用 subprocess.Popen
到 运行 命令。您可以修改 Popen
之前的 log.debug
行,或者只在适当的行插入 print(' '.join(cmd))
。如果您使用的是 Python 3.3 或更新版本,您还可以参考 this answer 如何使用 subprocess
.
您还可以:
pull = self.repo.git.pull('--rebase')
log.info(pull)