作者k1dave6412 (朔月星痕)
看板Soft_Job
標題[請益] 用 Git 實現不同版本的方法?
時間Thu Jan 7 17:51:55 2021
目前工作上遇到這樣的問題
有 Project A 因為不同客戶需求不同分出了
Project A'、Project B (Fork),但 Project A 的更新又得 merge 進 A' 及 B
有點繼承的感覺
但是實際上 Merge 的結果卻不是我想的
示意圖:
https://i.imgur.com/5tGuKIJ.jpg
請問這樣的狀況是有什麼地方做錯
或者是說這樣的 case 分 branch 就好呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.53.25 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1610013117.A.209.html
1F:推 longlyeagle: 最好是可以模組化把general function包成library 01/07 17:55
2F:→ longlyeagle: 分成不同的project給不同客戶 customer project只存 01/07 17:56
3F:→ longlyeagle: 客製化的東西 general function都放回library 01/07 17:57
4F:→ longlyeagle: 然後用引用library的版本控制功能推進 01/07 17:57
5F:→ k1dave6412: repo 的內容是 web service 01/07 17:58
6F:→ k1dave6412: 但是客製的部份大都是另外新增的 01/07 17:58
7F:→ k1dave6412: 所以想說是不是可以有繼承 A 的方法 01/07 17:58
8F:→ leolarrel: 善用分支是非常推薦的作法 01/07 17:58
9F:→ k1dave6412: 主要用 Gitlab 進行,剛剛有測試這樣的狀況在 Github 01/07 17:59
10F:→ k1dave6412: 是不能用的 01/07 17:59
11F:推 longlyeagle: 推薦分project的原因是因為最後客戶常會要加新功能 01/07 18:11
12F:→ longlyeagle: 到時候就會有A'', B', B'' 01/07 18:12
13F:→ superpandal: rebase就好 01/07 18:34
14F:推 reso: Project A的修改都開 feature分支,feature 在合併到 A,A',B 01/07 18:46
15F:推 bill0205: 建議拆project較好 誰知道客戶會不會提出什麼鬼需求 01/07 18:53
16F:推 aaadult: 我之前的做法是一個mono repo project ,,A B 共用的部 01/07 19:50
17F:→ aaadult: 分會是共用的package ,,然後 A B 有自己的 package 做 01/07 19:50
18F:→ aaadult: 客製化的東西還有去引用共用的部分 01/07 19:50
19F:推 alihue: 除非你可以把共用核心抽出模組,客制功能做成 plugins 01/07 19:55
20F:→ alihue: 否則兩個 branch 就只會漸行漸遠。但你要每次都人工 merge 01/07 19:55
21F:→ alihue: 人工 check 每行 code 也不是不行 01/07 19:56
22F:→ accessdenied: A檔案應該有發生衝突吧?合併過程中是有指定use rem 01/07 20:02
23F:→ accessdenied: ote or use local 嗎? 01/07 20:02
24F:推 brianhsu: 和 19 樓想法類似,這應該是從程式碼的層次下手,不然之 01/07 20:16
25F:→ brianhsu: 後如果有更多客製化呢?建議可以去研究一下 Clean Archi 01/07 20:16
26F:→ brianhsu: tecture / Configuration Management 這些東西。 01/07 20:16
27F:推 yamakazi: 我覺得你應該用config。不同案子吃不同config,其他程式 01/07 20:31
28F:→ yamakazi: 碼一樣 01/07 20:31
29F:→ yamakazi: 維持一套code就好 01/07 20:32
30F:→ yamakazi: Feature也可以做成feature toggle, 然後吃config決定哪 01/07 20:33
31F:→ yamakazi: 些feature要不要開 01/07 20:33
32F:推 vi000246: 為什麼不做在一起 再弄個權限控管 區分邏輯就好 01/07 20:59
33F:推 thumbe31949: 現在的公司也有類似的問題,我們的情境是有兩台不同 01/07 21:15
34F:→ thumbe31949: device 上面要用一樣的 android app,然後部分功能因 01/07 21:15
35F:→ thumbe31949: 應 device 的狀況調整。目前是用兩支branch 去做,有 01/07 21:15
36F:→ thumbe31949: 新增功能的話就 cherry-pick 過去。 01/07 21:15
37F:推 abccbaandy: 這個基本上最後都是業務問題不是技術問題,上面擋不住 01/07 21:29
38F:→ abccbaandy: 什麼神奇需求都接,你怎麼設計都沒用 01/07 21:29
39F:→ viper9709: 推樓上 01/08 00:37
40F:推 doranako: 應該由程式碼架構去著手,你這個做法會常常衝突,後續 01/08 07:52
41F:→ doranako: 的人也很難維護 01/08 07:52
42F:→ k1dave6412: 謝謝各位的回覆 01/08 15:29
43F:→ k1dave6412: 目前我應該會用 config 的方式去設定 01/08 15:29
44F:→ k1dave6412: 然後再重新 fork 01/08 15:29
45F:→ k1dave6412: 核心部份仰賴 ProjectA 更新 01/08 15:29
46F:→ k1dave6412: 其他客制就 call ProjectA 的功能再加上要改的東西 01/08 15:29
47F:→ k1dave6412: 如果是 project A 的環境變數相關或功能就用 config 01/08 15:29
48F:→ k1dave6412: 處理 01/08 15:29
49F:→ k1dave6412: 真的感謝大家提供這麼多意見 01/08 15:29
50F:推 neo5277: rebase 01/08 15:35
51F:→ leolarrel: 最後還是選fork,好奇不使用branch 的原因是? 01/08 17:45
52F:推 DCTmaybe: 直接開成新repo阿 01/08 18:02
53F:推 abc0922001: 開分支阿,頂多你推到不同的 remote 01/08 19:48
54F:推 p62448: 我比較好奇圖中為何做了merge後A file還是A file,不是應 01/08 20:01
55F:→ p62448: 該變成A與A’ merge file 01/08 20:01
56F:推 aids61517: 我覺得thumbe31949你們需要的應該是dynamic feature或 01/08 20:19
57F:→ aids61517: 設定不同的buildTypes並設定sourceSet來做 01/08 20:19
58F:推 stu51211: 上下游剪patch也行吧 01/08 21:34
59F:→ k1dave6412: fork 的原因我覺得用起來和 branch 一樣 01/09 02:41
60F:→ k1dave6412: 但是在不同的 repo 的感覺 01/09 02:41
61F:→ k1dave6412: 因為平時的 branch 就有很多大家各自開發的項目,所 01/09 02:41
62F:→ k1dave6412: 以就比較沒有考慮 01/09 02:41
63F:→ k1dave6412: 還是大家有其他的建議(? 01/09 02:41
64F:推 shownlin: 同p大疑問 為何merge之後不是變A跟A’的merge file 01/09 05:02
65F:推 shownlin: A.file->A’.file是指對A進行更新還是根本是A.file換了 01/09 05:03
66F:→ shownlin: 名字 01/09 05:03
67F:→ k1dave6412: A' 是對A做修改 至於說為什麼結果這樣 01/09 20:06
68F:→ k1dave6412: 我可能需要看 Gitlab 設定才知道 01/09 20:06
69F:→ k1dave6412: 我也很困惑,因為他和我想的不一樣 01/09 20:06
70F:→ leolarrel: 可能你不知道branch 可以用'/'來分群組 01/11 14:31
71F:→ leolarrel: 不過採用fork 也不是不行,只是merge時是用push/pull 01/11 14:33
72F:→ k1dave6412: 什麼 居然有 / 分群?! 01/12 02:31
73F:→ k1dave6412: 另外圖的問題發現是 Gitlab 在 conflict 的時候 Prev 01/12 02:31
74F:→ k1dave6412: iew 的 Bug... 害我誤會了 01/12 02:31
75F:推 mirror0227: 讓code可以吃configuration,不要直接分兩版code 01/12 11:30
76F:→ jimmy789lee: git patch 01/13 13:07