it-swarm.dev

Gestione dei siti con Git

Sto iniziando a utilizzare Git per gestire le build del sito Joomla e sto cercando alcune indicazioni sulle migliori pratiche. Così com'è:

  • Utilizzare WHM per eseguire il provisioning di un nuovo account. Ho scritto un hook post-installazione per scaricare automaticamente Joomla da Github e inserirlo nel relativo public_html directory, oltre a creare il database e l'utente DB
  • Installa manualmente Joomla tramite l'interfaccia web (anche se attualmente stai cercando un modo per automatizzare anche questo)
  • Imposta un repository nudo sopra public_html - questo è il punto in cui gli utenti spingono ed estraggono. Lo chiameremo Origin
  • Imposta un repository standard in public_html
  • Aggiungi uno specifico di Joomla .gitignore
  • Specifica il repository nudo come nostro telecomando (git remote add Origin ../repo.git)
  • Esegui git add ., poi git commit -m"Initial J! Commit", poi git Push Origin master per ottenere l'installazione predefinita nel nostro repository nudo
  • Aggiungere un post-receive aggancia al repository nudo per estrarre automaticamente le modifiche nel repository in public_html (poiché il repository nudo è il punto in cui gli sviluppatori invieranno le modifiche locali)
  • Aggiungere un post-update aggancia al repository in public_html nel caso in cui qualcuno apporti modifiche al server ... anche se non dovrebbero

Non sono troppo preoccupato per i database al momento. Il mio problema principale ora riguarda le aggiunte/modifiche al file Joomla. Ovviamente, quando installo modelli ed estensioni, alcuni file verranno aggiunti e rimossi. Allo stesso modo gli aggiornamenti di Joomla causeranno cambiamenti.

Qual è il modo migliore per gestire queste modifiche sul server? Stavo pensando di scrivere un piccolo plugin che esegue onAfterRender o simile che utilizza PHPGit per eseguire git add ., git commitgit Push Origin master. Quindi, nella mia copia locale, posso solo fare un tiro e tutto passa. O c'è un modo migliore?

8
codinghands

Non capisco perché hai impostato la struttura nuda/pubblica;

Uso solo public_html come root del repository, con un .gitignore molto completo (che deve essere aggiornato dopo ogni nuovo aggiornamento di Joomla !, con git status trovi i nuovi file e li aggiungi in modo che non vengano sottoposti a versione).

Gli sviluppatori spingono verso i rami di sviluppo; alla fine, quando viene approvata una versione, viene nuovamente confrontata con il master, testata e portata alla produzione.

Non uso hook ma ho un paio di script che scaricano le parti di database pertinenti che desidero condividere, ma lascio all'utente l'esecuzione degli script di importazione, se lo desiderano; in questo modo se qualcuno sta lavorando su una nuova estensione, manterrà la propria configurazione fino a quando non sarà pronto per la condivisione.

Se si utilizza less/sass, è possibile che si desideri eseguire la compilazione negli hook post-commit per assicurarsi che i flag di compressione siano sempre attivi sul server.

- aggiornamento: .gitignore -

Non posso condividere qui il mio .gitignore poiché è soggetto a modifiche con ogni Joomla! aggiornare. Prima di tutto, assicurati che Eclipse .project .settings etc e altri file che desideri escludere siano in un master .gitignore insieme a configuration.php e .htaccess. Il mio maestro .gitignore assomiglia a questo per un sito con componenti cattivi che scrivono modifiche nelle proprie cartelle anziché cache e tmp; inoltre usa sass:

*/.sass-cache
/components/com_sobipro/var/cache/*
/components/com_djclassifieds/images/*
/components/com_sobipro/tmp/*
/components/com_sobipro/var/*
/log
/._db.sql
/logs
/stats
/components/com_sobipro/tmp/edit/*
/.buildpath
/.project
/.settings
/.htaccess
/images/icons/*
/images/photos/*
/images/sobipro/*
/images/classifieds/*
/administrator/cache/*
/tmp/*
/configuration.php
/index.php
/joomla.xml
*.txt

quindi inizio copiandolo (dalla radice del web):

cp /home/_core/.gitignore .

Quindi esplodere il pacchetto di aggiornamento (il pacchetto di aggiornamento completo) ed eseguire

find | sed "s/^\.//"  >> /home/yoursitefolder/public_html/.gitignore

WARNING non eseguire la ricerca sul sito live, solo sul pacchetto di aggiornamento!

Esegui un paio di test e vedi con lo stato git cosa verrà aggiunto ogni volta prima di finalizzare la procedura e scrivi degli script bash per questo: questo è quello che sto usando ma non è garantito che soddisfi le tue esigenze al 100%

4
Riccardo Zorn