PTT推薦

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

看板Soft_Job標題[請益] 用 Git 實現不同版本的方法?作者
k1dave6412
(朔月星痕)
時間推噓21 推:21 噓:0 →:55

目前工作上遇到這樣的問題

有 Project A 因為不同客戶需求不同分出了
Project A'、Project B (Fork),但 Project A 的更新又得 merge 進 A' 及 B

有點繼承的感覺

但是實際上 Merge 的結果卻不是我想的
示意圖:
https://i.imgur.com/5tGuKIJ.jpg

圖 用 Git 實現不同版本的方法?

請問這樣的狀況是有什麼地方做錯
或者是說這樣的 case 分 branch 就好呢?


--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.53.25 (臺灣)
PTT 網址

longlyeagle01/07 17:55最好是可以模組化把general function包成library

longlyeagle01/07 17:56分成不同的project給不同客戶 customer project只存

longlyeagle01/07 17:57客製化的東西 general function都放回library

longlyeagle01/07 17:57然後用引用library的版本控制功能推進

k1dave641201/07 17:58repo 的內容是 web service

k1dave641201/07 17:58但是客製的部份大都是另外新增的

k1dave641201/07 17:58所以想說是不是可以有繼承 A 的方法

leolarrel01/07 17:58善用分支是非常推薦的作法

k1dave641201/07 17:59主要用 Gitlab 進行,剛剛有測試這樣的狀況在 Github

k1dave641201/07 17:59 是不能用的

longlyeagle01/07 18:11推薦分project的原因是因為最後客戶常會要加新功能

longlyeagle01/07 18:12到時候就會有A'', B', B''

superpandal01/07 18:34rebase就好

reso01/07 18:46Project A的修改都開 feature分支,feature 在合併到 A,A',B

bill020501/07 18:53建議拆project較好 誰知道客戶會不會提出什麼鬼需求

aaadult01/07 19:50我之前的做法是一個mono repo project ,,A B 共用的部

aaadult01/07 19:50分會是共用的package ,,然後 A B 有自己的 package 做

aaadult01/07 19:50客製化的東西還有去引用共用的部分

alihue01/07 19:55除非你可以把共用核心抽出模組,客制功能做成 plugins

alihue01/07 19:55否則兩個 branch 就只會漸行漸遠。但你要每次都人工 merge

alihue01/07 19:56人工 check 每行 code 也不是不行

accessdenied01/07 20:02A檔案應該有發生衝突吧?合併過程中是有指定use rem

accessdenied01/07 20:02ote or use local 嗎?

brianhsu01/07 20:16和 19 樓想法類似,這應該是從程式碼的層次下手,不然之

brianhsu01/07 20:16後如果有更多客製化呢?建議可以去研究一下 Clean Archi

brianhsu01/07 20:16tecture / Configuration Management 這些東西。

yamakazi01/07 20:31我覺得你應該用config。不同案子吃不同config,其他程式

yamakazi01/07 20:31碼一樣

yamakazi01/07 20:32維持一套code就好

yamakazi01/07 20:33Feature也可以做成feature toggle, 然後吃config決定哪

yamakazi01/07 20:33些feature要不要開

vi00024601/07 20:59為什麼不做在一起 再弄個權限控管 區分邏輯就好

thumbe3194901/07 21:15現在的公司也有類似的問題,我們的情境是有兩台不同

thumbe3194901/07 21:15device 上面要用一樣的 android app,然後部分功能因

thumbe3194901/07 21:15應 device 的狀況調整。目前是用兩支branch 去做,有

thumbe3194901/07 21:15新增功能的話就 cherry-pick 過去。

abccbaandy01/07 21:29這個基本上最後都是業務問題不是技術問題,上面擋不住

abccbaandy01/07 21:29什麼神奇需求都接,你怎麼設計都沒用

viper970901/08 00:37推樓上

doranako01/08 07:52應該由程式碼架構去著手,你這個做法會常常衝突,後續

doranako01/08 07:52的人也很難維護

k1dave641201/08 15:29謝謝各位的回覆

k1dave641201/08 15:29目前我應該會用 config 的方式去設定

k1dave641201/08 15:29然後再重新 fork

k1dave641201/08 15:29核心部份仰賴 ProjectA 更新

k1dave641201/08 15:29其他客制就 call ProjectA 的功能再加上要改的東西

k1dave641201/08 15:29如果是 project A 的環境變數相關或功能就用 config

k1dave641201/08 15:29處理

k1dave641201/08 15:29真的感謝大家提供這麼多意見

neo527701/08 15:35rebase

leolarrel01/08 17:45最後還是選fork,好奇不使用branch 的原因是?

DCTmaybe01/08 18:02直接開成新repo阿

abc092200101/08 19:48開分支阿,頂多你推到不同的 remote

p6244801/08 20:01我比較好奇圖中為何做了merge後A file還是A file,不是應

p6244801/08 20:01該變成A與A’ merge file

aids6151701/08 20:19我覺得thumbe31949你們需要的應該是dynamic feature或

aids6151701/08 20:19設定不同的buildTypes並設定sourceSet來做

stu5121101/08 21:34上下游剪patch也行吧

k1dave641201/09 02:41fork 的原因我覺得用起來和 branch 一樣

k1dave641201/09 02:41但是在不同的 repo 的感覺

k1dave641201/09 02:41因為平時的 branch 就有很多大家各自開發的項目,所

k1dave641201/09 02:41以就比較沒有考慮

k1dave641201/09 02:41還是大家有其他的建議(?

shownlin01/09 05:02同p大疑問 為何merge之後不是變A跟A’的merge file

shownlin01/09 05:03A.file->A’.file是指對A進行更新還是根本是A.file換了

shownlin01/09 05:03名字

k1dave641201/09 20:06A' 是對A做修改 至於說為什麼結果這樣

k1dave641201/09 20:06我可能需要看 Gitlab 設定才知道

k1dave641201/09 20:06我也很困惑,因為他和我想的不一樣

leolarrel01/11 14:31可能你不知道branch 可以用'/'來分群組

leolarrel01/11 14:33不過採用fork 也不是不行,只是merge時是用push/pull

k1dave641201/12 02:31什麼 居然有 / 分群?!

k1dave641201/12 02:31另外圖的問題發現是 Gitlab 在 conflict 的時候 Prev

k1dave641201/12 02:31iew 的 Bug... 害我誤會了

mirror022701/12 11:30讓code可以吃configuration,不要直接分兩版code

jimmy789lee01/13 13:07git patch