2013-12-20 66 views
0

我有一個平臺文件CMS上的網站,我想通過Git進行部署。我希望能夠從本地計算機上工作並推送到實時服務器,但我還需要能夠通過CMS的Web管理面板編寫新內容,並將這些內容返回到我的計算機進入我的開發環境。Git部署,其中也可能從服務器提交更改

這樣做的最佳方法是什麼?我試圖在我的機器和服務器上安裝回放,並將服務器設置爲本地回購的遠程服務器。當我嘗試將更改推送到服務器時,出現錯誤。

remote: error: refusing to update checked out branch: refs/heads/master 
remote: error: By default, updating the current branch in a non-bare repository 
remote: error: is denied, because it will make the index and work tree inconsistent 
remote: error: with what you pushed, and will require 'git reset --hard' to match 
remote: error: the work tree to HEAD. 
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to 
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into 
remote: error: its current branch; however, this is not recommended unless you 
remote: error: arranged to update its work tree to match what you pushed in some 
remote: error: other way. 
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, set 
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'. 

我隨時可以改變遙控器的配置,以允許這一點,但我覺得有可能是因爲這是一個更好的解決辦法是默認不允許的。什麼是通過Git實現這個最好的方法?理想情況下,通過管理面板進行的更改會自動提交,但這可能要求太高。

回答

2

需要3個庫這個工作:

  1. 一個純倉庫這將是遠程其他兩個
  2. 普通的本地回購,你做你的工作,並推/拉從遠程
  3. 那是你的部署地點,從遠程升級拉,當你從你的CMS進行更改推服務器定期回購

您可以從任何現有回購這樣的裸回購:

git clone --bare source destination 

UPDATE

本博客文章解釋了一個有趣的方法,把部署目錄不是一個Git倉庫:

http://mattbanks.me/wordpress-deployments-with-git/

雖然工作樹本身是不是一個Git倉庫,你仍然可以運行這樣的Git命令:

GIT_DIR=/path/to/bare.git 
GIT_WORK_TREE=/path/to/work/tree 
git status 

我個人使用一個更復雜的方法,我在那裏有部署兩個網站:mysite.com和dev.mysite.com所以我的後收到鉤需要更多的邏輯知道要升級的部署,根據分支名字我推到:

http://www.janosgyerik.com/deploying-new-releases-using-git-and-the-post-receive-hook/

+0

我有這樣的設置和工作得相當好。感謝您的幫助。無論如何,當我在我的管理面板中進行更改時,我可以自動將其提交併自動推送到裸露的回購站點。這將顯着地簡化我的工作流程。 – raddevon

+0

我可能說得太快了一點。我使用http://mattbanks.me/wordpress-deployments-with-git/來設置我的裸存儲庫,以便自動簽出服務器上的部署路徑。但是,這使我無法將更改從服務器提交回repo,除非我錯過了某些內容,因爲工作樹本身不是git repo。你能否給我更詳細的指導,以便我可以從任何一方做出承諾? – raddevon

+0

您仍然可以通過黑客攻擊一些環境變量來提交,請參閱我的更新。我還添加了我個人使用的替代方法,其中部署目錄本身就是存儲庫。 – janos

0

如果你使用服務器的SSH密鑰到你的git倉庫,你應該能夠從服務器提交/推送,這與部署密鑰方法不同。但不建議這樣做,因爲您可能會因創建衝突而陷入困境。因爲解決服務器上的衝突可能是一項繁重的任務。