在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 

numpysetup.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 
    Interesting Posts