在Python脚本中获取当前的git散列
我想将当前的git散列包含在Python脚本的输出中(作为生成该输出的代码的版本号 )。
我怎样才能访问我的Python脚本中的当前git散列?
git describe
命令是创build代码的人性化“版本号”的好方法。 从文档中的示例:
有了像git.git当前树,我得到:
[torvalds@g5 git]$ git describe parent v1.0.4-14-g2414721
即我的“父”分支的当前头是基于v1.0.4,但是由于它有几个提交,describe已经增加了提交的数量(“14”)和提交的缩写对象名称本身(“2414721”)最后。
在Python中,你可以做如下的事情:
import subprocess label = subprocess.check_output(["git", "describe"]).strip()
这个post包含命令 ,Greg的答案包含了subprocess命令。
import subprocess def get_git_revision_hash(): return subprocess.check_output(['git', 'rev-parse', 'HEAD']) def get_git_revision_short_hash(): return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'])
不需要自己从git
命令中获取数据。 GitPython是一个非常好的方法来做到这一点,还有很多其他的git
东西。 它甚至对Windows有“尽力而为”的支持。
pip install gitpython
你可以做
repo = git.Repo(search_parent_directories=True) sha = repo.head.object.hexsha
numpy
在setup.py
有一个漂亮的多平台例程 :
import os import subprocess # Return the git revision as a string def git_version(): def _minimal_ext_cmd(cmd): # construct minimal environment env = {} for k in ['SYSTEMROOT', 'PATH']: v = os.environ.get(k) if v is not None: env[k] = v # LANGUAGE is used on win32 env['LANGUAGE'] = 'C' env['LANG'] = 'C' env['LC_ALL'] = 'C' out = subprocess.Popen(cmd, stdout = subprocess.PIPE, env=env).communicate()[0] return out try: out = _minimal_ext_cmd(['git', 'rev-parse', 'HEAD']) GIT_REVISION = out.strip().decode('ascii') except OSError: GIT_REVISION = "Unknown" return GIT_REVISION