Stvaranje sustava za određivanje verzija s Gitom i Pythonom
Automatiziranje verzija vaših projektnih datoteka ključno je za održavanje organiziranog i učinkovitog tijeka razvoja. Koristeći Git i Python, možete stvoriti sustav koji ažurira datoteku version.py sa svakim commitom. To osigurava da je vaša verzija projekta uvijek točna i odražava najnovije promjene u vašoj bazi koda.
U ovom ćemo vodiču istražiti metodu za automatsko ažuriranje datoteke version.py nakon svakog pritiska na vaše Git spremište. Raspravljat ćemo o implementaciji skripte koja bilježi detalje predaje, povećava broj verzije i neprimjetno se integrira s vašim Git tijek rada.
Automatiziranje određivanja verzija u Pythonu pomoću Git kuka
Python skripta za pre-push kuku
#!/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])
Postavljanje Git kuke za povećanje verzije
Git Hook skripta u Shellu
#!/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
Poboljšanje tijeka rada Gita s automatiziranim određivanjem verzija
Automatiziranje verzija unutar tijeka rada Gita ne samo da osigurava dosljednost, već i poboljšava sljedivost u softverskim projektima. Integrirajući upravljanje verzijama izravno u Git kuke, programeri mogu održavati besprijekoran i učinkovit proces. Jedan pristup je korištenje Gitove pre-push kuke za automatsko ažuriranje datoteke verzije sa svakim predanjem. Ova metoda uključuje hvatanje poruka predaje i hash vrijednosti, koje su bitne za praćenje promjena i održavanje povijesnog zapisa baze koda.
Drugi ključni aspekt je mogućnost točnog vraćanja promjena. Uz ažurnu datoteku verzije, programeri mogu odrediti točno stanje projekta u bilo kojoj verziji. Ovo je posebno korisno u okruženjima kontinuirane integracije i implementacije (CI/CD), gdje je automatizacija ključna. Osiguravanje pouzdanog ažuriranja datoteke verzije sa svakim uvrštavanjem pomaže u održavanju robusnog cjevovoda za implementaciju, smanjujući ručne pogreške i pojednostavljujući izdanja.
Uobičajena pitanja o automatiziranju određivanja verzija s Gitom i Pythonom
- Kako mogu automatizirati izradu verzija u svom Git repozitoriju?
- Možete automatizirati određivanje verzija upotrebom Git kuka, kao što je pre-push kuka, i skripti za ažuriranje datoteke verzije pri svakom predanju.
- Što je pre-push kuka?
- Pre-push hook je Git hook koji pokreće skripte prije nego što se promjene pošalju u udaljeno spremište. Može se koristiti za automatizaciju zadataka kao što je ažuriranje datoteke verzije.
- Kako mogu pristupiti poruci predaje u Git hook skripti?
- Možete pristupiti poruci predaje čitanjem datoteke proslijeđene kao argument skripti, obično koristeći sys.argv u Pythonu ili $1 u skripti ljuske.
- Koja naredba dohvaća najnoviji hash Git commit-a?
- Zapovijed git rev-parse HEAD dohvaća najnoviji hash predaje u Git repozitoriju.
- Kako mogu povećati broj verzije u skripti?
- Upotrijebite regularne izraze za izdvajanje trenutne verzije, povećanje broja zakrpe i ponovno pisanje datoteke verzije s novim brojem verzije.
- Mogu li koristiti ovu metodu s alatima za kontinuiranu integraciju?
- Da, automatiziranje izrade verzija s Git kukicama može se integrirati u CI/CD cjevovode kako bi se osigurala dosljednost verzija u svim verzijama i implementacijama.
- Koje su prednosti automatizirane verzije?
- Automatizirano određivanje verzija smanjuje ručne pogreške, osigurava dosljedno praćenje verzija i pojednostavljuje proces razvoja i implementacije.
- Kako mogu osigurati da je datoteka verzije uključena u sljedeće uvrštavanje?
- Koristiti git add za postavljanje datoteke verzije nakon što ju je ažurirala skripta.
- Što se događa ako datoteka verzije ne postoji?
- Ako datoteka verzije ne postoji, skripta je može stvoriti s početnim brojem verzije, kao što je 0.0.1.
- Je li moguće koristiti druge programske jezike za Git kuke?
- Da, možete pisati Git hook skripte u raznim programskim jezicima, kao što su Python, Bash ili Perl, ovisno o vašim željama i zahtjevima projekta.
Završne misli o automatskom kreiranju verzija
Automatiziranje ažuriranja datoteke version.py sa svakim pritiskom na Git praktično je rješenje za održavanje točne kontrole verzija u vašim projektima. Isporučene skripte koriste Git kuke i Python za automatizaciju ovog procesa, osiguravajući da se svako uvrštavanje prati s ažuriranim brojem verzije, porukom uvrštavanja i hashom. Primjena ove metode može uvelike poboljšati vaš tijek rada, čineći ga učinkovitijim i smanjujući šanse ljudske pogreške. Slijedeći navedene smjernice i primjere, možete jednostavno integrirati automatizirano stvaranje verzija u vlastite razvojne prakse.