Git 和 GitHub 是如今團(tuán)隊(duì)協(xié)作開發(fā)必不可少的技能,且不說(shuō)程序員,就連很多產(chǎn)品也在學(xué)習(xí)它們。今天分享一下我自學(xué) Git 和 GitHub 的經(jīng)驗(yàn),希望起到一個(gè)?導(dǎo)學(xué)?的作用,幫助大家抓住重點(diǎn),節(jié)省時(shí)間、更高效地自學(xué)。
Git / GitHub 是什么?有什么用?
Git 是目前?最主流的?分布式版本控制系統(tǒng)?,版本控制系統(tǒng)可以幫你保存文件的所有修改記錄、并使用?版本號(hào)?進(jìn)行區(qū)分。你可以隨時(shí)瀏覽歷史版本、將改錯(cuò)的文件還原到指定的版本,還可以對(duì)比不同版本的文件差異、防止舊版本覆蓋新版本等。起到恢復(fù)和保護(hù)作用。而?分布式?是指每位開發(fā)者都能在本地維護(hù)自己的代碼和修改記錄,并且還能和其他人的記錄進(jìn)行同步。
GtiHub 是主流的?代碼托管平臺(tái)?,可以理解為一個(gè)存放和管理代碼的 “網(wǎng)盤”,大家可以把自己的代碼傳上去進(jìn)行共享和維護(hù),也可以從平臺(tái)下載代碼。
注意不要把二者搞混!
Git 是工具(是抓手),而 GitHub 是平臺(tái)。兩者沒(méi)有必然的聯(lián)系,我們也可以用其他工具來(lái)向 GitHub 提交代碼,也可以用 Git 向其他平臺(tái)提交代碼。
為什么要用 Git / GitHub?
Git 從最開始就是 Linux 之父為了更好地管理 Linux 內(nèi)核開發(fā)而創(chuàng)立的。
試想一下,假如有 100 個(gè)人一起來(lái)開發(fā)大型項(xiàng)目,怎么才能保證大家的代碼不重復(fù),又能共享呢?難道把代碼放到 U 盤里拷來(lái)拷去,或者口口相傳說(shuō):我今天要改這個(gè)文件,其他人都別動(dòng)?
肯定不行!
所以分布式版本控制系統(tǒng)和代碼托管平臺(tái)出現(xiàn)了。大家可以把項(xiàng)目代碼放到代碼托管平臺(tái)上,每個(gè)人都從上面下載代碼,然后在自己的電腦改代碼、維護(hù)自己的版本,最后在發(fā)布前,把大家不同版本的代碼合到一起,再上傳到平臺(tái)就可以了,非常方便高效。
公司為了安全,一般都會(huì)有自己的代碼托管平臺(tái)。而 GitHub 呢,是?開源的?,相當(dāng)于世界上所有人都是同一家公司的員工,大家都能共享這上面的代碼、免費(fèi)學(xué)習(xí)和參與知名項(xiàng)目。
為什么要學(xué)它?
它們就是為協(xié)作開發(fā)而生的。因此,大多數(shù)公司都在用它們來(lái)管理項(xiàng)目。所以只要我們想找工作,就不得不學(xué)。
我之前看到一些段子說(shuō):程序員入職新公司第一天,不會(huì) git 被開除了。也能反映出來(lái) Git 真的很重要!
什么時(shí)候?qū)W?
記住兩個(gè)時(shí)間點(diǎn)就夠了:
學(xué)過(guò)至少一門編程語(yǔ)言后
準(zhǔn)備開發(fā)個(gè)人項(xiàng)目前
這樣你就可以把之后做的所有項(xiàng)目都放到 Github 去管理,維護(hù)自己的項(xiàng)目倉(cāng)庫(kù)。
Git / GitHub 學(xué)習(xí)重點(diǎn)和方法
我把 Git 的學(xué)習(xí)分為四個(gè)階段:
一、Git 基礎(chǔ)
本階段目標(biāo)
了解 Git 基本概念和常用命令的作用(理論)
能夠使用 Git 命令來(lái)管理和提交項(xiàng)目代碼,要走一遍完整的流程(實(shí)踐)
學(xué)習(xí)方法
推薦《猴子都能懂的 Git 入門教程》。它是免費(fèi)的,圖文并茂、通俗易懂,花 1 小時(shí)看完?入門篇?就足夠了。
在學(xué)習(xí)時(shí),大家一定要跟著教程多敲命令 ,要自己走完從新建文件到提交文件的完整流程。以實(shí)際操作為主,而不要去背那些命令。因?yàn)槠鋵?shí)我們是可以用開發(fā)工具或者軟件來(lái)可視化地操作 Git 的、而且哪怕忘了命令也可以查,所以死記硬背沒(méi)有意義。
分支是 Git 里很重要的概念,大家可以使用 Learning Git Branching 這個(gè)在線游戲來(lái)學(xué)習(xí)和理解分支。
猴子都能懂的 Git 入門教程:https://backlog.com/git-tutorial/cn/
Learning Git Branching:https://learngitbranching.js.org/?locale=zh_CN
二、GitHub 基礎(chǔ)
首次接觸 GitHub 時(shí),你就把它當(dāng)成一個(gè)資源網(wǎng)站,在搜索框里輸入你想搜的東西就可以了,不需要任何的教程。
但是如果我們想上傳代碼到 GitHub、和他人協(xié)作,就得好好學(xué)習(xí)一下了。
目標(biāo)
熟悉 GitHub 基本操作,并能夠使用它來(lái)管理代碼
了解如何利用 GitHub 搜索和下載項(xiàng)目代碼
最重要的。了解 GitHub 協(xié)作流程;了解開源,并能向開源項(xiàng)目提交代碼
知識(shí)點(diǎn)
基本概念
什么是 Git(版本控制系統(tǒng))
什么是 GitHub(代碼托管平臺(tái))
Git 和 GitHub 的作用
Git 和 GitHub 的聯(lián)系與區(qū)別
Git 概念
工作區(qū)
暫存區(qū)(索引)
本地版本庫(kù)
遠(yuǎn)程倉(cāng)庫(kù)
Git 文件狀態(tài)
版本
HEAD
分支
Git 的安裝
Git 常見配置(git config)
個(gè)人信息
修改配置
查看配置
Git 基本操作(開發(fā)流程)
初始化倉(cāng)庫(kù)(git init)
克?。╣it clone)
暫存(git add)
提交(git commit)
推送(git push)
拉?。╣it fetch)
拉取合并(git pull)
查看狀態(tài)(git status)
查看歷史(git log)
分支操作
創(chuàng)建分支
查看分支
切換分支
刪除分支
合并分支(git merge)
知識(shí)點(diǎn)
什么是 GitHub?
如何訪問(wèn) GitHub?
基本概念
主分支
倉(cāng)庫(kù)
分支
README
Star
Follow
賬戶類型(個(gè)人 / 組織)
必備操作
公開
私有
搜索倉(cāng)庫(kù) / 代碼
創(chuàng)建倉(cāng)庫(kù)
Fork 倉(cāng)庫(kù)
Watch 倉(cāng)庫(kù)
上傳本地代碼
修改個(gè)人信息
GitHub Flow 協(xié)作流程
克隆 / Fork 倉(cāng)庫(kù)
創(chuàng)建分支
修改代碼
發(fā)起 Pull Request
Code Review
Merge 分支
刪除分支
了解 GitHub Issues
貢獻(xiàn)代碼流程
學(xué)習(xí)方法
我認(rèn)為學(xué) GitHub 最大的難點(diǎn)在哪呢???
難點(diǎn)就是你得先能訪問(wèn) GitHub!這個(gè)我就不多說(shuō)了,大家自己找方法。
剛開始直接跟著官方的 Hello World 入門教程來(lái)實(shí)操一遍提交代碼的流程就算入門了,估計(jì)用不了 20 分鐘。
之后有空的話我建議大家閱讀下 《GitHub 漫游指南》 ,這是一位大佬總結(jié)的經(jīng)驗(yàn)技巧,能夠加深你對(duì) GitHub 的認(rèn)識(shí)。
還可以閱讀《開源指北》電子書來(lái)了解開源,打開新世界的大門。
Hello World 入門教程:https://docs.github.com/cn/get-started/quickstart/hello-world
《GitHub 漫游指南》:https://github.phodal.com/
開源指北:https://oschina.gitee.io/opensource-guide/
三、Git 進(jìn)階
企業(yè)開發(fā)中,項(xiàng)目可能很大、協(xié)作人員很多,就容易出現(xiàn)代碼沖突。比如你把我寫的代碼覆蓋了,或者搞丟了一部分。
為了更好地預(yù)防和解決這些問(wèn)題,成為項(xiàng)目管理大師呢,建議大家還是了解下 Git 進(jìn)階知識(shí)。
有同學(xué)說(shuō) Git 簡(jiǎn)單,如果只是能用它來(lái)工作的話的確不難。但是 Git 里面是有很多高級(jí)用法的,活用和會(huì)用有很大的區(qū)別。
目標(biāo)
學(xué)習(xí) Git 高級(jí)操作,尤其是能夠熟練地規(guī)避和解決沖突。
了解企業(yè)常用的 Git 協(xié)作流程、規(guī)范、項(xiàng)目管理方法,能獨(dú)立管理項(xiàng)目。
知識(shí)點(diǎn)
高級(jí)操作
標(biāo)簽(git tag)
檢出(git checkout)
貯藏(git stash)
清理(git clean)
變基(git rebase)
重置(git reset)
還原(git revert)
檢索(git grep)
展示差異(git diff)
溯源(git blame)
參考日志(git reflog)
交互式命令行(-i 參數(shù))
預(yù)防沖突
解決沖突(重中之重)
配置 SSH
子模塊
Git 鉤子
提交鉤子(pre-commit)
忽略提交(Gitignore)
cherry-pick
分布式工作流程
Git worktree
Git Flow
Git 內(nèi)部原理
Monorepo
了解其他版本控制系統(tǒng),和 Git 對(duì)比
學(xué)習(xí)方法
怎么學(xué)呢?我建議大家直接看 Git 的官方文檔,不能再詳細(xì)了,跟著文檔敲一遍命令,有個(gè)印象就夠了。
四、GitHub 進(jìn)階
如今 GitHub 的能力已經(jīng)非常強(qiáng)了,除了代碼的管理和檢索外,它還集成了各種輔助團(tuán)隊(duì)開發(fā)和運(yùn)營(yíng)的功能,建議大家按需了解。
GitHub 更多功能
目標(biāo)
學(xué)習(xí)更多 GitHub 功能,從而提升研發(fā)效率、更好地管理項(xiàng)目
嘗試用心維護(hù)和推廣自己的 GitHub 項(xiàng)目
知識(shí)點(diǎn)
開發(fā)
配置 SSH 拉取
GitHub 快捷鍵
GitHub 命令面板
GitHub Apps
代碼安全
協(xié)作
GitHub Codespaces
GitHub Discussions
Pull Requests
項(xiàng)目管理
Organizations 組織
GitHub Issues 問(wèn)題反饋
GitHub Projects 項(xiàng)目管理
Insights 數(shù)據(jù)分析
貢獻(xiàn)者管理
開源協(xié)議
DevOps
GitHub Pages 網(wǎng)站托管
Gitpod 代碼托管
GitHub Actions
GitHub Packages
GitHub Webhook
Git 私服搭建
GitLab
Gogs
學(xué)習(xí)方法
和上一個(gè)階段一樣,進(jìn)階的最好方式就是?閱讀官方文檔?!GitHub 的文檔又新又全、還有中文版、還好懂,簡(jiǎn)直就是完美的教程,這年頭,你想找個(gè)國(guó)外的、能讓人看得懂的文檔,真心不容易。
此外,建議多看一些別人分享的 GitHub 技巧,比如我之前分享過(guò)的幾個(gè)隱藏的 GitHub 小操作,在倉(cāng)庫(kù)頁(yè)面按一個(gè)?。?鍵,就能更方便地閱讀代碼了,還是很實(shí)用的。
總之想學(xué)好 Git 就要多敲多實(shí)踐,多用它來(lái)管理項(xiàng)目,試著跟別人一起協(xié)作開發(fā),慢慢地就熟練了。
面試考點(diǎn)
Git 在面試中的占比一般是很低的,至少我秋招 20 多輪面試中 1 次都沒(méi)被問(wèn)到過(guò),所以大家不用刻意去準(zhǔn)備。
編輯:黃飛
?
評(píng)論
查看更多