Re: [討論] 零基礎該懂 git 嗎?

作者: galic (嘎利)   2026-08-04 22:57:09
突然覺得值得回一篇,因為你在問的問題我最近才想過。
當然不是「有了AI之後,還需要 XXXX?」
這種換個 XXXX ,就能重新發一篇的格式廢文。
我還順便看了你在版上的其他文章,我覺得你其實有感受到真正的問題,
缺乏的是問出好問題的能力。
說的是#1cUZCuPN (Soft_Job) [ptt.cc] [討論] FP正在殺死設計模式嗎?
零基礎知識的 vibe coder 需不需要 git 我不知道,
但有基礎知識的世界第一個 vibe coder → Linus Torvalds 就是發明 git 的人。
每個人工作的方式跟目的都不同,
你要論證這個題目可能得去找沒 git 知識的初學 vibe coder,
分成兩組:一組補充簡單 git 概念,一組限制不能知道什麼是 git。
我相信最終你根本得不到什麼結論。
個人認為軟體工程的直覺會破壞大腦的運作,
讓你容易認定工作的結果跟工作的模式有直接關聯。
你花大把的時間改善的只是效率或品質,(可能間接影響你能不能產出結果,)
但這跟是不是能走向預期的結果不是同一個問題。
這說的是你把使用工具的知識跟解答問題的知識綁在了一起,
如果能清楚的拆開,那這題根本不需要討論。
直覺是一個簡單判斷條件:
如果產出結果必定需要某個工具,那使用工具的知識是必須的。
如果要開發 ios 程式是不是要學 swift?
如果要開發一個在 ios 上做健康管理的 app 是不是要學 swift?
很顯然你問的問題很像後者,大部分的人會回答你健康管理的知識比學 swift更重要。
而今天,「學 swift」的位子可以用 AI 一詞替上。「健康管理的知識」也可以。
這才是現在每個人都在面對的問題,而且他沒有答案。
=====
其實想回答的是抽象語意的這題,這跟我最近在做的題目有關,
而我覺得我手上有你要的答案。
要先搞清楚的一點是 git 其實很複雜,這也是我一直覺得他很難使用的原因。
git 的底層實作是快照(snapshot),那是資料/資料庫領域的東西。
但它的心智模型卻是補丁(patch) 和增量。
最初我猜這原因來自:早期大家熟悉的版本控制都是補丁模型。但這好像沒真正解釋。
AI 給我的答案是因為分散式協作需要 Code Review 和 Branch (尤其是Long-lived)。
Code Review 需要的就是 diff △ (也就是patch),看看這次變更了哪裡。
而 Branch 最終要 Merge 和 Rebase,你要解決衝突時也是 diff。
這觀念最後影響了 Dolt — 把 Git 的增量概念套上了 SQL。
你推文舉的 Jujutsu (jj/咒術) 很顯然是在解我說的「git 很難用」的問題。
因為在 push 到 remote 之前,對我來說(或大部分不習慣多人協作的人),
patch 模型是殺雞用牛刀。
沒有 jj 之前,你需要 stash、rebase、cherry-pick 等高級操作。
而 jj 用的正好就是資料庫的那套模型—ACID、Operation Log(Undo)...。
=====
最後你說的語意,那是第三種—CRDT 或 CvRDT。
這你平常就有在用但可能無感,Google Docs 和改版後的Notion。
他背後是一個漂亮的抽象代數—格(lattice),CRDT 是 join-semilattice (上半),
CvRDT 是 meet- (下半-)。
而格偏偏被用在詞彙、命題、概念甚至程式狀態,
利用格的偏序與上下確界結構,來對概念的包容、特異性與真值進行嚴格的數學建模。
你最熟的是指稱語意,
說的是在 Domain Theory 中,熟悉的程式計算(Lambda Calculus) 被轉換成完備格,
來證明遞迴、迴圈語義是有意義且可收斂的。
所以語意的概念有了,版本控制有了,那一個(抽象)語意的版本控制是什麼?
這就是我在做的題目。
而我必須告訴你的是,他很可能必須是一種新的程式語言,因為現有語言很難做到。
一個貼近的語言叫 Unison,能做到基於語意的版控,
而他的實作叫做 Content-addressed AST(語法樹)。
你需要能從語法層級... 不對。
這其實很簡單:
res = create(
model="gpt-5.5",
instructions="分析這兩個程式版本的差異?",
input=[ {"content": [file1 file2] } ],
)
print(res.text)
作者: MOONY135 (談無慾)   2026-08-05 07:38:00
作者: sarsman (DeNT15T♠)   2026-08-05 09:04:00
?
作者: langrisser19 (lan)   2026-08-05 09:32:00
?
作者: pponywong (pony)   2026-08-05 10:11:00
他其實就是想表示Linus才是第一個vibe coder只是vibe的對象是一群工程師
作者: GiPaPa (揪濘)   2026-08-05 10:14:00
我以為我很懂git 但現在我覺得我不懂了
作者: MOONY135 (談無慾)   2026-08-05 10:41:00
我覺得他如果加上「token無料」 or 「token free」我會贊成他的說法 免費的人力
作者: VScode (VSisBestIDEinTheWorld)   2026-08-05 13:21:00
你講的東西好硬聽不懂
作者: USD5566 (美金五千五百六十六)   2026-08-05 13:53:00
並不值得回一篇 他就上來問爽的 看個git而已在那邊毛一堆被電還上來問可不可以不要看zzz
作者: abc0922001 (中士abc)   2026-08-05 15:25:00
我也覺得奇怪,git不就是以防AI弄你嗎
作者: viper9709 (阿達)   2026-08-05 16:35:00
推一二三樓~看不懂+1 XD
作者: wulouise (在線上!=在電腦前)   2026-08-05 18:21:00
同意問好問題的部分,其他太發散
作者: nashmvp ( )   2026-08-06 00:54:00
作者: ian90911 (xopowo)   2026-08-06 14:41:00
作者: Romulus (Säubern Mode)   2026-08-07 10:40:00
我甚至第一次知道git底層實作是snapshot而不是patch這個version control based語言聽起來很炫酷 發展的如何
作者: superpandal   2026-08-07 20:28:00
本來不想推文 推一下好了 首先git不是基於patch本來就是正常的 因為效能考量你不可能在基本版本一路套用
作者: galic (嘎利)   2026-08-08 00:55:00
patch是unix指令...沒snapshot要怎麼完成commit? 還子命令 你乾脆自己造個git這裡是個分享知識和經驗的學術論壇 至少我是這麼認為的
作者: superpandal   2026-08-08 01:41:00
我知道 我常用 但git apply是自己實現的 haha在commit內實現就可以了啊 不覺得一定得獨立函數git的子命令可以自己透過腳本擴充你不知道嗎 本來就是這樣用的 你舉例的stash cherry-pick完全可以外部實現 我沒有很想跟你討論那麼深 剛開始回應就是了 只是多講了一些因為你說那些是高級操作 我不那麼認為 我腳本仔湊的出來功能 事實上很多功能也應該這麼做 避免臃腫化

Links booklink

Contact Us: admin [ a t ] ucptt.com