簡體   English   中英

在git中替換master分支並防止快進

[英]Replacing the master branch in git and preventing fast forward

我在github上有一個庫,大約一年前,我對應用程序進行了完全改寫,該應用程序不向后兼容。 它在稱為“結構化”的分支上。 現在,大多數正在安裝該庫的人都在使用該分支,我想將其作為母版並將當前母版移至“舊版”。

我不希望舊主機上的人能夠快速升級到新主機,因為這肯定會破壞他們的應用程序。 是否可以將它們轉移到舊版分支,或者至少引發異常並顯示一條消息,告訴他們檢出舊版分支?

我認為除非您實現一個鈎子,否則是不可能的,但這樣做並不值得。

我認為我只是在服務器上克隆存儲庫,將舊存儲庫保留為原樣,如果需要的話提取錯誤修正,並為新的“結構化”庫創建另一個存儲庫。

沒有辦法轉移它們,因為Git分支只是標簽:沒有辦法告訴新的master分支與舊的master分支有什么不同。

我認為,如果客戶不希望它破壞master分支,那么從master分支中克隆是一個壞主意。 為此,您應該具有發布分支或標簽,然后人們可以從它們進行克隆,他們將知道他們有一個穩定的分支,該分支可能僅獲得向后兼容的更新(對於分支而言)或永不更改(對於標簽)。

至於警告,這也不可能,因為當有人從服務器上獲取消息時,您沒有鈎子可以掛在服務器上運行(只能用於推送)。 您只需要在GitHub頁面上清楚地編寫即可。

另一個想法是修改master的最后一次提交,以使其不再是舊master的快速提交。 並以引起沖突的方式進行。 這樣,只要有老主人的人牽拉,他們就會發生沖突,必須檢查發生了什么。

至於問題的“轉移”部分,您可以始終在新主服務器上進行首次提交時執行以下操作:

#ifndef IMPLEMENTED_STRUCTURED
#error "The master branch of project x has been completely rewritten and will break legacy applications.  If you are unable to update your application, switch to the legacy branch of this project and your code should continue working as before.  If you want to use the new structured code, simply add a preprocessor definition for IMPLEMENTED_STRUCTURED to get rid of this error message."
#endif

這將使任何人的代碼無法成功編譯,直到他們閱讀消息並決定要采取的措施為止。

如果您不使用C / C ++,希望您的語言具有可以實現類似行為的功能。

暫無
暫無

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

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