我希望用戶創建的所有標籤都被驗證(並在必要時重命名)以滿足我們的規則。
例如,如果用戶已創建"v1.2.3"
標記,則應將其自動更名爲"v1.02.03"
。如何使用git鉤子自動重命名標籤?
不幸的是,沒有git掛鉤存在正在被git tag
命令調用。
這就是爲什麼我實現了pre-push
掛鉤,它會刪除舊標籤並在同一提交中創建一個新標籤(使用修改後的名稱)。
問題是,git push --tags
將舊標籤發送到遠程回購而不是新標籤(儘管舊標籤在預推鉤已經刪除後不再存在)。
如何在推送到遠程回購之前自動重命名本地回購標籤?
編輯:
我通過在服務器端複製標籤重命名邏輯來post-receive
鉤解決我的問題。
至今爲止,標籤「v1.2.3」在客戶端被pre-push
掛鉤重命名爲「v1.02.03」,但舊標籤名稱(「v1.2.3」)被推送到遠程倉庫,並在遠程倉庫「通過post-receive
鉤子再次將v1.2.3「重命名爲」v1.02.03「。現在客戶端和服務器都重新命名了標籤。
我應該說我對我的解決方案感到不滿嗎?
純客戶端解決方案仍然受歡迎。
在我看來,這似乎是標籤沒有正確刪除的情況。你能在這裏分享預推鉤的代碼嗎? –
@mu - 標籤被正確刪除,我看到鉤子打印的成功操作信息。我的代碼包含以下行:'os.execute('git tag -d''..tagname ..''&& git tag''..new_tag_name ..'''..commit ..'&& echo TAG RENAMED | |迴應失敗重新標記')'。我看到它們在'git push --tags'完成後實際上被刪除了。 –