Ceļvedis: Git izmantošana starp vietējiem direktorijiem

Ceļvedis: Git izmantošana starp vietējiem direktorijiem
Ceļvedis: Git izmantošana starp vietējiem direktorijiem

Ievads vietējā versiju kontrolē

Efektīva vairāku vietējo direktoriju pārvaldība var būt sarežģīts uzdevums, īpaši, ja mēģināt sinhronizēt izstrādes un testēšanas vidi. Šajā rokasgrāmatā mēs izpētīsim, kā izmantot Git, lai atvieglotu versiju kontroli starp diviem vietējiem direktorijiem: vienu izstrādei un otru vietējai tīmekļa lapu apkalpošanai.

Mēs apspriedīsim izmaiņu pārsūtīšanu no jūsu izstrādes direktorijas uz jūsu vietējā servera direktoriju, nodrošinot, ka tiek atjaunināti tikai nepieciešamie faili. Šīs rokasgrāmatas mērķis ir nodrošināt visaptverošu risinājumu šī procesa automatizēšanai, atdarinot Git funkcijas vietējā vidē.

Komanda Apraksts
rsync Lietderība efektīvai failu pārsūtīšanai un sinhronizēšanai datorsistēmās, pārbaudot failu laikspiedolu un lielumu.
--update Uzdod rsync izlaist failus, kas uztvērējā ir jaunāki.
--exclude Izmanto kopā ar rsync, lai izslēgtu failu, kas atbilst noteiktam modelim, sinhronizāciju.
Path.home() Metode Python pathlib modulī, lai iegūtu pašreizējā lietotāja mājas direktoriju.
shutil.copy2() Funkcija Python Shuil modulī, kas kopē failus, saglabājot metadatus, piemēram, laikspiedolus.
os.makedirs() Funkcija Python OS modulī, kas rekursīvi izveido direktoriju, nodrošinot visu starpdirektoriju izveidi.
os.path.getmtime() Funkcija Python OS modulī, kas atgriež faila pēdējās modifikācijas laiku.
Path.match() Metode Python modulī pathlib, lai saskaņotu failu ceļus ar noteiktu modeli.

Izpratne par automatizācijas skriptiem vietējai versiju kontrolei

Pirmais skripts ir čaulas skripts, kas izmanto rsync komanda, lai sinhronizētu failus no izstrādes direktorija uz lokālā servera direktoriju. Skripts sākas ar avota definēšanu (DEV_DIR) un galamērķis (LOCAL_DIR) katalogi. Pēc tam tas norāda izslēdzamos modeļus, piemēram, dublējuma failus un punktu failus, izmantojot izsaukto masīvu EXCLUDE_PATTERNS. Skripts konstruē rsync dinamiski izslēdz parametrus un palaiž rsync -av --update komanda, kas atjaunina mērķa direktoriju ar jaunākiem failiem no avota, izslēdzot norādītos modeļus.

Otrais skripts ir rakstīts Python un izmanto tādus moduļus kā os, shutil, un pathlib lai sasniegtu līdzīgu funkcionalitāti. Tas definē tos pašus avota un mērķa direktorijus un izslēgšanas modeļus. Skripts iziet cauri izstrādes direktorijai, izveidojot galamērķī nepieciešamos direktorijus, ja tie neeksistē. Tas pārbauda, ​​vai katrs fails ir jāizslēdz, izmantojot pielāgotu funkciju, un kopē failus tikai tad, ja tie ir jaunāki par esošajiem, izmantojot shutil.copy2(). Šis skripts nodrošina detalizētāku un pielāgojamāku pieeju failu sinhronizēšanai.

Failu sinhronizācijas automatizācija ar Shell skriptiem

Shell skriptēšana automatizētai failu atjaunināšanai

#!/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 izmantošana, lai sinhronizētu failus ar Git līdzīgām funkcijām

Python skripts vietējai failu sinhronizācijai

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)

Uzlabotas metodes vietējai versiju kontrolei

Papildus pamata sinhronizācijas skriptiem vēl viena spēcīga pieeja vietējo repozitoriju pārvaldībai ir Git āķu izmantošana. Git āķi ļauj automatizēt uzdevumus dažādos Git darbplūsmas punktos. Piemēram, varat iestatīt pēcapstiprināšanas āķi, lai automātiski pārsūtītu izmaiņas no izstrādes direktorija uz vietējā servera direktoriju. Tādā veidā katru reizi, kad veicat izmaiņas savā Dev direktorijā, atjauninājumi tiks atspoguļoti Localhost direktorijā.

Lai iestatītu pēcapstiprināšanas āķi, izveidojiet skriptu sava Dev repozitorija .git/hooks direktorijā ar nosaukumu Post-commit. Šis skripts var ietvert komandas atjaunināto failu kopēšanai uz jūsu Localhost direktoriju vai sinhronizēšanai izmantot komandu rsync. Git hooks izmantošana nodrošina nemanāmu un automatizētu veidu, kā pārvaldīt atjauninājumus, nodrošinot, ka jūsu izstrādes un testēšanas vide vienmēr ir sinhronizēta bez manuālas iejaukšanās.

Bieži uzdotie jautājumi par vietējo versiju kontroli

  1. Kā iestatīt pamata Git repozitoriju?
  2. Izmantot git init savā projekta direktorijā, lai izveidotu jaunu Git repozitoriju.
  3. Kā es varu izslēgt noteiktu failu izsekošanu?
  4. Savā repozitorijā izveidojiet .gitignore failu un uzskaitiet izslēdzamo failu modeļus.
  5. Kāds ir komandas rsync mērķis?
  6. rsync tiek izmantots, lai efektīvi sinhronizētu failus un direktorijus starp divām vietām.
  7. Kā es varu automatizēt failu sinhronizāciju starp direktorijiem?
  8. Izmantojiet skriptu ar rsync vai Python, lai automatizētu procesu, un apsveriet iespēju izmantot Git āķus automatizācijai Git darbplūsmās.
  9. Vai es varu izmantot Git lokāli bez attālās krātuves?
  10. Jā, Git var izmantot lokāli, lai izsekotu izmaiņām un pārvaldītu versiju kontroli jūsu lokālajos direktorijos.
  11. Kā rīkoties ar failu konfliktiem pakalpojumā Git?
  12. Git liks jums atrisināt konfliktus manuāli, ja izmaiņas jūsu lokālajā repozitorijā ir pretrunā ar atjauninājumiem no citiem avotiem.
  13. Kas ir Git āķi?
  14. Git āķi ir skripti, kas tiek palaisti automātiski noteiktos Git darbplūsmas punktos, piemēram, pēc apņemšanās vai pirms push.
  15. Kā es varu kopēt failus ar noteiktiem paplašinājumiem, izmantojot skriptu?
  16. Čaulas skriptā izmantojiet modeļus, piemēram, *.php lai saskaņotu un kopētu failus ar noteiktiem paplašinājumiem.
  17. Kāda ir atšķirība starp cp un rsync?
  18. cp ir pamata komanda failu kopēšanai, kamēr rsync piedāvā uzlabotas sinhronizācijas un efektivitātes iespējas.

Pēdējās domas par vietējiem versiju kontroles risinājumiem

Izmantojot tādus rīkus kā rsync un Python skripti nodrošina stabilu risinājumu lokālās versiju kontroles pārvaldībai starp direktorijiem. Automatizējot failu sinhronizāciju, jūs varat ietaupīt laiku un izvairīties no iespējamām kļūdām. Git hooks ieviešana vēl vairāk uzlabo šo procesu, integrējot automatizāciju tieši jūsu Git darbplūsmā. Šīs metodes nodrošina, ka jūsu izstrādes un testēšanas vide paliek konsekventa un atjaunināta ar minimālu manuālu piepūli. Šo stratēģiju pieņemšana racionalizēs jūsu darbplūsmu, ļaujot vairāk koncentrēties uz izstrādi un mazāk koncentrēties uz failu pārsūtīšanas pārvaldību.