2012-11-28 18 views
52

Sono un designer/sviluppatore di WordPress, che sta diventando sempre più coinvolto nell'utilizzo del controllo di versione, in particolare Git, sebbene utilizzi SVN per alcuni progetti. Attualmente sto usando Beanstalk per il mio repo remoto.Uso del controllo di versione (Git) su un database MySQL

Aggiungendo tutti i file di WordPress al mio repo non è un problema, se volevo So che potrei .gitignore il file wp-config, ma visto che sono l'unico sviluppatore, attualmente, e questi progetti sono closed source , ha davvero poco senso.

WordPress fa molto affidamento sul database, come qualsiasi CMS, per mantenere il contenuto testuale e molte impostazioni a seconda della specifica configurazione di plugin/tema che sto utilizzando. Mi chiedo quale sarebbe il modo migliore di utilizzare il controllo della versione sul database, se è anche possibile. Credo che potrei fare un dump SQL, anche se il mio server MySQL è in esecuzione su Windows (leggi come: non so come farlo), e quindi aggiungere il dump SQL al mio repository. Ma quando spingo qualcosa in diretta, questo comporta enormi minacce alla sicurezza.

Esiste una pratica accettata per fare ciò?

+0

Eseguo il dump del database e lo controllo nel controllo di versione. Ma non spingo al server su progetti Wordpress (git non è sempre disponibile su hosting condiviso). Quindi, in genere, carico manualmente tramite FTP, per quanto sia così male. Interessato a conoscere alcune pratiche corrette durante l'utilizzo di git per la distribuzione. –

+0

Inoltre, è possibile mantenere il database controllato in un ramo 'sviluppo' e utilizzare la tecnica [qui] (http://stackoverflow.com/a/8014154/551093) per escludere il database dall'unione in' master'. Quindi distribuire solo da 'master'. In teoria, dovrebbe funzionare. –

+0

Ho fatto un rapido google per "Controllo versione di Wordpress" e ho trovato questo elenco di plugin Wordpress: http://wordpress.org/extend/plugins/tags/version-control Qualcuno di loro sarebbe utile? –

risposta

18

È possibile eseguire il backup del database in un repository git. Naturalmente, se si inseriscono i dati in git in formato binario, si perderà tutta la capacità di git di archiviare in modo efficiente i dati utilizzando diff (modifiche). Quindi la best practice numero uno è questa: archiviare i dati in un formato serializzato di testo.

mysqldump è un programma adatto per aiutarti a farlo. Non è perfetto però. Se qualcosa disturba l'ordine di serializzazione degli oggetti (ad esempio come risultato della creazione di nuove tabelle, ecc.), Le interruzioni artificiali entrano nel diff. Ciò ridurrà l'efficienza dello storage. Potresti scrivere un serializzatore personalizzato per serializzare solo le modifiche, ma poi stai facendo il duro lavoro a cui git è già abile. Basta usare il dump sql.

Ciò detto, ciò che si vuole fare non è ciò che gli sviluppatori normalmente intendono quando si parla di inserire il database in git. Ad esempio, se leggi il link pubblicato da @eggyal (link to codinghorror) vedrai che ciò che viene effettivamente inserito in git sono gli script necessari per generare il database iniziale. Potrebbero esserci script aggiuntivi, come quelli per popolare i dati del database con uno stato pulito, o per popolarlo con dati di test. Tutti questi script sql sono file di testo e praticamente lo stesso formato del dump sql che si otterrebbe da mysqldump. Quindi non c'è motivo per cui tu non possa farlo in questo modo anche con i tuoi dati quotidiani.

+9

Per la maggior parte delle applicazioni aziendali, inserire gli script necessari per generare il database con il controllo della versione è tutto ciò che è necessario. Ma con i sistemi di gestione dei contenuti come WordPress, molte cose presenti nel database sono effettivamente codice e configurazione, non dati dell'utente finale. Il codice e la configurazione devono essere controllati dalla versione, anche se sono archiviati come dati in righe di tabelle SQL. WordPress non ti rende così facile. –

+1

@Catcall Sono d'accordo. Questo è quello di cui stavo parlando quando ho detto che alcuni degli script sql potrebbero popolare il database con stato iniziale pulito. La strategia descritta sarebbe molto efficace se si desidera implementare rapidamente diversi siti wordpress in base a uno stato preconfigurato, ad es. con una configurazione iniziale preferita dei plugin desiderati, ecc. –

5

L'articolo How to Sync A Local & Remote WordPress Blog Using Version Control fornisce consigli su come automatizzare la sincronizzazione tra due istanze (sviluppo, produzione) di un blog WordPress utilizzando Mercurial. È accennato che per questo scenario, Git e Mercurial sono molto simili.

Il passaggio 4 (sincronizzazione dei database) è di interesse qui.

Il contenuto del database verrà esportato in un file monitorato dal controllo di revisione. Ogni volta che apportiamo modifiche, il contenuto del database verrà sostituito da questo file, rendendo il nostro database aggiornato.

Quindi, elabora i conflitti e la parte di script del lavoro.

C'è un version control tutorial in Mercurial là fuori, se non si ha familiarità con esso.

7

Non ci sono molti software disponibili per database di controllo delle versioni come MySQL e MongoDB.

Ma uno è in fase di sviluppo e la versione beta sta per essere lanciata a breve.Controlla Klonio - Version Control for databases

0

Ricorda che Wordpress memorizza tutti i contenuti del feed delle notizie nel database, quindi anche se non apporti modifiche, ci sarà un sacco di contenuti che cambiano.

+0

Che dire del commit automatico? –

Problemi correlati