Geçerli git hash dosyasını bir Python komut dosyasının çıktısına eklemek istiyorum (bu çıktıyı oluşturan kodun sürüm numarası).Geçerli git hash dosyasını bir Python betiğinde alın
Python betiğimde geçerli git hash dosyasına nasıl erişebilirim?
Geçerli git hash dosyasını bir Python komut dosyasının çıktısına eklemek istiyorum (bu çıktıyı oluşturan kodun sürüm numarası).Geçerli git hash dosyasını bir Python betiğinde alın
Python betiğimde geçerli git hash dosyasına nasıl erişebilirim?
git describe
komutu, kodun insan tarafından sunulabilir "sürüm numarası" oluşturmanın iyi bir yoludur. belgelerinde örneklerden: Python içinden
With something like git.git current tree, I get:
[[email protected] git]$ git describe parent v1.0.4-14-g2414721
i.e. the current head of my "parent" branch is based on v1.0.4, but since it has a few commits on top of that, describe has added the number of additional commits ("14") and an abbreviated object name for the commit itself ("2414721") at the end.
, aşağıdaki gibi bir şey yapabilirsiniz:
import subprocess
label = subprocess.check_output(["git", "describe"]).strip()
Tamam ama python betiğine – Victor
içinden nasıl erişebilirim Bunun için bir örnek ekleyeceğim. –
Bu, kodun git repo'su olmadan çalıştırıldığı taktirde, sürüm yazdırma kodunun kırılmayacağı dezavantajına sahiptir. Örneğin, üretimde. :) – JosefAssad
This post contains the command, Greg'in cevabı alt işlemi komut içerir.
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'])
Bunu satır sonu olmadan almak için bir şerit() ekleyin :) – grasshopper
Bunu belirli bir yoldan git repo için nasıl çalıştırırsınız? – pkamb
@pkamb os.chdir'i git repo yoluna gitmek için os.chdir'i kullanın. –
numpy
onun setup.py
güzel görünümlü multi-platform routine sahiptir:
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
Bunu beğendim, oldukça temiz ve harici kütüphane yok – 13aal
git
komutu kendiniz veri alma etrafında kesmek gerek yok. GitPython, bunu ve diğer git
öğelerini kullanmanın çok güzel bir yoludur. Hatta Windows için "en iyi çaba" desteğine sahiptir.
pip install gitpython
sonra komut satırından `git rev-ayrıştırma HEAD` ile
import git
repo = git.Repo(search_parent_directories=True)
sha = repo.head.object.hexsha
En temiz ve en portatif çözüm. – crishoj
@crishoj Bu olduğunda taşınabilir olarak nasıl kullanabileceğinizi bildiğinizden emin olun: 'ImportError: Gitpython' adlı modül yok. Son kullanıcının 'gitpython' yüklü olduğu ve kodunuz işe yaramaz hale gelmeden önce bunları yüklemelerini gerektirdiği için güvenemezsiniz. Otomatik yükleme protokollerini dahil etmeyecekseniz, bu noktada artık temiz bir çözüm değildir. – user5359531
@ user5359531 Farklı davranmaya başladım. GitPython, platforma özgü ayrıntılar ortaya koyan ve tüm platformlarda standart paket araçlarını ('pip' /' requirements.txt') kullanarak yüklenebilen saf bir Python uygulaması sağlar. "Temiz" ne değil? – crishoj
Başlat yapabilirsiniz. Çıktı sözdizimi açık olmalıdır. –