我想使用git來管理遠程服務器上的一些數據,所以我在那裏建立了一個非裸露的存儲庫。我可以毫無問題地推送它,並且存儲庫本身會更新,但實際文件不會被更改/添加/刪除。我必須ssh進入服務器,並執行Git:如何在推送到遠程目錄時進行更新?
git reset --hard HEAD
獲取文件結構以實際更新。
要做什麼?
我想使用git來管理遠程服務器上的一些數據,所以我在那裏建立了一個非裸露的存儲庫。我可以毫無問題地推送它,並且存儲庫本身會更新,但實際文件不會被更改/添加/刪除。我必須ssh進入服務器,並執行Git:如何在推送到遠程目錄時進行更新?
git reset --hard HEAD
獲取文件結構以實際更新。
要做什麼?
你不應該這樣做。建議使用裸存儲庫。換句話說,沒有文件檢出,只是.git目錄本身。然後,您可以將存儲庫檢出到服務器上的其他位置 - 比如說您的web根目錄。這樣,您將得到:
git best practice。根據Git文檔,如果你不遵守它,你可能會得到「意想不到的結果」。任何編程完成的人都知道,「意想不到的結果」是代碼「可能會吃掉你的孩子,應該不惜一切代價避免。」
更好的安全性,如果你打算讓服務器上的檢出文件可以從網絡服務器訪問。
對簽出的代碼進行本地修改,並且能夠快速更改實時簽出的代碼。您可以嘗試直接在存儲庫上執行此操作,但這會很麻煩並且更容易出錯。
能夠更新您的服務器存儲庫,而不必更新您的實時服務代碼。這非常重要,如果您正在遠程工作並需要向服務器發送某些內容,然後在準備好實時服務之前做進一步工作,或者如果您的實時服務代碼發生更改(例如,不同的配置設置),並且需要將這些更改與回購中的更改合併在一起,但現在不能這樣做。
我建議以下步驟:
Git版本1.9.1
Ubuntu服務器14。04 LTS
LAMP服務器
設置我的LAMP服務器來更新我的Git回購我的工作目錄,每當我的web開發一個推更改了服務器。我注意到日誌會記錄新的提交,但不會更新工作目錄。對於每次更新,不要手動執行此操作(git checkout -f),可以在接收到推送後自動設置。
#/ bin/sh的
#更新工作目錄:
與此內容的「掛鉤」文件夾中創建一個名爲「後收到」文件!
#這應該針對git工作目錄。
GIT_WORK_TREE = /無功/網絡/ dev_site GIT中結帳-f
啓用權限通過鍵入在 「掛鉤」 文件夾 「使用chmod + X後接收」 來執行該文件。
當提交到Git倉庫時,它將會更新工作目錄。我的網站現在顯示當我在瀏覽器中訪問它時所做的更改。
我的工作目錄是/ var/WWW/dev_site
GIT_WORK_TREE行應該指向你的工作目錄。 – 2015-01-28 00:02:43
這是一個定期回購,而不是一個裸回購。裸露的回購沒有工作目錄。 – 2015-01-28 00:25:07
這令人高興的是,現在直接支持Git的本身!你可以找到這個答案的細節,我剛纔upvoted:
https://stackoverflow.com/a/38363683/85360
它建議遠程與
git config receive.denyCurrentBranch updateInstead
配置這樣是推動導致更新的工作副本!
太好了,謝謝!我非常感謝SO如何讓我跟蹤我曾經問過的事情。我認爲接受答案中的許多要點仍然有效(也許並不是「檢出代碼的實時更改」),但對於許多情況下可能不是「生產使用」的情況,這非常有用。 – Felixyz 2016-11-19 18:34:45
非常有用的答案。謝謝! – Felixyz 2009-09-21 20:48:24
但至少對於各種非生產設置,請參閱Brandon Rhodes的答案。 – Felixyz 2016-11-19 18:35:30