2012-11-28 67 views
52

我是一名WordPress設計師/開發人員,他越來越多地使用版本控制,特別是Git,儘管我在某些項目中使用了SVN。我目前正在使用Beanstalk作爲我的遠程回購。在MySQL數據庫上使用版本控制(Git)

將所有的WordPress文件添加到我的回購中是沒有問題的,如果我想知道我可以.gitignore wp-config文件,但是因爲我是唯一的開發者,所以當前這些項目都是封閉源碼,這確實沒有什麼意義。

與任何CMS一樣,WordPress在很大程度上依賴於數據庫來保留文本內容以及許多設置,具體取決於我正在使用的特定插件/主題配置。我想知道在數據庫上使用版本控制的最佳方法是什麼,如果甚至可能的話。我想我可以做一個SQL轉儲,雖然我的MySQL服務器在Windows上運行(閱讀爲:我不知道該怎麼做),然後將SQL轉儲添加到我的存儲庫。但是當我推動一些生活時,這會帶來巨大的安全威脅。

有沒有一個公認的做法呢?

+0

我轉儲數據庫並將其檢入版本控制。但我不會推送到Wordpress項目上的服務器(git並不總是可用於共享主機)。所以通常我通過FTP手動上傳,就像那樣糟糕。在使用git進行部署時有興趣聽到一些正確的做法。 –

+0

此外,您可以將數據庫檢入到'develop'分支,並使用[這裏](http://stackoverflow.com/a/8014154/551093)技術來排除數據庫被合併到'master'中。然後只從'master'部署。理論上,這應該起作用。 –

+0

我爲「WordPress的版本控制」做了一個快速的谷歌,並找到了這個WordPress的插件列表:http://wordpress.org/extend/plugins/tags/version-control他們中的任何一個會有用嗎? –

回答

18

你可以在git倉庫中備份你的數據庫。當然,如果你把數據放入二進制形式的git中,你將失去所有git使用差異(變化)有效存儲數據的能力。所以最好的做法是:將數據以文本序列化格式存儲。

mysqldump是一個合適的程序來幫助你做到這一點。儘管如此,它並不完美。如果有什麼干擾項目的序列化順序(例如,由於創建新表格等),那麼人爲的中斷將進入diff。這會降低存儲效率。你可以編寫一個自定義的串行器來只改變序列化,但是你正在做git已經很擅長的努力工作。只需使用SQL轉儲。

這就是說,你想要做的不是什麼開發人員通常意味着當他們談論把數據庫放在git中。例如,如果您閱讀@eggyal(link to codinghorror)發佈的鏈接,您會看到實際放置在git中的是生成初始數據庫所需的腳本。可能會有其他腳本,比如那些用乾淨狀態填充數據庫數據,或者用測試數據填充數據庫的數據。所有這些sql腳本都是文本文件,與您從mysqldump獲得的sql轉儲格式幾乎相同。所以沒有理由不能用你的日常數據這樣做。

+9

對於大多數企業應用程序來說,在版本控制下放置生成數據庫所需的腳本就是所有這些需要。但對於像WordPress這樣的內容管理系統,數據庫中的很多內容是有效的代碼和配置,而不是最終用戶數據。代碼和配置需要受版本控制,即使它們作爲數據存儲在SQL錶行中。 WordPress對你而言並不容易。 –

+1

@Catcall我同意。當我說一些sql腳本可能以乾淨的初始狀態填充數據庫時,我就是這麼說的。如果您想根據某種預先配置的狀態快速部署多個WordPress網站,則所描述的策略將非常有效。與所需的插件首選配置等 –

5

文章How to Sync A Local & Remote WordPress Blog Using Version Control給出瞭如何使用Mercurial自動化WordPress博客的兩個實例(開發,製作)之間同步的建議。提到的是,對於這種情況,Git和Mercurial非常相似。

步驟4(同步數據庫)在這裏很有用。

數據庫內容將被導出到由修訂控件跟蹤的文件。每次我們進行更改時,數據庫內容都將被此文件替換,從而使我們的數據庫保持最新狀態。

然後,它詳細闡述了衝突和作業的腳本部分。

有一個version control tutorial in Mercurial在那裏,如果你不熟悉它。

0

請注意,Wordpress會將所有新聞提要內容存儲在數據庫中,因此即使您未做任何更改,也會有很多不斷變化的內容。

+0

自動提交呢? –