2011-01-13 42 views
8

我是新來的SVN和theres東西我堅持。最長時間我一直在本地開發網站(MAMP設置),然後在整個網站準備好後立即進行整個網站的生成。我在活網站上直接進行的任何小的其他更改,我經常會將活服務器上的所有文件重新下載到本地主機(因爲我永遠不會記住所有已更改的文件)。顯然這不是做事的最佳方式。我很好奇我如何在一個實時網絡服務器上設置SVN,所以我在本地製作的每一個變化都會在我告訴它時被推送到網站上。我在哪裏創建svn回購? /domain.com/www/svn?我可以創建www目錄作爲實際的回購,如果是的話,這是不好的做法?如何在活的apache服務器上使用svn?

+1

您的實時Web服務器是否連接到Subversion服務器? – jgifford25 2011-01-13 16:09:47

回答

7

請勿在Web服務器目錄中創建存儲庫!這是你問題的第一部分。

您的存儲庫可以在任何地方居住,只是不要將它放在web服務器的目錄中。

當你安裝的Apache httpd的(如果這是你使用的是什麼),將其設置爲忽略.svn目錄是這樣的:

<DirectoryMatch \.svn> 
    Order allow,deny 
    Deny from all 
</DirectoryMatch> 

現在,別的地方,除了你的Web服務器,創建一個Subversion庫。從其他地方的工作目錄中的該存儲庫簽出,該目錄不在您的Web服務器目錄中。您現在可以將所有將存放在您的存儲庫中的文件導入到您的Subversion存儲庫中。

一旦你這樣做了,你可以去你的Web服務器的目錄,你想這些文件出現,並做一個結帳。

你應該有三件事情:

  1. Subversion版本庫那不是在你的web服務器的目錄
  2. 一個工作目錄,其中包含您網站上的所有文件,這是不在您的網絡服務器的目錄中
  3. 一個在你的web服務器目錄中的工作目錄。

計劃是這樣的:你在工作目錄中進行的更改不在你的Web服務器的目錄中。您可以在這裏進行測試,並在此處進行修改。你也可以在這裏做所有的測試。

一旦您對所有事情都感到滿意,您就可以在Web服務器目錄下的Subversion工作目錄中執行svn update。因此,您在網絡服務器之外完成您的工作,測試,然後在網絡服務器目錄中執行svn update

如果你想變得很花哨,你可以創建一個Web分支,代表你的Web服務器目錄中的代碼。然後,你可以檢查你的代碼進出你想要的。當你準備好在你的網站上實現它時,你可以將它合併到Web分支。當你更新你的web服務器目錄中的工作目錄時,它只會提取web分支上的代碼。

事實上,你可以用某種cronjob自動化這個過程。關閉網站,更新Web服務器目錄中的Subversion工作目錄,然後重新啓動您的網站。這可以確保Web用戶正在查看的文件不會從它們下面更改。

+0

非常感謝您回答我的問題,但我仍然需要對svn做更多的研究,以確保我能理解它。我想出了一個快速圖表,你能檢查一下,看看我是否正確理解你? http://danramosd.com/svn_diagram.png – dan 2011-01-14 16:49:22

1

我會安裝在你的svn結帳的結構(在本機上)相匹配,你需要存儲(並不一定與服務器的結構)的文件,例如:

my-project 
my-project/docs/README.txt  (any documentation you want to write) 
my-project/www/index.html (etc) 

和等等。然後,

(1)如果你有訪問服務器上運行的命令,我會登錄並做如:

cd /domain.com 
rm -rf www 
svn co https://svn.myserver.com/my-project/www www 

(2),否則,我會檢查你的本地計算機上的文件並將它們傳送到服務器。

選項(1)更好,但即使使用選項(2),您也比目前的設置有優勢。如果您在服務器上更改文件,則可以將整個目錄返回到您的本地文件夾到一個新目錄,然後將文件「提交」到Subversion服務器。 Subversion(需要將.svn目錄複製到服務器/從服務器複製)將知道您更改了哪些文件。