2012-04-10 52 views
1

我有兩個非裸git倉庫,一個在我開發一個本地計算機和第二的服務器,在我所要建造的。在本地存儲庫中,我有一個使用「git push -f服務器」的提交後掛鉤。每次我在本地機器上提交時,都會將更改推送到服務器。 不幸的是,在遠程git階段「恢復」了我的更改。我必須手動在服務器上執行「git reset HEAD --hard」,這非常煩人。我該如何告訴git接受更改而不進行恢復,或者如何自動在服務器上進行重置?我試圖在服務器上添加一個post-receive鉤子,但它不起作用。如何在推送後重置遠程分階段更改?

我發現了一個類似的問題How do I push to the current git branch on remote, and have changes reflected immediately?,但它並沒有幫助(

+0

原來是很簡單的: 不要忘記給鉤子的可執行權限! 正常工作現在) – 2012-04-10 10:14:59

回答

0

你的選擇:

 
    $ cat > hooks/post-receive 
    #!/bin/sh 
    GIT_WORK_TREE=/var/www/www.example.org git checkout -f 
    $ chmod +x hooks/post-receive 
  • 或者,你可以推到裸露的回購協議,並有一個鉤切換到實時非裸露的回購協議,從裸回購拉動新的提交:
    請參閱「Git submodule on remote bare」(你可以忽略該子模塊方面)

我傾向於第二種方法,這似乎「更清潔」比在非裸露回購直接改變HEAD

+0

謝謝,VonC。 不幸的是,服務器上的post-receive hook很慢,因爲它似乎在本地機器上執行,這意味着通過網絡訪問文件。項目相當龐大,重置需要幾分鐘。 「git config receive.denyCurrentBranch warn」沒有任何區別。 – 2012-04-10 14:20:52

+0

@YuriyKulikov這不應該是一個案件後接收設置在裸回購,因爲說裸回購只是在比實時非裸露回購同一個盒子。沒有網絡invoved。 – VonC 2012-04-10 14:29:49