获取当前的git哈希在Python脚本(Get the current git hash in a

2019-07-20 05:57发布

我想包括在Python脚本的输出的电流的git散列(如生成该输出的代码的版本号 )。

我怎样才能访问当前的git散在我的Python脚本?

Answer 1:

git describe命令创建代码的人像样的“版本号”的一个好办法。 从文档中的例子:

随着像git.git当前树,我得到:

 [torvalds@g5 git]$ git describe parent v1.0.4-14-g2414721 

即我的“父母”分支现任掌门基于v1.0.4,但由于它具有最重要的是几个提交,描述增加了额外的提交(“14”)的提交数量和缩写对象名称本身末(“2414721”)。

从内Python中,你可以做类似如下:

import subprocess
label = subprocess.check_output(["git", "describe"]).strip()


Answer 2:

无需破解各地从获取数据git命令自己。 GitPython是一个非常好的办法做到这一点和很多其他的git东西。 它甚至有用于Windows的“尽力而为”的支持。

之后pip install gitpython你可以做

import git
repo = git.Repo(search_parent_directories=True)
sha = repo.head.object.hexsha


Answer 3:

这篇文章包含命令, 格雷格的回答包含子命令。

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'])


Answer 4:

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


Answer 5:

如果子进程是不可移植的,你不希望安装一个软件包做一些这个简单,你也可以做到这一点。

import pathlib

def get_git_revision(base_path):
    git_dir = pathlib.Path(base_path) / '.git'
    with (git_dir / 'HEAD').open('r') as head:
        ref = head.readline().split(' ')[-1].strip()

    with (git_dir / ref).open('r') as git_hash:
        return git_hash.readline().strip()

我只测试了这个在我的回购协议,但它似乎很consistantly工作。



文章来源: Get the current git hash in a Python script