Opas: Automatisoi versiointi Gitin ja Pythonin avulla

Opas: Automatisoi versiointi Gitin ja Pythonin avulla
Opas: Automatisoi versiointi Gitin ja Pythonin avulla

Versiojärjestelmän luominen Gitin ja Pythonin avulla

Projektitiedostojen versioinnin automatisointi on erittäin tärkeää organisoidun ja tehokkaan kehitystyönkulun ylläpitämiseksi. Käyttämällä Gitiä ja Pythonia voit luoda järjestelmän, joka päivittää version.py-tiedoston jokaisen toimituksen yhteydessä. Tämä varmistaa, että projektiversiosi on aina tarkka ja heijastaa viimeisimmät koodikantaasi tehdyt muutokset.

Tässä oppaassa tutkimme tapaa päivittää version.py-tiedosto automaattisesti aina, kun Git-tietovarastoon lähetetään. Keskustelemme sellaisen skriptin toteutuksesta, joka tallentaa toimitustiedot, lisää versionumeroa ja integroituu saumattomasti Git-työnkulkuusi.

Versioinnin automatisointi Pythonissa Git Hooksin avulla

Python-skripti Pre-push Hookille

#!/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 Hookin asettaminen versiolisäystä varten

Git Hook Script Shellissä

#!/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-työnkulun parantaminen automaattisella versiolla

Versioiden automatisointi Git-työnkulussa ei ainoastaan ​​takaa johdonmukaisuutta, vaan myös parantaa ohjelmistoprojektien jäljitettävyyttä. Integroimalla versionhallinnan suoraan Git Hookeihin, kehittäjät voivat ylläpitää saumatonta ja tehokasta prosessia. Yksi tapa on käyttää Gitin pre-push-hookia päivittämään versiotiedosto automaattisesti jokaisen toimituksen yhteydessä. Tämä menetelmä sisältää sitoumusviestien ja hajautusarvojen tallentamisen, jotka ovat välttämättömiä muutosten seurannassa ja koodikannan historiallisen tietueen ylläpitämisessä.

Toinen tärkeä näkökohta on kyky palauttaa muutokset tarkasti. Ajantasaisen versiotiedoston avulla kehittäjät voivat määrittää projektin tarkan tilan missä tahansa versiossa. Tämä on erityisen hyödyllistä jatkuvan integroinnin ja käyttöönoton (CI/CD) ympäristöissä, joissa automaatio on avainasemassa. Versiotiedoston luotettavan päivityksen varmistaminen jokaisen vahvistuksen yhteydessä auttaa ylläpitämään vankkaa käyttöönottoprosessia, vähentäen manuaalisia virheitä ja virtaviivaistaen julkaisuja.

Yleisiä kysymyksiä versioiden automatisoinnista Gitin ja Pythonin avulla

  1. Kuinka voin automatisoida versioinnin Git-varastossani?
  2. Voit automatisoida versioinnin käyttämällä Git-koukkuja, kuten pre-push-hookia, ja komentosarjoja päivittääksesi versiotiedoston jokaisessa toimituksessa.
  3. Mikä on esityöntökoukku?
  4. Pre-push-hook on Git-koukku, joka suorittaa komentosarjat ennen kuin muutokset työnnetään etävarastoon. Sitä voidaan käyttää automatisoimaan tehtäviä, kuten versiotiedoston päivittämistä.
  5. Kuinka pääsen Git-hook-skriptin toimitusviestiin?
  6. Pääset toimitusviestiin lukemalla tiedoston, joka välitetään komentosarjalle argumenttina, tyypillisesti käyttämällä sys.argv Pythonissa tai $1 kuorikirjoituksessa.
  7. Mikä komento noutaa uusimman Git commit hashin?
  8. Käsky git rev-parse HEAD hakee viimeisimmän sitoutumishajautusarvon Git-arkistosta.
  9. Kuinka lisään skriptin versionumeroa?
  10. Pura nykyinen versio säännöllisillä lausekkeilla, lisää korjaustiedoston numeroa ja kirjoita versiotiedosto uudelleen uudella versionumerolla.
  11. Voinko käyttää tätä menetelmää jatkuvan integroinnin työkalujen kanssa?
  12. Kyllä, automatisoitu versiointi Git-koukkujen avulla voidaan integroida CI/CD-putkiin, jotta varmistetaan versioiden yhdenmukaisuus koontiversioiden ja käyttöönottojen välillä.
  13. Mitä hyötyä automaattisesta versiosta on?
  14. Automaattinen versiointi vähentää manuaalisia virheitä, varmistaa johdonmukaisen versionseurannan ja virtaviivaistaa kehitys- ja käyttöönottoprosessia.
  15. Kuinka varmistan, että versiotiedosto sisällytetään seuraavaan toimitukseen?
  16. Käyttää git add asettaa versiotiedoston sen jälkeen, kun komentosarja on päivittänyt sen.
  17. Mitä tapahtuu, jos versiotiedostoa ei ole olemassa?
  18. Jos versiotiedostoa ei ole olemassa, komentosarja voi luoda sen alkuperäisellä versionumerolla, kuten 0.0.1.
  19. Onko mahdollista käyttää muita ohjelmointikieliä Git-koukkuihin?
  20. Kyllä, voit kirjoittaa Git hook -skriptejä eri ohjelmointikielillä, kuten Python, Bash tai Perl, mieltymystesi ja projektivaatimustesi mukaan.

Viimeisiä ajatuksia automaattisesta versiosta

Version.py-tiedoston päivityksen automatisointi jokaisella Git-työntöllä on käytännöllinen ratkaisu tarkan versionhallinnan ylläpitämiseen projekteissasi. Mukana toimitetut skriptit hyödyntävät Git hookeja ja Pythonia tämän prosessin automatisoimiseksi varmistaen, että jokaista toimitusta seurataan päivitetyllä versionumerolla, toimitusviestillä ja hashilla. Tämän menetelmän käyttöönotto voi parantaa työnkulkuasi huomattavasti, tehostaa sitä ja vähentää inhimillisten virheiden mahdollisuuksia. Noudattamalla annettuja ohjeita ja esimerkkejä voit helposti integroida automaattisen versioinnin omiin kehityskäytäntöihisi.