Průvodce: Automatizujte verzování pomocí Git a Python

Průvodce: Automatizujte verzování pomocí Git a Python
Průvodce: Automatizujte verzování pomocí Git a Python

Vytvoření verzovacího systému pomocí Git a Python

Automatizace verzování souborů projektu je zásadní pro udržení organizovaného a efektivního pracovního postupu vývoje. Pomocí Git a Pythonu můžete vytvořit systém, který aktualizuje soubor version.py s každým potvrzením. To zajišťuje, že verze vašeho projektu je vždy přesná a odráží nejnovější změny provedené ve vaší kódové základně.

V této příručce prozkoumáme metodu automatické aktualizace souboru version.py při každém odeslání do vašeho úložiště Git. Probereme implementaci skriptu, který zachycuje podrobnosti odevzdání, zvyšuje číslo verze a hladce se integruje do vašeho pracovního postupu Git.

Automatizace verzování v Pythonu pomocí Git Hooks

Python skript pro Pre-push Hook

#!/usr/bin/env /usr/bin/python
import os
import subprocess
import re
import sys

commit_msg_file = sys.argv[1]
with open(commit_msg_file, 'r') as file:
    commit_msg = file.read().strip()

version_file = os.path.abspath('version.py')
hashed_code = subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode('utf-8')

if os.path.exists(version_file):
    print(f'Reading previous {version_file}')
    with open(version_file, 'r') as f:
        content = f.read()
        major, minor, patch = map(int, re.search(r'version = "(\d+)\.(\d+)\.(\d+)"', content).groups())
    patch += 1
else:
    print(f'Creating new {version_file}')
    major, minor, patch = 0, 0, 1

print(f'Writing contents of {version_file} with "{commit_msg}"')
with open(version_file, 'w') as f:
    f.write(f'''# This file is created by the pre-push script
class Version:
    comment = "{commit_msg}"
    hash = "{hashed_code}"
    version = "{major}.{minor}.{patch}"

if __name__ == "__main__":
    print(Version.version)
''')

subprocess.call(['git', 'add', version_file])

Nastavení Git Hooku pro přírůstek verze

Skript Git Hook v prostředí Shell

#!/bin/sh

VERSION_PY="version.py"

# Get the commit message file from the arguments
COMMIT_MSG_FILE=$1

# Extract the commit message
COMMIT_MSG=$(cat $COMMIT_MSG_FILE)

# Get the latest commit hash
GIT_HASH=$(git rev-parse HEAD)

if [ -f "$VERSION_PY" ]; then
  VERSION=$(grep -oP '(?<=version = ")(\d+\.\d+\.\d+)' $VERSION_PY)
  IFS='.' read -r -a VERSION_PARTS <<< "$VERSION"
  VERSION_PARTS[2]=$((VERSION_PARTS[2] + 1))
  NEW_VERSION="${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.${VERSION_PARTS[2]}"
else
  NEW_VERSION="0.0.1"
fi

echo "# This file is created by the pre-push script" > $VERSION_PY
echo "class Version:" >> $VERSION_PY
echo "    comment = \"$COMMIT_MSG\"" >> $VERSION_PY
echo "    hash = \"$GIT_HASH\"" >> $VERSION_PY
echo "    version = \"$NEW_VERSION\"" >> $VERSION_PY

git add $VERSION_PY

Vylepšení pracovního postupu Git pomocí automatického verzování

Automatizace verzování v rámci pracovního postupu Git zajišťuje nejen konzistenci, ale také zlepšuje sledovatelnost v softwarových projektech. Díky integraci správy verzí přímo do Git hooks mohou vývojáři udržovat bezproblémový a efektivní proces. Jedním z přístupů je použití pre-push hook systému Git k automatické aktualizaci souboru verze při každém odevzdání. Tato metoda zahrnuje zachycování zpráv odevzdání a hodnot hash, které jsou nezbytné pro sledování změn a udržování historických záznamů o kódové základně.

Dalším zásadním aspektem je schopnost přesně vrátit změny. Pomocí souboru s aktuální verzí mohou vývojáři přesně určit stav projektu v jakékoli dané verzi. To je užitečné zejména v prostředích kontinuální integrace a nasazení (CI/CD), kde je automatizace klíčová. Zajištění spolehlivé aktualizace souboru verze s každým potvrzením pomáhá udržovat robustní kanál nasazení, snižuje ruční chyby a zjednodušuje vydání.

Běžné otázky o automatizaci verzování pomocí Git a Python

  1. Jak mohu automatizovat verzování v mém úložišti Git?
  2. Můžete automatizovat verzování pomocí Git hooků, jako je pre-push hook, a skriptů k aktualizaci souboru verze při každém odevzdání.
  3. Co je to předtlačený hák?
  4. Pre-push hook je Git hook, který spouští skripty před odesláním změn do vzdáleného úložiště. Lze jej použít k automatizaci úloh, jako je aktualizace souboru verze.
  5. Jak získám přístup ke zprávě odevzdání ve skriptu Git hook?
  6. Ke zprávě odevzdání se můžete dostat přečtením souboru předaného jako argument skriptu, obvykle pomocí sys.argv v Pythonu nebo $1 ve skriptu shellu.
  7. Jaký příkaz načte nejnovější hash potvrzení Git?
  8. Příkaz git rev-parse HEAD načte nejnovější hash potvrzení v úložišti Git.
  9. Jak zvýším číslo verze ve skriptu?
  10. Pomocí regulárních výrazů extrahujte aktuální verzi, zvyšte číslo opravy a přepište soubor verze s novým číslem verze.
  11. Mohu tuto metodu použít s nástroji průběžné integrace?
  12. Ano, automatizaci verzování pomocí Git hooků lze integrovat do kanálů CI/CD, aby byla zajištěna konzistence verzí napříč sestaveními a nasazeními.
  13. Jaké jsou výhody automatického verzování?
  14. Automatizované verzování snižuje ruční chyby, zajišťuje konzistentní sledování verzí a zefektivňuje proces vývoje a nasazení.
  15. Jak zajistím, aby byl soubor verze zahrnut v příštím odevzdání?
  16. Použití git add k vytvoření souboru verze poté, co byl skriptem aktualizován.
  17. Co se stane, když soubor verze neexistuje?
  18. Pokud soubor verze neexistuje, skript jej může vytvořit s počátečním číslem verze, například 0.0.1.
  19. Je možné pro Git hooky použít jiné programovací jazyky?
  20. Ano, skripty Git hook můžete psát v různých programovacích jazycích, jako je Python, Bash nebo Perl, v závislosti na vašich preferencích a požadavcích projektu.

Závěrečné myšlenky na automatizované verzování

Automatizace aktualizace souboru version.py s každým push Git je praktickým řešením pro udržení přesné správy verzí ve vašich projektech. Poskytnuté skripty využívají Git hooks a Python k automatizaci tohoto procesu a zajišťují, že každé potvrzení je sledováno pomocí aktualizovaného čísla verze, zprávy odevzdání a hashe. Implementace této metody může výrazně zlepšit váš pracovní postup, zefektivnit jej a snížit pravděpodobnost lidské chyby. Dodržováním uvedených pokynů a příkladů můžete snadno integrovat automatické verzování do svých vlastních vývojových postupů.