Versijų sistemos kūrimas naudojant „Git“ ir „Python“.
Projekto failų versijų kūrimo automatizavimas yra labai svarbus norint išlaikyti organizuotą ir veiksmingą kūrimo darbo eigą. Naudodami „Git“ ir „Python“, galite sukurti sistemą, kuri atnaujina failą version.py su kiekvienu įsipareigojimu. Taip užtikrinama, kad jūsų projekto versija visada būtų tiksli ir atspindėtų naujausius kodų bazės pakeitimus.
Šiame vadove išnagrinėsime metodą, kaip automatiškai atnaujinti version.py failą kiekvieną kartą paspaudus į „Git“ saugyklą. Aptarsime scenarijaus, kuris fiksuoja išsamią įsipareigojimo informaciją, padidina versijos numerį ir sklandžiai integruojasi su jūsų Git darbo eiga, įgyvendinimą.
Versijų kūrimo automatizavimas Python naudojant Git Hooks
Python scenarijus, skirtas 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])
„Git Hook“ nustatymas versijos padidinimui
„Git Hook“ scenarijus „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
„Git“ darbo eigos tobulinimas naudojant automatinį versijų kūrimą
Versijų kūrimo automatizavimas „Git“ darbo eigoje ne tik užtikrina nuoseklumą, bet ir pagerina programinės įrangos projektų atsekamumą. Integruodami versijų valdymą tiesiai į „Git Hook“, kūrėjai gali palaikyti sklandų ir efektyvų procesą. Vienas iš būdų yra naudoti „Git“ išankstinį paspaudimą, kad automatiškai atnaujintumėte versijos failą su kiekvienu įsipareigojimu. Šis metodas apima įsipareigojimo pranešimų ir maišos reikšmių fiksavimą, kurios yra būtinos norint sekti pokyčius ir išlaikyti istorinį kodų bazės įrašą.
Kitas svarbus aspektas yra galimybė tiksliai grąžinti pakeitimus. Turėdami naujausią versijos failą, kūrėjai gali tiksliai nustatyti bet kurios versijos projekto būseną. Tai ypač naudinga nuolatinio integravimo ir diegimo (CI/CD) aplinkose, kur svarbiausia yra automatizuoti. Užtikrinus, kad versijos failas būtų patikimai atnaujinamas su kiekvienu įpareigojimu, padeda išlaikyti tvirtą diegimo vamzdyną, sumažinant rankinių klaidų skaičių ir supaprastinant leidimus.
Dažni klausimai apie versijų kūrimo automatizavimą naudojant „Git“ ir „Python“.
- Kaip galiu automatizuoti versijų kūrimą savo „Git“ saugykloje?
- Galite automatizuoti versijų kūrimą naudodami Git hook, pvz., išankstinį stūmimo kabliuką, ir scenarijus, kad atnaujintumėte versijos failą kiekviename įsipareigojime.
- Kas yra išankstinio stūmimo kabliukas?
- Išankstinis stūmimo kabliukas yra Git kabliukas, kuris paleidžia scenarijus prieš perkeliant pakeitimus į nuotolinę saugyklą. Jis gali būti naudojamas automatizuoti užduotis, pvz., versijos failo atnaujinimą.
- Kaip pasiekti patvirtinimo pranešimą „Git Hook“ scenarijuje?
- Įvykdymo pranešimą galite pasiekti skaitydami failą, perduotą kaip scenarijaus argumentą, paprastai naudojant sys.argv Python arba $1 apvalkalo scenarijuje.
- Kokia komanda nuskaito naujausią Git commit maišą?
- Komanda git rev-parse HEAD nuskaito naujausią įvykdymo maišą „Git“ saugykloje.
- Kaip padidinti scenarijaus versijos numerį?
- Naudokite įprastus posakius, kad ištrauktumėte dabartinę versiją, padidintumėte pataisos numerį ir perrašytumėte versijos failą nauju versijos numeriu.
- Ar galiu naudoti šį metodą su nuolatinio integravimo įrankiais?
- Taip, automatizuotą versijų kūrimą naudojant „Git Hook“ galima integruoti į CI / CD konvejerius, kad būtų užtikrintas versijų nuoseklumas visose versijose ir diegimuose.
- Kokie yra automatinio versijų kūrimo pranašumai?
- Automatinis versijų kūrimas sumažina rankinių klaidų skaičių, užtikrina nuoseklų versijų stebėjimą ir supaprastina kūrimo ir diegimo procesą.
- Kaip užtikrinti, kad versijos failas būtų įtrauktas į kitą patvirtinimą?
- Naudokite git add kad sukurtumėte versijos failą po to, kai jį atnaujino scenarijus.
- Kas atsitiks, jei versijos failas neegzistuoja?
- Jei versijos failo nėra, scenarijus gali sukurti jį su pradiniu versijos numeriu, pvz., 0.0.1.
- Ar galima naudoti kitas programavimo kalbas Git kabliams?
- Taip, galite rašyti Git Hook scenarijus įvairiomis programavimo kalbomis, tokiomis kaip Python, Bash arba Perl, priklausomai nuo jūsų pageidavimų ir projekto reikalavimų.
Paskutinės mintys apie automatizuotą versijų kūrimą
Automatinis version.py failo atnaujinimas su kiekvienu „Git“ paspaudimu yra praktiškas sprendimas, padedantis išlaikyti tikslų versijos valdymą jūsų projektuose. Pateikti scenarijai naudoja „Git Hook“ ir „Python“, kad automatizuotų šį procesą, užtikrinant, kad kiekvienas įsipareigojimas būtų stebimas naudojant atnaujintą versijos numerį, įsipareigojimo pranešimą ir maišą. Šio metodo įgyvendinimas gali labai pagerinti darbo eigą, padaryti ją efektyvesnę ir sumažinti žmogiškųjų klaidų tikimybę. Vadovaudamiesi pateiktomis gairėmis ir pavyzdžiais, galite lengvai integruoti automatizuotą versijų kūrimą į savo kūrimo praktiką.