2009-01-13 38 views
20

很久以前,我試圖理清本地,web服務器和顛覆之間的系統。我在this question上得到了一些很好的解釋。從顛覆到推動網絡服務器

不幸的是我在整個從SVN推送到一個Web服務器部分,並從未重新訪問的路上。我所有的項目都是獨立的,所以我是唯一一個開發他們的人,而且我經常是唯一的用戶。所以我大部分時間都能夠直接寫入實時服務器。

對於2009年,我想打破這種壞習慣,並以正確的方式做事。我可以通過SSH訪問我的Web服務器(我可以登錄並瀏覽文件),但不知道如何才能將最新的文件從SVN中取出到服務器中。

我已經將我的手指搜索到了骨骼,但是我發現的所有東西都需要一些我還沒有的知識。

我真的非常感謝如何自動將我的代碼的最新版本從SVN回購站點推向實時Web服務器。僅供參考我目前使用Beanstalk進行Subversion託管,但如果有人有更好的建議,我完全願意改變。

謝謝

回答

29

如果您有SSH訪問,你可以這樣做:

SVN導出的[url到回購] [網絡 目錄]

出口將意味着你沒有得到.svn文件包袱附帶一份工作副本。

3

只需 - 登錄到您的服務器機器並檢出存儲庫內容。這應該只做一次。

$ svn checkout [http|svn|whatever_you_got_there]://{your_svn_repo} {checkout_directory} 

你需要更新最新的一個工作拷貝每次,執行update

$ cd {checkout_directory} 
$ svn update 
+0

這是令人震驚的酷:)任何recs的SSH客戶端(使用膩子在此刻)或腳本此方法(最好使用PHP)的方式? – Evan 2009-01-13 08:58:10

+3

你真的不想將工作拷貝檢出到你的服務器上。 – 2009-01-13 09:01:27

+1

史蒂夫,你是什麼意思?那麼你將如何進行更新? o_O – ohnoes 2009-01-13 10:28:33

1

發佈管理

您可以創建一個工作/批其出口的SVN到本地夾。導出後您可以使用rsync將其上傳到 。

作業可以通過svn鉤子自動執行。

你也可以使用mtod的方式,但要記住: 在服務器上使用結帳是一種安全風險,如果有人可以訪問.svn文件夾! 他們可以訪問php代碼並查看密碼或錯誤。

0

除非您的託管公司允許您訪問cron(1)或shell,否則由於svn(集中式VCS)無法將某些內容推送到工作目錄,因此您應該使用svn update,這將非常困難。

幾種方法可以做到你想要什麼,取決於可用上述資源:

  1. 定義crontab(5)條目確實cd $WEBSITE && svn update
  2. 使用ssh連接到你的網站,做同樣的命令。 ssh可以通過crontab條目自動執行。
  3. 在您的網站上有一個特殊的cgi,希望能夠通過密碼進行保護,可以定期運行(從您的端cron)執行相同的命令。

對我來說最好的方式仍然是轉向分散的VCS(如Mercurial或git),但這是一個更大的項目。

0

前段時間我有點類似question,但是我沒有通過SSH訪問我的服務器,所以我的選項非常有限。

根據您的項目大小,您可能會考慮不進行導出。在我的情況下,該項目是一個數據的演出!不實用,因爲在導出時需要一遍又一遍地導出所有文件。如果你只有一堆文件,它可能會有所不同。此外,在本地計算機上執行導出意味着導出需要先下載文件,然後將其上傳到您的主機,這就像是浪費帶寬。

另外請記住,做一個SVN導出不會做任何數據庫更新。例如,當你開發你的網站時,你的數據庫可能會改變五次。只需要SVN導出,您仍然需要手動重新導入服務器上的數據庫。

我建議你寫一個腳本放在服務器上。您可以根據需要精心製作此腳本,但裸骨腳本會在您的站點的已簽出版本上執行「更新」,將數據庫導出到臨時文件夾中(您的數據庫當然也已放置在版本控制下)並重新導入數據庫(或合併它,無論它需要做什麼)。只需一個命令,您就可以部署您的網站。一而再,再而三。

有些工具可以幫助您進行這種自動化,如CruiseControlCapistrano

0

你說'自動推送'。這可以通過post-commit鉤子來完成。我一直一個人的開發人員和採用設置像這樣的PHP開發:

VPS LAMP堆棧與Apache的mod_dav_svn的處理SVN職責 託管該網站的「升級」版本。該網站的「升級」版本實際上是一個工作拷貝,剛剛簽出本地,在目錄中的Apache可以從

本地VMware虛擬機 服務運行NetBeans和LAMP堆棧,與安裝調試PHP

的XDebug

我的工作流程是這樣的:

退房從我的VPS工作拷貝到我的VMware虛擬機 獲得從VPS和進口通過phpMyAdmin的數據庫轉儲到MySQL虛擬機 開發我的屁股上,所有本地 在結束或當天,導出我的數據庫並將其上傳到VPS上的MySQL 將我的更改提交到VPS

問題的關鍵在於提交後的掛鉤 - 它是一個SVN中的文本文件,在每次提交事件之後都會被解析。你可以調用一個shell腳本,並且該shell腳本執行'svn update'來更新Apache提供的暫存站點的工作副本。

我想你可以很容易地讓shell腳本將SVN導出到臨時目錄中,但這可能需要一段時間才能運行,而對工作副本的更新只是放置更改。

這些說明相當擡高了,但他們是我的個人小抄設置這樣的事情的時候了,我用:

http://random.siliconrockstar.com/dev_ShellScriptingAndNixAdmin/SVN.txt

如果你願意,我也有虛擬機的一個副本NetBeans全部配置爲用於開發,我曾經將它們交給初級開發人員。如果你想要一份副本就在我身上。