🔥 團隊協作最佳實踐
本文介紹多人協作中推送和合併分支的最佳實踐,整理自码农高天的影片,人家是微軟工程師,CPython core dev,不是網路上的半桶水。
本文介紹多人協作中推送和合併分支的最佳實踐,整理自码农高天的影片,人家是微軟工程師,CPython core dev,不是網路上的半桶水。
我們常常會完成 A/B/C 提交後,推送前檢查發現每個提交都有些 typo 要修正,這時候有兩種解決方法,一種是 rebase -i 進去 edit,另一種是提交一個新的版本後再使用 rebase -i,然後修改順序並且改為 fixup,兩者都要手動進行重複操作非常麻煩。
本文延續 使用變基 Rebase 合併分支 但是專注說明 onto 用法,也可以視為 rebase 的完整解析版本,完全遵照文檔說明沒有模糊地帶。本文會說明為何網路上的說法為何錯誤,同時包含實際範例展示,並且和上一篇相同,筆者保證本文絕對正確。
本文是繁體中文唯一一篇 git rebase --update-ref 教學,內容來自於 Working with stacked branches in Git is easier with --update-refs。
這篇文章介紹 Git 中的保留關鍵字,包含 HEAD, ^, ~ 等符號
介紹 Git 常見問題,包含清除reflog記錄、正確使用rebase、git mv、以及如何加速clone等進階技巧。還解釋了常見錯誤誤導,並提供正確的 Git 操作方法。
介紹 Git 常見的本地和遠端問題,包含清除reflog記錄、正確使用rebase、git mv、以及如何加速clone等進階技巧。還解釋了常見錯誤誤導,並提供正確的 Git 操作方法。
Git 其實有很多設定可以客製化,連 git branch 顏色、git diff 工具都可以自訂,但是最常用且最實用的應該是別名系統,本文不是只教你使用別名,而是教你怎麼直接從難用的 CMD/PowerShell 中解脫,直接在 Windows 裡使用經過筆者大量優化的 Zsh。
當專案越來越龐大時可以拆成多個儲存庫管理,拆分的方式有兩種
上一篇文章說明如何優化終端機,這篇終於講到要怎麼優化 shell and Git,設定別名 (alias) 可以把我們從落落長的指令拯救出來,廢話不多說直接上我的設定,除了很多實用的 alias 之外,還有設定 delta、rebase autostash 以及顏色客製化。
本文介紹操作遠端儲存庫的指令。
本文不廢話的記錄看到的資訊,如你所見我不是專家,我只是看到文章並且簡單記錄,本文有簡單的也有難的,但是共通點是 99.9\% 的人用不到這些知識。
Github Actions 是用於自動化操作的 CI/CD 平台,可以在上面自動執行單元測試、構建發布套件、定時執行任務等等,額度請參考文檔,簡單使用基本上用不完。
我們在 Github Actions 自動化 CI/CD 展示了多種使用 Github Actions 的範例,不過都侷限在單一的簡單任務,本文則提供一個複雜範例,長達 250 行的自動化腳本,目的是移除 blowfish 專案的非必要檔案並且自動發佈 core 版本,具體目標如下:
Pull request (PR) 不是 Git 的原生指令,是 Git 託管平台的加值服務,本身是分支的一種,目的是用於多人協作,把你的提交發給別人的 repo,又或者是避免在主分支提交也可以用 PR 工作流程。
本文快速精練的說明如何在 Github 進行條件搜尋,一般大概也只會用本文列出的這些,而且 Github 搜尋功能不是非常完美,光是這些常用的選項有時候搜尋結果就不如預期了。
為何要學 Vim?因為編輯 Git 文件時預設使用 Vim。初學者請跳過這篇文章,需要時再回來看,Vim 要用到熟練的時間成本遠遠大於 Git 的數倍以上,一開始只要能修改和儲存就夠了。
本文介紹 Git 最基礎的指令,只會說明如何增加新的提交記錄。
Cherry-Pick 的意思是把指定提交複製過來,由於動作像是摘櫻桃所以取這個名字,不得不說外國人都是命名鬼才,和 force-with-lease 一樣非常有創意。開發社群通常不鼓勵使用此指令,詳情請見 Git Cherry Pick 的後遺症,我們不管這個問題只學如何使用。
最近把網站圖片改為 CDN 部署以減小儲存庫容量,因此順便用了一下 filter-repo 功能來清除大型檔案,廢話不多說直接上步驟
使用 force-if-includes 安全的進行強制推送
git bisect 指令幫助我們使用找出開始發生錯誤的提交位置,只要提供開頭結尾分別是正確和錯誤的提交,Git 就會自動幫我們在提交歷史中切換,不過哪個提交有問題當然還是要自己確認。
Clone 大型儲存庫耗時很長又佔空間,例如樹梅派原始碼高達一百二十萬次提交 clone 一次需要長達 15 分鐘,我們也不需要全部檔案和歷史,這時就可以使用 sparse-checkout 以排除指定檔案避免全部下載。
Git worktree 的目的是簡化在分支之間切換的指令步驟,甚至允許你同時修改兩個分支。舉例來說,以往我們在多個分支間來回切換的指令流程是
如何批量修改提交訊息?這個功能一樣需要請出 git filter-repo
榨乾免費工具的功能是一定要的,Github 除了提供免費的 Actions 功能,也提供 Pages 功能免費架設靜態網站,一個帳號只能架設一個 帳號站點,但是 專案站點 可以有多個,簡單來說就是 YourName.github.io 只能有一個 repo,但是你可以開多個 repo 建立 pages 功能,他們的網站路徑必續在 YourName.github.io/path/ 之下。
互動式變基是 Git 最強大的指令,包含移動提交、刪除提交、修改提交內容、修改提交訊息全部都可以做到。原理仍舊是基於變基,但是使用時完全不會感覺到分支操作。互動式變基常用的選項有五個:
筆者認為初學者對變基 (rebase) 感到畏懼的原因不是指令複雜,反而是網路文章每篇講的都不一樣,所以撰寫時同時參考 Git 官方文檔以及 Pro Git Book,多方比對和驗證保證本文解釋方式能和指令實際用途能夠對應,講這麼多目的就是要讓你只要讀這篇文章就夠了,不需要再去網路上查其他文章,因為網路上的文章參差不齊容易被誤導。
分支操作主要有以下五大指令,扣掉複雜的 rebase 以外其餘根本不需要每個寫成一篇文章來介紹。本文只會有本地不會有遠端操作,遠端操作的第一篇文章要從遠端儲存庫設定開始。
啟發自码农高天的 Git 教學,被他淺顯易懂的說明驚訝到,並且深刻感受到繁體中文教學實在很差勁,於是決定自己寫,想解決我在學習 Git 時發現的問題:
各種修改 commit 的情況和對應的解決方式。
如何同步提交時間和作者時間?所謂的作者時間 (authordata) 是這個提交「被提交的當下」的時間,提交時間 (committerdata) 則是「被修改的提交時間」,其他的 committeremail, committername 也同理。
Git 是快照系統,會Git 是快照Git 是快照系統,會藉由差異比較來壓縮空間,這個機制遇到二進制檔案就沒有優勢了,因為很少會有兩個二進制檔案能用簡單的差異來表達,導致檔案有十個版本就要儲存十份,當儲存庫容量過大開發者就要開始使用各種奇怪的 sparse-checkout 指令,所以我們平常在提交二進制檔案時都要小心,壓縮後才上傳也是基本的,最好是根本就不要上傳二進制檔案。
開啟網頁版進入 README 編輯頁面,把影片拖入就完成了@2024/12/28。
延續上一篇文章 Github Actions 自動化 CI/CD,我們可以在本地執行 Github Actions 用於在本地先偵錯 Workflow 語法,也可以節省 Actions 額度。
一分鐘入門只說明如何提交檔案,但是在版本之間切換才是版本管理工具的精華,接下來的本文和下一篇文章分別為基礎操作(單一分支)和分支操作(多分支),快速檢索的方式是從右側目錄快速定位操作內 容,例如提交錯誤時可以找到「還原提交」定位到 git reset。
本文介紹大的 picture 讓你可以宏觀的理解 Git 運作方式,先知道他在做什麼再學會怎麼操作他,網路很多教學文章都本末倒置,導致初學者指令貼上可以用,但是就是不清楚自己在做甚麼。
安裝
起因是發現 gpg 認證失敗沒辦法 commit,腦袋一熱就想著藉此機會把所有以前設定錯誤的金鑰全部移除,移除完再新增金鑰所有操作都正常,除了以前所有的簽名資訊全部失敗以外...因為我把 Github 上面的金鑰也一起刪了導致舊 commit 在遠端上無法驗證。
用標籤標示重要版本,分為 lightweight 和 annotated 兩種,官方建議使用 annotated。lightweight 是簡單的 refs ,annotated 則是完整的物件對象,包含作者名稱、日期、email、GPG 簽名等資訊。
寫好慣例式提交,讓提交訊息一目了然
不小心把金鑰、API 鑰匙、密碼等敏感資訊提交甚至推送時,網路上的中文文章各顯神通每篇都有不同的清除方式,但是這麼多方式卻沒有任何一篇的方式正確,怎麼本站老是在說別人做錯?因為那些人連文檔都不看就上網寫文章了,該怎麼做文檔寫的一清二楚。
你真的看得懂 Git 文檔嗎?似懂非懂不算懂喔。
解決 GPG 無法提交的錯誤
上傳到遠端儲存庫的必要前置設定。
寫 commit message 發現自己永遠只會 edit/change/adjust/tune,這邊請 GPT 補一下英文,而且有些單字會腦袋抽風突然想不起來,這篇當作 cheatsheet 使用。