簡體   English   中英

git checkout遠程裸倉庫回舊分支

[英]Git checkout remote bare repo to an older branch

我目前正在測試通過Git部署網站,但無法理解以下內容:

當前,我在DEV環境上有一個裸露的遠程倉庫,帶有一個后接收掛鈎,該掛鈎將GIT_WORK_TREE設置為我的webroot。 我使用“ git push DEV master”之類的語法從本地存儲庫推送到那里。 這很好。 但是,我還有一個“開發”分支,我將其推送到DEV(接收后掛鈎設置為“ git checkout -f [BRANCH_NAME]”),這也很好用。

我的問題是針對以下情況:假設我在DEV上發現了一個錯誤(從“ develop”分支推送),但是我沒有時間修復它(也許那天有客戶評論)。 我希望能夠做一個“ git push DEV master”(master分支具有對DEV的最后一個無錯誤的推送,並且是當前在DEV上進行開發提交的祖先)並完成它。 但是,當我這樣做時,遠程倉庫會告訴我“一切都是最新的!” 我想這是有道理的,但是我想做的是強制git從'master'分支中進行推送並以任何方式觸發post-receive掛鈎,這對於正確部署Web資產是必需的。

我嘗試直接進入ssh中的遠程倉庫,並嘗試從那里檢出master,但是它告訴我我需要一個工作樹來執行此操作(因為我認為它是空的)。

正確的方法是什么? 如果可能,我想避免進行還原或變基,但這也許是唯一的方法。

,但是我想做的是強制git從'master'分支中進行推送並以任何方式觸發post-receive鈎子,這對於正確部署Web資產是必需的。

問題在於您已經將更改推送到了遠程服務器,因此沒有什么可推送的。 您的選擇包括:

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

前提是您既有存儲庫又有工作樹(可能通過自己設置GIT_WORK_TREE ),那么轉到遠程存儲庫並嘗試檢出master分支應該可以。 但是,這不會觸發您post-receive掛鈎,因此您需要手動處理其中的任何其他邏輯。

使用標簽。 例如,將您當前部署的版本標記為“當前”,按下該標記,然后讓您的接收后掛接操作該標記。

#!/bin/sh
read oldrev newrev refname

現在,$ refname包含/ revs / tags / current,而$ newrev包含標記的提交的哈希。 要更改為其他版本,請刪除“當前”標簽,並將其設置在其他位置,然后將其推送。 這樣,您無需在文件中進行虛擬更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM