Креирање система за верзионисање помоћу Гит и Питхон-а
Аутоматизација верзије ваших пројектних датотека је кључна за одржавање организованог и ефикасног тока развоја. Користећи Гит и Питхон, можете креирати систем који ажурира датотеку версион.пи са сваким урезивањем. Ово осигурава да је верзија вашег пројекта увек тачна и да одражава најновије промене направљене у вашој бази кода.
У овом водичу ћемо истражити метод за аутоматско ажурирање датотеке версион.пи при сваком гурању у ваше Гит спремиште. Разговараћемо о примени скрипте која бележи детаље урезивања, повећава број верзије и неприметно се интегрише у ваш Гит ток посла.
Аутоматизација верзија у Питхон-у помоћу Гит кука
Питхон скрипта за пре-пусх куку
#!/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])
Подешавање Гит Хоок-а за повећање верзије
Гит Хоок Сцрипт у Схелл-у
#!/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
Побољшање Гит тока рада помоћу аутоматизованог верзионисања
Аутоматизација верзије у оквиру Гит тока посла не само да обезбеђује доследност већ и побољшава следљивост у софтверским пројектима. Интеграцијом управљања верзијама директно у Гит куке, програмери могу да одржавају беспрекоран и ефикасан процес. Један приступ је коришћење Гитове пре-пусх куке за аутоматско ажурирање датотеке верзије са сваким урезивањем. Овај метод укључује хватање порука урезивања и хеш вредности, које су неопходне за праћење промена и одржавање историјског записа базе кода.
Још један кључни аспект је могућност тачног враћања промена. Са ажурираном датотеком верзије, програмери могу тачно да одреде тачно стање пројекта у било којој верзији. Ово је посебно корисно у окружењима континуиране интеграције и имплементације (ЦИ/ЦД), где је аутоматизација кључна. Обезбеђивање да се датотека верзије поуздано ажурира са сваким урезивањем помаже у одржавању робусног цевовода за примену, смањујући ручне грешке и поједностављујући издања.
Уобичајена питања о аутоматизацији верзионисања са Гит-ом и Питхон-ом
- Како могу да аутоматизујем верзионисање у свом Гит спремишту?
- Можете да аутоматизујете верзионисање коришћењем Гит кукица, као што је пре-пусх кука, и скрипти за ажурирање датотеке верзије при сваком урезивању.
- Шта је пре-пусх кука?
- Пре-пусх кука је Гит кука која покреће скрипте пре него што се промене гурну у удаљено спремиште. Може се користити за аутоматизацију задатака као што је ажурирање датотеке верзије.
- Како да приступим поруци урезивања у Гит хоок скрипти?
- Можете приступити поруци урезивања читањем датотеке која је прослеђена као аргумент скрипти, обично користећи sys.argv у Пајтону или $1 у схелл скрипту.
- Која команда преузима најновији хеш урезивања Гит-а?
- Команда git rev-parse HEAD преузима најновији хеш урезивања у Гит спремишту.
- Како да повећам број верзије у скрипти?
- Користите регуларне изразе да бисте издвојили тренутну верзију, повећали број закрпе и преписали датотеку верзије са новим бројем верзије.
- Да ли могу да користим овај метод са алатима за континуирану интеграцију?
- Да, аутоматизовано управљање верзијама са Гит закачивачима може да се интегрише у ЦИ/ЦД цевоводе како би се обезбедила конзистентност верзија у свим верзијама и имплементацијама.
- Које су предности аутоматског креирања верзија?
- Аутоматско креирање верзија смањује ручне грешке, обезбеђује доследно праћење верзија и поједностављује процес развоја и примене.
- Како да осигурам да је датотека верзије укључена у следеће урезивање?
- Користи git add да поставите датотеку верзије након што је скрипта ажурира.
- Шта се дешава ако датотека верзије не постоји?
- Ако датотека верзије не постоји, скрипта може да је креира са почетним бројем верзије, као што је 0.0.1.
- Да ли је могуће користити друге програмске језике за Гит куке?
- Да, можете писати Гит хоок скрипте на различитим програмским језицима, као што су Питхон, Басх или Перл, у зависности од ваших жеља и захтева пројекта.
Завршна размишљања о аутоматском верзионисању
Аутоматизација ажурирања датотеке версион.пи са сваким Гит пусхом је практично решење за одржавање тачне контроле верзија у вашим пројектима. Достављене скрипте користе Гит куке и Питхон да аутоматизују овај процес, обезбеђујући да се свако урезивање прати ажурираним бројем верзије, поруком урезивања и хешом. Примена ове методе може у великој мери да побољша ваш ток посла, чинећи га ефикаснијим и смањујући шансе за људске грешке. Пратећи дате смернице и примере, можете лако да интегришете аутоматизовано верзионисање у сопствене развојне праксе.