有時我需要修改第三方庫以滿足我的特定需求。它可以是錯誤修復,性能改進,添加功能等。如何記錄第三方庫的修改?
例如,我將JSoup和Android支持庫源包含到我的項目中,並做了一些更改。我也對來自Android源代碼的2個Java文件做了同樣的事情。
我該如何記錄這個?
有時我需要修改第三方庫以滿足我的特定需求。它可以是錯誤修復,性能改進,添加功能等。如何記錄第三方庫的修改?
例如,我將JSoup和Android支持庫源包含到我的項目中,並做了一些更改。我也對來自Android源代碼的2個Java文件做了同樣的事情。
我該如何記錄這個?
不要。維護庫的分叉版本是很痛苦的,特別是當你想升級庫並需要一遍又一遍地修改你的修改時。更別說有一天有人會忘記你的版本並使用標準版本。
因此,總是試圖包括未經您的更改而失敗的測試用例(在您的代碼中公開外部庫中的錯誤)。
總是將您的更改提交給原作者/維護者。提交問題幷包含您的修補程序。如果您的更改值得違反規則-1,它可能會包含在下一個版本中。
提交庫的原始源文件沒有任何改變。然後用描述性信息提交每一個改進/錯誤修復。最好包括指向您(或圖書館)票務系統中解釋的問題/票證ID。
通過這種方式瀏覽此給定目錄或項目的提交列表時,您可以輕鬆查看已更改的內容。如果提交消息不足以描述分叉和修改外部庫的需求,則可以隨時瀏覽問題/故障單。在理想的世界中,這樣的提交也是理想的補丁(參見規則0)。
獎金:我曾經有自動分流,並通過maven插件補丁外部庫的想法。基本上我們指示這個假設的插件將特定的補丁應用於特定的庫。 Maven可以輕鬆地下載源代碼,自動重建,安裝幷包含修改後的版本,而不是目標工件中的原始版本。
無需維護分叉二進制文件,只需提供該補丁仍然可以在新版本中完整應用即可輕鬆升級。這裏有空閒時間太多的人嗎?
+1 - 是的,沒錯。寫得很好。 – duffymo
insightfull和乾淨的很好的答案 – Namphibian
任何你想要的 - 這是你的現在。我從不修改別人的圖書館。他們應該爲定製提供鉤子,但是當我修改它時,我必須永遠將這種變化轉移。當然你想這樣做? – duffymo