2012-08-13 72 views
1

我目前正在測試出通過部署Git的網站時遇到了問題了解以下內容:結帳的Git遠程裸回購到舊的分支

目前,我有我的開發環境裸遠程回購與後接收將GIT_WORK_TREE設置爲我的webroot的鉤子。我從我的本地回購協議推到那裏,語法如'git push DEV master'。這很好。不過,我也有一個'開發'分支,我推送到DEV(post-receive鉤子設置爲'git checkout -f [BRANCH_NAME]),這也很好。

我的問題是針對以下情況:假設我在DEV上找到一個錯誤(從'develop'分支推送),但我沒有時間修復它(可能當天有客戶審查)。我希望能夠做一個'git push DEV master'(主分支擁有最後一個無bug推送到DEV,並且是DEV當前開發提交的祖先)並且完成它。但是,當我這樣做時,遠程回購告訴我'一切都是最新的!我想這是有道理的,但我想要做的就是強制git從'master'分支中推送,並觸發post-receive鉤子,這對於正確部署Web資產是必需的。我試着直接到ssh的遠程倉庫,並試圖從那裏結算主人,但它告訴我我需要一個工作樹來做到這一點(因爲它是裸露的,我假設)。

這樣做的正確方法是什麼?如果可能的話,我想盡量避免進行復位或重新綁定,但也許這是唯一的方法。

回答

1

,但我想這樣做是力混帳採取從 「主」分支推反正火後收到鉤,這是 必要的網絡資產的適當部署。

問題是,您已經將更改推送到您的遠程,所以沒有什麼可推動的。您的選項包括:

  • 在您的本地分支中強制更改...例如,通過更新文件中的序列號,提交和推送。
  • 只需手動運行服務器上的post-receive鉤子,即可填寫必要的環境變量。

如果您有一個存儲庫和一個工作樹(可能通過自己設置GIT_WORK_TREE),轉到遠程存儲庫並試圖檢出主分支應該可以工作。但是,這不會觸發post-receive鉤子,因此您需要手動處理其中的任何其他邏輯。

+0

很好的回答,謝謝。我會稍微等一下,看看有沒有其他建議,但我一定會在今晚嘗試這些。 – user1193694 2012-08-13 20:37:40

+0

你對GIT_WORK_TREE btw完全正確;對於其他人可能希望在遠程回購中執行同樣的事情,其中​​工作樹與回購本身是分開的,請使用以下語法。git目錄:GIT_WORK_TREE =/path/to/work/tree git checkout [branch_name] – user1193694 2012-08-13 21:11:30

0

使用標籤。例如,將您當前部署的版本標記爲'當前',推送此標籤並讓您的post-receive-hook在此標籤上執行操作。

#!/bin/sh 
read oldrev newrev refname 

$ refname現在包含/ revs/tags/current和$ newrev包含已標記提交的散列。要更改爲其他修訂版本,請刪除「當前」標籤,並將其設置到別處並推送標籤。這樣您就不需要在文件中進行虛擬變更。

+0

很酷,謝謝,下次我會在這種情況下嘗試這種方法 – user1193694 2012-10-10 01:12:23