我正在處理一個頻繁合併併發布到生產環境的Web項目。我希望存儲庫包含所有曾經推送到生產服務器上的所有內容的完整記錄,主要是爲了能夠在三個星期前分析錯誤日誌條目,以確切瞭解當時生產的代碼。如何在Git中記錄Web項目的發佈歷史?
我不能使用release
分支,因爲在Git中,沒有在特定分支上提交的提交歷史的概念。我們目前使用release
分支,但它不能回答「三週前生產的代碼是什麼」的問題。
那麼,我該如何在Git中做到這一點?
我正在處理一個頻繁合併併發布到生產環境的Web項目。我希望存儲庫包含所有曾經推送到生產服務器上的所有內容的完整記錄,主要是爲了能夠在三個星期前分析錯誤日誌條目,以確切瞭解當時生產的代碼。如何在Git中記錄Web項目的發佈歷史?
我不能使用release
分支,因爲在Git中,沒有在特定分支上提交的提交歷史的概念。我們目前使用release
分支,但它不能回答「三週前生產的代碼是什麼」的問題。
那麼,我該如何在Git中做到這一點?
標籤是用於在git上使用這種類型的。你可以閱讀關於標籤here。
根據你的問題,你可以有一個所有標籤的列表,因此知道什麼已經發布。在git的SCM-書對此的例子是:
$ git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4
檢出特定的標籤將讓你在完全相同的條件代碼被髮布時。
你甚至可以爲GPG簽名標籤,這可以在共享存儲庫中有所幫助,如果你打擾任何人混淆(無論是故意還是意外)。
請注意:
默認情況下,混帳推命令沒有標籤傳輸到遠程服務器 。創建完成後,您必須將標籤顯式推送到共享服務器 。這個過程就像共享遠程 分支 - 你可以運行git push origin [tagname]。
因爲如果您認爲它會導致嚴重的頭痛。
和git一樣,你真正需要的只是提交的內容,所以根據你的需要寫下來就足夠了。
如果每個代碼推送到生產是合併到發佈分支中,您將提交名爲Merge branch 'master' into release
的提交,併發生合併發生的時間戳。在git的日誌上,默認情況下你只會看到當前分支的提交,所以你可以通過使用合併的時間戳來確定在當前推送的release
分支中最新的提交是什麼。
當您爲生產構建版本時,您可以創建代表此特定構建的標記,或者只保存該特定提交的當前SHA1哈希。
有了一些額外的構建邏輯,您可以使用此散列號對您的版本進行品牌標記,以唯一標識您的版本。 一些例子如何在ANT-Build中做到這一點可以找到here。
爲什麼不將提交標記爲「發佈$ timestamp」?這對於自動部署非常有效。 – mbx
@mbx當然,我不知道。我在這裏問:)在我以前使用過的所有其他SCM中,我會使用一個分支,但是我不能在Git中,因此是一個問題。 –
每次發佈符合要求時都不會設置標籤? – Simon