2012-03-20 80 views
0

直到今天我用以下方式git的:在我的網絡服務器作爲文檔根使用Git來維護網站

  • 克隆上

    • 主回購/路徑/ WWW我的電腦

    我通常在PC上做了很大的改變,並推送到服務器。做完這些之後,我不得不「git重置HEAD」和「git checkout」。在服務器上。有時候我會在服務器上做一些小的改動,然後把它拉回到PC上。這一切都工作正常,工作得很好,直到今天的時候,就推,git的抱怨

    remote: error: refusing to update checked out branch: refs/heads/master 
    etc. 
    

    爲什麼,6-12個月後,這應該現在失敗了呢?

    在找到http://toroid.org/ams/git-website-howto感謝StackOverflow問題後,我將/ path/www複製到/path/www.git,並將其作爲'裸'回購。文檔根目錄保留在/ path/www。我添加了一個包含「GIT_WORK_TREE =/path/www checkout -f」的.git/hooks/post-receive腳本。

    修改PC上的配置以指向www.git倉庫後,我現在可以像以前一樣推送,並且更改將在文檔根目錄中上載和更新。我有幾個關於這個問題:

    • 該howto意味着工作樹沒有.git元數據。這是真的嗎?我試着刪除它的.git目錄,但「git status」不再有效。將GIT_DIR設置爲/path/www.git並沒有幫助,因爲git說回購(在/path/www.git中的回購實際上並不是回購)。

    • 如果我更新index.html並在PC上添加somefile.html並推送這些更改,這些文件將更新/添加到服務器的doc根目錄中。但是,如果我在doc根目錄中使用「git status」,它會告訴我index.html已被更改,somefile.html是未跟蹤的文件。我天真地期待「checkout -f」會將工作樹更新到我從PC上推送的內容。我可以做到嗎?

  • 回答

    0

    的HOWTO意味着工作樹沒有git的元數據。這是 真的如此嗎?

    是的。你有一個裸回購安裝程序,並實際上爲您的網站獲取您的文件,你「暫時」分配一個工作目錄到裸回購,並檢查到你想要的網站路徑。這就是GIT_WORK_TREE=/path/www checkout -f所做的。出現在你面前的.git在您轉移到裸回購之前將會是您以前的設置的人工產物。

    但是,如果我的文檔根目錄使用「git的狀態」,它告訴我, 的index.html已更改,somefile.html是未跟蹤文件。

    再一次,這看起來像是以前的設置中存在.git的效果。刪除/var/www/.git

    我天真地預計,「結賬-f」將更新了 工作樹正是我從PC推。

    你的期望是正確的,這是它應該如何工作。如上所述刪除.git

    真正做一個git的狀態,去/var/www.gitGIT_WORK_TREE=/var/www git status

    PS:爲什麼你做你的服務器上這麼多的變化和git狀態?限制自己到你的電腦。

    +0

    謝謝,現在一切都很清楚。有時,在服務器上進行快速vi編輯比在PC上執行emacs快,然後按下,重置HEAD,結帳等 - 尤其是在糾正某些我想要快速更新的內容時。因此,我在服務器端的變化。也許我現在不會這樣做:-) – 2012-03-20 13:43:17