作者oranfrog (oranfrog)
看板Soft_Job
標題[請益] merge程式碼的問題
時間Sun Aug 6 13:43:14 2017
各位大大好,小弟是程式開發的新手,工作上遇到技術上的問題想上來向大家求救
最近我接手了一份已經開發一段時間的程式
而接到一個任務是:要把某個新功能merge在舊的版本上
例如(數字我隨便舉例,只是想表達程式新舊):
程式最新的commit為 2110
而某個「新功能」是在 2102->2103 裝上去的
我被交辦的任務是把這個「新功能」裝在 1133 (大概兩年前的commit) 上
程式並不算大,但是模組化做得不徹底
常常一個 function 亂七八糟夾雜了一堆東西
而且兩版程式碼相差了兩年,內容已有許多不同,小弟非常頭大
主管又覺得這個是複製貼上的工,應該馬上就要好
想請問版上的前輩們有沒有相關經驗分享或建議
或者推個關鍵字讓小弟去查
先謝謝大家了>"<
註1:程式語言為 C
註2:因為政策與時間因素,重構較不可行
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.8.199
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1501998197.A.1E2.html
※ 編輯: oranfrog (125.227.8.199), 08/06/2017 13:44:54
1F:推 abccbaandy: 104 08/06 13:55
2F:推 mathrew: 那就只好給他 CTRL+C CTRL+V 囉 08/06 14:00
3F:推 CGS0: 就練習 看看少了什麼補進去 08/06 14:02
4F:推 TSW: 找出 feature branch 整個 rebase 過去然後解 conflit 然後讓 08/06 14:35
5F:→ TSW: 讓測試飛~ 飛不過就回報主管不可能馬上就好~ 08/06 14:35
6F:推 max241: 確定工作區乾淨後 reset hard到1133 08/06 14:36
7F:→ max241: cherry-pick 2103的變更 08/06 14:36
8F:推 usan: 邊搬邊抓error,只能這樣,系統廠常這樣搞 08/06 15:46
9F:推 abc0922001: SVN還是Git? 08/06 16:01
10F:→ testPtt: 只能把新功能要的條件一個個補上囉 08/06 16:01
11F:→ FrAnKw: 這什麼主管?主管沒看過程式碼還是沒寫過程式... 08/06 16:06
12F:→ FrAnKw: 都只要複製貼上就可以搞定誰還要去研究design pattern? 08/06 16:10
13F:推 kurtsgm: 說真的...版本差這麼多 架構又不是很好的話...就算用版本 08/06 16:18
14F:→ kurtsgm: 控制的機制去「搬」....能動的機率大概也很低 XD 08/06 16:18
15F:→ testPtt: 不然就裝死 我以為主管要自己補條件 08/06 16:19
16F:推 jj0321: 地基已經爛掉了 不打掉重練是要繼續蓋違樓? 08/06 16:27
17F:推 xxtuoo: 主管熟你不熟 就這個差異.diff 2012~2013差異 慢慢補啊XDD 08/06 16:29
感謝大家的回覆
版控是用SVN,但就如k大所言,用控制的機制去搬的話,應該會動不了
目前打算邊搬邊抓error,把條件一個一個補上
主管不會寫程式(我們非軟體業),但還算能溝通
現在是想說自己一邊改一邊去跟他凹時間XD
(比較怕的是凹多了他會覺得我想偷懶...)
※ 編輯: oranfrog (125.227.8.201), 08/06/2017 17:00:35
※ 編輯: oranfrog (125.227.8.201), 08/06/2017 17:01:16
18F:→ MOONY135: 兩年阿...我兩個月前跟現在的就差很多了 08/06 17:25
19F:推 mdkn35: 兩年前囧 08/06 17:35
20F:→ longlongint: 先高速複製貼上先交給他 證明這個不是複製貼上可解 08/06 18:13
21F:→ longlongint: 然後找主管信任的人幫你解釋 08/06 18:14
22F:→ longlongint: 然後最懂新功能的人先問他意見 08/06 18:15
23F:推 hidog: git的話,搜尋cherry-pick 08/06 18:29
24F:推 vi000246: 兩年前的與其用Git還不如手動貼 08/06 19:57
25F:推 kingofsdtw: 2年小Case啦,10年我都在搬惹 08/06 20:37
26F:推 AIdrifter: 你搞錯重點 08/06 21:38
27F:→ AIdrifter: 你需要的是 可以三方比對版本的軟體 08/06 21:38
28F:→ AIdrifter: 請search araxis merge 類似軟體 08/06 21:38
29F:→ AIdrifter: 我前公司主管也是不懂 08/06 21:38
30F:→ AIdrifter: 不知誰把diff印出來整整超過百頁a4 08/06 21:38
31F:→ AIdrifter: 明明用這類軟體一下就解決了… 08/06 21:38
32F:→ xam: 外行的主管+程式開發的新手.. 這也是軟體的 anti-pattern 啊 08/06 22:35
33F:推 KKFN: 試試看winMerge手動Merge 08/06 23:30
34F:推 doranako: 差了兩年的code自動merge應該出錯更多,而且沒抓到隱藏 08/07 08:38
35F:→ doranako: 風險更大,你只能看history,把新功能的新增code抓出來 08/07 08:38
36F:→ doranako: ,手動merge比較安全 08/07 08:38
37F:推 v7q4: 就照他講的ctrl+c ctrl+v 然後改到可以動就好了 08/07 10:43
38F:→ v7q4: 千萬記得要有email備份! 以免被婊 08/07 10:43
39F:→ v7q4: 假裝寄封信去問他是不是要這樣做 讓他回答是 08/07 10:44
40F:推 kurakidream: pick過去 可能要解一堆conflict 08/07 15:02
41F:→ KanoLoa: Merge只是複製貼上? XD 08/07 15:14
42F:推 CrystalNik: 把這篇貼給你主管看XD 有很多人幫你背書這很困難 08/07 17:27
43F:→ jennya: 直接把舊版本從「1133」變成指向2103,這樣符合主管要求嗎 08/07 18:11
44F:→ jennya: 還是主管要求的是:舊版本必須是「……、1132、1133、2103 08/07 18:12
45F:→ jennya: 」 08/07 18:12
46F:推 jennya: 如果是前者就很好解決,直接把舊版更新到2103的意思。如果 08/07 18:20
47F:→ jennya: 每個commit都有做好,2103那版本應該也要能動。 08/07 18:20
48F:→ jennya: 如果是後者,就很麻煩,一定不可能2103單獨那個commit就能 08/07 18:20
49F:→ jennya: 動,一定是要再補足1133~2103之間對2103而言必要的架構。 08/07 18:20
50F:→ jennya: 如果只是小功能,說不定參考2103然後自己重寫加到1133上還 08/07 18:20
51F:→ jennya: 比較快。 08/07 18:20
52F:推 besmartAE: 主管都嘛覺得什麼都簡單。可以列出困難點給他 08/08 08:31
53F:→ NCUking: 不懂軟體的主管 大災難的起手式 08/08 12:38
54F:推 cerwvk: 認同樓上+1 08/08 14:55
55F:→ chrisjohn214: 先看版本數量,接著一個個export出來用araxix merge 08/08 18:21
56F:→ chrisjohn214: 比對,不要用svn內建的差異,你會累死 08/08 18:21
57F:推 vn509942: 之後肯定會有大驚喜 08/09 08:23