Vadovas: „Git“ naudojimas tarp vietinių katalogų

Vadovas: „Git“ naudojimas tarp vietinių katalogų
Vadovas: „Git“ naudojimas tarp vietinių katalogų

Įvadas į vietinį versijų valdymą

Efektyviai valdyti kelis vietinius katalogus gali būti sudėtinga užduotis, ypač kai bandote sinchronizuoti savo kūrimo ir testavimo aplinkas. Šiame vadove mes išnagrinėsime, kaip naudoti „Git“, kad būtų lengviau valdyti dviejų vietinių katalogų versijas: vienas skirtas kurti, o kitas – vietiniams tinklalapiams aptarnauti.

Aptarsime pakeitimų perkėlimo iš jūsų kūrimo katalogo į vietinio serverio katalogą procesą, užtikrindami, kad būtų atnaujinti tik būtini failai. Šio vadovo tikslas – pateikti visapusišką šio proceso automatizavimo sprendimą, imituojant „Git“ funkcijas vietinėms aplinkoms.

komandą apibūdinimas
rsync Priemonė, skirta efektyviam failų perkėlimui ir sinchronizavimui kompiuterinėse sistemose, tikrinant failų laiko žymą ir dydį.
--update Nurodo rsync praleisti failus, kurie yra naujesni imtuve.
--exclude Naudojamas su rsync, kad nebūtų sinchronizuojami failai, atitinkantys nurodytą šabloną.
Path.home() Metodas Python pathlib modulyje, norint gauti dabartinio vartotojo namų katalogą.
shutil.copy2() „Python“ modulio „Shuil“ funkcija, kuri kopijuoja failus ir išsaugo metaduomenis, pavyzdžiui, laiko žymes.
os.makedirs() Funkcija Python OS modulyje, kuri rekursyviai sukuria katalogą, užtikrindama, kad būtų sukurti visi tarpiniai katalogai.
os.path.getmtime() Funkcija Python OS modulyje, grąžinanti paskutinį failo modifikavimo laiką.
Path.match() Metodas Python pathlib modulyje, skirtas failo keliams suderinti su nurodytu šablonu.

Vietinio versijos valdymo automatizavimo scenarijų supratimas

Pirmasis scenarijus yra apvalkalo scenarijus, kuriame naudojamas rsync komanda, skirta sinchronizuoti failus iš kūrimo katalogo su vietinio serverio katalogu. Scenarijus prasideda apibrėžiant šaltinį (DEV_DIR) ir paskirties vieta (LOCAL_DIR) katalogus. Tada ji nurodo šablonus, kuriuos reikia išskirti, pvz., atsarginių failų ir taškinių failų, naudodama vadinamą masyvą EXCLUDE_PATTERNS. Scenarijus sukuria rsync dinamiškai neįtraukti parametrų ir paleisti rsync -av --update komanda, kuri atnaujina paskirties katalogą naujesniais failais iš šaltinio, išskyrus nurodytus šablonus.

Antrasis scenarijus parašytas Python ir naudoja tokius modulius kaip os, shutil, ir pathlib pasiekti panašų funkcionalumą. Jis apibrėžia tuos pačius šaltinio ir paskirties katalogus bei išskyrimo šablonus. Scenarijus eina per kūrimo katalogą ir sukuria reikiamus katalogus paskirties vietoje, jei jų nėra. Ji patikrina, ar kiekvienas failas turi būti neįtrauktas naudojant pasirinktinę funkciją ir kopijuoja failus tik tuo atveju, jei jie yra naujesni nei esami naudojant shutil.copy2(). Šis scenarijus suteikia išsamesnį ir labiau pritaikomą failų sinchronizavimo metodą.

Failų sinchronizavimo automatizavimas su Shell scenarijais

Shell scenarijus, skirtas automatiniams failų naujinimams

#!/bin/bash
# Define directories
DEV_DIR=~/dev/remote
LOCAL_DIR=/var/www/html
# Define excluded patterns
EXCLUDE_PATTERNS=("backups/" ".*")
# Create rsync exclude parameters
EXCLUDE_PARAMS=()
for pattern in "${EXCLUDE_PATTERNS[@]}"; do
    EXCLUDE_PARAMS+=(--exclude "$pattern")
done
# Sync files from DEV_DIR to LOCAL_DIR
rsync -av --update "${EXCLUDE_PARAMS[@]}" "$DEV_DIR/" "$LOCAL_DIR/"

„Python“ naudojimas failams sinchronizuoti su „Git“ funkcijomis

Python scenarijus vietiniam failų sinchronizavimui

import os
import shutil
from pathlib import Path
EXCLUDE_PATTERNS = ["backups", ".*"]
DEV_DIR = Path.home() / "dev/remote"
LOCAL_DIR = Path("/var/www/html")
def should_exclude(path):
    for pattern in EXCLUDE_PATTERNS:
        if path.match(pattern):
            return True
    return False
for root, dirs, files in os.walk(DEV_DIR):
    rel_path = Path(root).relative_to(DEV_DIR)
    dest_path = LOCAL_DIR / rel_path
    if not should_exclude(rel_path):
        os.makedirs(dest_path, exist_ok=True)
        for file in files:
            src_file = Path(root) / file
            dest_file = dest_path / file
            if not should_exclude(src_file) and \
               (not dest_file.exists() or
                os.path.getmtime(src_file) > os.path.getmtime(dest_file)):
                shutil.copy2(src_file, dest_file)

Pažangūs vietinio versijos valdymo būdai

Be pagrindinių sinchronizavimo scenarijų, kitas galingas būdas valdyti vietines saugyklas yra Git kabliukų naudojimas. Git kabliukai leidžia automatizuoti užduotis įvairiuose Git darbo eigos taškuose. Pavyzdžiui, galite nustatyti kabliuką po įvykdymo, kad pakeitimai būtų automatiškai perkelti iš kūrimo katalogo į vietinio serverio katalogą. Tokiu būdu kiekvieną kartą, kai atliksite pakeitimus savo „Dev“ kataloge, naujinimai atsispindės „Localhost“ kataloge.

Norėdami nustatyti poįsigijimo kabliuką, sukurkite scenarijų savo Dev saugyklos .git/hooks kataloge, pavadintame post-commit. Šiame scenarijuje gali būti komandų, skirtų atnaujintiems failams nukopijuoti į jūsų „Localhost“ katalogą, arba sinchronizavimui naudoti komandą rsync. Naudojant „Git hooks“ galima sklandžiai ir automatizuotai valdyti naujinimus, užtikrinant, kad jūsų kūrimo ir testavimo aplinka visada būtų sinchronizuojama be rankinio įsikišimo.

Dažnai užduodami klausimai apie vietinį versijų valdymą

  1. Kaip nustatyti pagrindinę „Git“ saugyklą?
  2. Naudokite git init savo projekto kataloge, kad sukurtumėte naują Git saugyklą.
  3. Kaip galiu pašalinti tam tikrus failus iš sekimo?
  4. Sukurkite .gitignore failą saugykloje ir nurodykite failų, kuriuos norite išskirti, šablonus.
  5. Koks yra rsync komandos tikslas?
  6. rsync naudojamas norint efektyviai sinchronizuoti failus ir katalogus tarp dviejų vietų.
  7. Kaip galiu automatizuoti failų sinchronizavimą tarp katalogų?
  8. Naudokite scenarijų su rsync arba Python, norėdami automatizuoti procesą, ir apsvarstykite galimybę naudoti „Git hooks“ automatizavimui „Git“ darbo eigose.
  9. Ar galiu naudoti „Git“ vietoje be nuotolinės saugyklos?
  10. Taip, „Git“ gali būti naudojamas lokaliai, norint stebėti pakeitimus ir valdyti versijų valdymą vietiniuose kataloguose.
  11. Kaip tvarkyti failų konfliktus sistemoje „Git“?
  12. „Git“ paragins jus rankiniu būdu išspręsti konfliktus, jei vietinės saugyklos pakeitimai prieštaraus naujinimams iš kitų šaltinių.
  13. Kas yra Git kabliukai?
  14. „Git Hook“ yra scenarijai, kurie automatiškai paleidžiami tam tikruose „Git“ darbo eigos taškuose, pvz., po įsipareigojimo arba prieš „push“.
  15. Kaip galiu nukopijuoti failus su konkrečiais plėtiniais naudojant scenarijų?
  16. Apvalkalo scenarijuje naudokite tokius modelius kaip *.php suderinti ir kopijuoti failus su konkrečiais plėtiniais.
  17. Kuo skiriasi cp ir rsync?
  18. cp yra pagrindinė failų kopijavimo komanda, o rsync siūlo pažangias sinchronizavimo ir efektyvumo parinktis.

Paskutinės mintys apie vietinius versijų valdymo sprendimus

Naudojant tokias priemones kaip rsync ir Python scripts yra patikimas sprendimas vietinei versijų kontrolei tarp katalogų valdyti. Automatizuodami failų sinchronizavimą galite sutaupyti laiko ir išvengti galimų klaidų. „Git hooks“ įdiegimas dar labiau pagerina šį procesą, integruodamas automatizavimą tiesiai į „Git“ darbo eigą. Šie metodai užtikrina, kad jūsų kūrimo ir testavimo aplinka išliktų nuosekli ir atnaujinta su minimaliomis rankinėmis pastangomis. Priėmus šias strategijas, jūsų darbo eiga bus supaprastinta, todėl galėsite daugiau dėmesio skirti kūrimui ir mažiau failų perdavimo tvarkymui.