[請益] 用 Git 實現不同版本的方法?

作者: k1dave6412 (朔月星痕)   2021-01-07 17:51:55
目前工作上遇到這樣的問題
有 Project A 因為不同客戶需求不同分出了
Project A'、Project B (Fork),但 Project A 的更新又得 merge 進 A' 及 B
有點繼承的感覺
但是實際上 Merge 的結果卻不是我想的
示意圖:
https://i.imgur.com/5tGuKIJ.jpg
請問這樣的狀況是有什麼地方做錯
或者是說這樣的 case 分 branch 就好呢?
作者: longlyeagle (長鷹寶寶實驗室)   2021-01-07 17:55:00
最好是可以模組化把general function包成library分成不同的project給不同客戶 customer project只存客製化的東西 general function都放回library然後用引用library的版本控制功能推進
作者: k1dave6412 (朔月星痕)   2021-01-07 17:58:00
repo 的內容是 web service但是客製的部份大都是另外新增的所以想說是不是可以有繼承 A 的方法
作者: leolarrel (真.粽子無雙)   2021-01-07 17:58:00
善用分支是非常推薦的作法
作者: k1dave6412 (朔月星痕)   2021-01-07 17:59:00
主要用 Gitlab 進行,剛剛有測試這樣的狀況在 Github是不能用的
作者: longlyeagle (長鷹寶寶實驗室)   2021-01-07 18:11:00
推薦分project的原因是因為最後客戶常會要加新功能到時候就會有A'', B', B''
作者: superpandal   2021-01-07 18:34:00
rebase就好
作者: reso   2021-01-07 18:46:00
Project A的修改都開 feature分支,feature 在合併到 A,A',B
作者: bill0205 (善良的小孩沒人愛)   2021-01-07 18:53:00
建議拆project較好 誰知道客戶會不會提出什麼鬼需求
作者: aaadult (成人)   2021-01-07 19:50:00
我之前的做法是一個mono repo project ,,A B 共用的部分會是共用的package ,,然後 A B 有自己的 package 做客製化的東西還有去引用共用的部分
作者: alihue (wanda wanda)   2021-01-07 19:55:00
除非你可以把共用核心抽出模組,客制功能做成 plugins否則兩個 branch 就只會漸行漸遠。但你要每次都人工 merge人工 check 每行 code 也不是不行
作者: accessdenied (存取違規)   2021-01-07 20:02:00
A檔案應該有發生衝突吧?合併過程中是有指定use remote or use local 嗎?
作者: brianhsu (墳墓)   2021-01-07 20:16:00
和 19 樓想法類似,這應該是從程式碼的層次下手,不然之後如果有更多客製化呢?建議可以去研究一下 Clean Architecture / Configuration Management 這些東西。
作者: yamakazi (大安吳彥祖)   2021-01-07 20:31:00
我覺得你應該用config。不同案子吃不同config,其他程式碼一樣維持一套code就好Feature也可以做成feature toggle, 然後吃config決定哪些feature要不要開
作者: vi000246 (Vi)   2021-01-07 20:59:00
為什麼不做在一起 再弄個權限控管 區分邏輯就好
作者: thumbe31949 (InertingFantasy)   2021-01-07 21:15:00
現在的公司也有類似的問題,我們的情境是有兩台不同device 上面要用一樣的 android app,然後部分功能因應 device 的狀況調整。目前是用兩支branch 去做,有新增功能的話就 cherry-pick 過去。
作者: abccbaandy (敏)   2021-01-07 21:29:00
這個基本上最後都是業務問題不是技術問題,上面擋不住什麼神奇需求都接,你怎麼設計都沒用
作者: viper9709 (阿達)   2021-01-08 00:37:00
推樓上
作者: doranako (真愛無限)   2021-01-08 07:52:00
應該由程式碼架構去著手,你這個做法會常常衝突,後續的人也很難維護
作者: k1dave6412 (朔月星痕)   2021-01-08 15:29:00
謝謝各位的回覆目前我應該會用 config 的方式去設定然後再重新 fork核心部份仰賴 ProjectA 更新其他客制就 call ProjectA 的功能再加上要改的東西如果是 project A 的環境變數相關或功能就用 config處理真的感謝大家提供這麼多意見
作者: neo5277 (I am an agent of chaos)   2021-01-08 15:35:00
rebase
作者: leolarrel (真.粽子無雙)   2021-01-08 17:45:00
最後還是選fork,好奇不使用branch 的原因是?
作者: DCTmaybe (竹竹人)   2021-01-08 18:02:00
直接開成新repo阿
作者: abc0922001 (中士abc)   2021-01-08 19:48:00
開分支阿,頂多你推到不同的 remote
作者: p62448 (OMGG)   2021-01-08 20:01:00
我比較好奇圖中為何做了merge後A file還是A file,不是應該變成A與A’ merge file
作者: aids61517 (奇歐巴肯)   2021-01-08 20:19:00
我覺得thumbe31949你們需要的應該是dynamic feature或設定不同的buildTypes並設定sourceSet來做
作者: stu51211 (做就對了)   2021-01-08 21:34:00
上下游剪patch也行吧
作者: k1dave6412 (朔月星痕)   2021-01-09 02:41:00
fork 的原因我覺得用起來和 branch 一樣但是在不同的 repo 的感覺因為平時的 branch 就有很多大家各自開發的項目,所以就比較沒有考慮還是大家有其他的建議(?
作者: shownlin (哈哈阿喔)   2021-01-09 05:02:00
同p大疑問 為何merge之後不是變A跟A’的merge file
作者: k1dave6412 (朔月星痕)   2021-01-09 20:06:00
A' 是對A做修改 至於說為什麼結果這樣我可能需要看 Gitlab 設定才知道我也很困惑,因為他和我想的不一樣
作者: leolarrel (真.粽子無雙)   2021-01-11 14:31:00
可能你不知道branch 可以用'/'來分群組不過採用fork 也不是不行,只是merge時是用push/pull
作者: k1dave6412 (朔月星痕)   2021-01-12 02:31:00
什麼 居然有 / 分群?!另外圖的問題發現是 Gitlab 在 conflict 的時候 Preview 的 Bug... 害我誤會了
作者: mirror0227 (鏡子)   2021-01-12 11:30:00
讓code可以吃configuration,不要直接分兩版code
作者: jimmy789lee (LEVEL_UP)   2021-01-13 13:07:00
git patch

Links booklink

Contact Us: admin [ a t ] ucptt.com