我是怎么自學 Git / GitHub 的?

大家好我是魚皮,Git 和 GitHub 是如今團隊協作開發必不可少的技能,且不說程序員,就連很多產品也在學習它們。今天分享一下我自學 Git 和 GitHub 的經驗,希望起到一個 導學 的作用,幫助大家抓住重點,節省時間、更高效地自學。

本文大綱:

  • Git(GitHub)是什么?有什么用?

  • 為什么要學?

  • 什么時候學?

  • 要學什么知識?哪些是重點?

  • 怎么學?有哪些方法和資源?

  • 以及面試的時候可能會考什么?

Git / GitHub 是什么?有什么用?

Git 是目前 最主流的 分布式版本控制系統 ,版本控制系統可以幫你保存文件的所有修改記錄、并使用 版本號 進行區分。你可以隨時瀏覽歷史版本、將改錯的文件還原到指定的版本,還可以對比不同版本的文件差異、防止舊版本覆蓋新版本等。起到恢復和保護作用。而 分布式 是指每位開發者都能在本地維護自己的代碼和修改記錄,并且還能和其他人的記錄進行同步。

GtiHub 是主流的 代碼托管平臺 ,可以理解為一個存放和管理代碼的 “網盤”,大家可以把自己的代碼傳上去進行共享和維護,也可以從平臺下載代碼。

7ad6296816460ff407a195a2bf1f2d76.png

注意不要把二者搞混!

Git 是工具(是抓手),而 GitHub 是平臺。兩者沒有必然的聯系,我們也可以用其他工具來向 GitHub 提交代碼,也可以用 Git 向其他平臺提交代碼。

為什么要用 Git / GitHub?

Git 從最開始就是 Linux 之父為了更好地管理 Linux 內核開發而創立的。

試想一下,假如有 100 個人一起來開發大型項目,怎么才能保證大家的代碼不重復,又能共享呢?難道把代碼放到 U 盤里拷來拷去,或者口口相傳說:我今天要改這個文件,其他人都別動?

肯定不行!

所以分布式版本控制系統和代碼托管平臺出現了。大家可以把項目代碼放到代碼托管平臺上,每個人都從上面下載代碼,然后在自己的電腦改代碼、維護自己的版本,最后在發布前,把大家不同版本的代碼合到一起,再上傳到平臺就可以了,非常方便高效。

公司為了安全,一般都會有自己的代碼托管平臺。而 GitHub 呢,是 開源的 ,相當于世界上所有人都是同一家公司的員工,大家都能共享這上面的代碼、免費學習和參與知名項目。

6319d9c23b9224c271e3b15bda57ffdc.png

為什么要學它?

它們就是為協作開發而生的。因此,大多數公司都在用它們來管理項目。所以只要我們想找工作,就不得不學。

我之前看到一些段子說:程序員入職新公司第一天,不會 git 被開除了。也能反映出來 Git 真的很重要!

什么時候學?

記住兩個時間點就夠了:

  1. 學過至少一門編程語言后

  2. 準備開發個人項目前

這樣你就可以把之后做的所有項目都放到 Github 去管理,維護自己的項目倉庫。

Git / GitHub 學習重點和方法

我把 Git 的學習分為四個階段:

一、Git 基礎

本階段目標

  1. 了解 Git 基本概念和常用命令的作用(理論)

  2. 能夠使用 Git 命令來管理和提交項目代碼,要走一遍完整的流程(實踐)

學習方法

推薦《猴子都能懂的 Git 入門教程》。它是免費的,圖文并茂、通俗易懂,花 1 小時看完 入門篇 就足夠了。

1cf9c4cbd01166f1c60671f2706e270e.png

在學習時,大家一定要跟著教程多敲命令 ,要自己走完從新建文件到提交文件的完整流程。以實際操作為主,而不要去背那些命令。因為其實我們是可以用開發工具或者軟件來可視化地操作 Git 的、而且哪怕忘了命令也可以查,所以死記硬背沒有意義。

分支是 Git 里很重要的概念,大家可以使用 Learning Git Branching 這個在線游戲來學習和理解分支。

猴子都能懂的 Git 入門教程:https://backlog.com/git-tutorial/cn/

Learning Git Branching:https://learngitbranching.js.org/?locale=zh_CN

二、GitHub 基礎

首次接觸 GitHub 時,你就把它當成一個資源網站,在搜索框里輸入你想搜的東西就可以了,不需要任何的教程。

但是如果我們想上傳代碼到 GitHub、和他人協作,就得好好學習一下了。

目標

  1. 熟悉 GitHub 基本操作,并能夠使用它來管理代碼

  2. 了解如何利用 GitHub 搜索和下載項目代碼

  3. 最重要的。了解 GitHub 協作流程;了解開源,并能向開源項目提交代碼

知識點

  • ?? 基本概念

    • 什么是 Git(版本控制系統)

    • 什么是 GitHub(代碼托管平臺)

    • Git 和 GitHub 的作用

    • Git 和 GitHub 的聯系與區別

  • ?? Git 概念

    • 工作區

    • 暫存區(索引)

    • 本地版本庫

    • 遠程倉庫

    • Git 文件狀態

    • 版本

    • HEAD

    • 分支

  • Git 的安裝

  • Git 常見配置(git config)

    • 個人信息

    • 修改配置

    • 查看配置

  • ?? Git 基本操作(開發流程)

    • 初始化倉庫(git init)

    • 克隆(git clone)

    • 暫存(git add)

    • 提交(git commit)

    • 推送(git push)

    • 拉取(git fetch)

    • 拉取合并(git pull)

    • 😐 查看狀態(git status)

    • 😐 查看歷史(git log)

  • ?? 分支操作

    • 創建分支

    • 查看分支

    • 切換分支

    • 刪除分支

    • 合并分支(git merge)

知識點

  • 什么是 GitHub?

  • ?? 如何訪問 GitHub?

  • ?? 基本概念

    • 主分支

    • 倉庫

    • 分支

    • README

    • Star

    • Follow

    • 賬戶類型(個人 / 組織)

  • 必備操作

    • 公開

    • 私有

    • ?? 搜索倉庫 / 代碼

    • 創建倉庫

    • Fork 倉庫

    • Watch 倉庫

    • ?? 上傳本地代碼

    • 修改個人信息

  • ?? GitHub Flow 協作流程

    • 克隆 / Fork 倉庫

    • 創建分支

    • 修改代碼

    • 發起 Pull Request

    • Code Review

    • Merge 分支

    • 刪除分支

  • ?? 了解 GitHub Issues

  • ?? 貢獻代碼流程

學習方法

我認為學 GitHub 最大的難點在哪呢???

難點就是你得先能訪問 GitHub!這個我就不多說了,大家自己找方法。

剛開始直接跟著官方的 Hello World 入門教程來實操一遍提交代碼的流程就算入門了,估計用不了 20 分鐘。

cacac9c1ec30b8aba68bffafc4c48de6.png

之后有空的話我建議大家閱讀下 《GitHub 漫游指南》 ,這是一位大佬總結的經驗技巧,能夠加深你對 GitHub 的認識。

還可以閱讀《開源指北》電子書來了解開源,打開新世界的大門。

Hello World 入門教程:https://docs.github.com/cn/get-started/quickstart/hello-world

《GitHub 漫游指南》:https://github.phodal.com/

開源指北:https://oschina.gitee.io/opensource-guide/

三、Git 進階

企業開發中,項目可能很大、協作人員很多,就容易出現代碼沖突。比如你把我寫的代碼覆蓋了,或者搞丟了一部分。

為了更好地預防和解決這些問題,成為項目管理大師呢,建議大家還是了解下 Git 進階知識。

有同學說 Git 簡單,如果只是能用它來工作的話的確不難。但是 Git 里面是有很多高級用法的,活用和會用有很大的區別。

目標

  1. 學習 Git 高級操作,尤其是能夠熟練地規避和解決沖突。

  2. 了解企業常用的 Git 協作流程、規范、項目管理方法,能獨立管理項目。

知識點

  • 高級操作

    • 標簽(git tag)

    • 檢出(git checkout)

    • ?? 貯藏(git stash)

    • 清理(git clean)

    • 變基(git rebase)

    • 重置(git reset)

    • 還原(git revert)

    • 😐 檢索(git grep)

    • 😐 展示差異(git diff)

    • 😐 溯源(git blame)

    • 😐 參考日志(git reflog)

    • 😐 交互式命令行(-i 參數)

  • ?? 預防沖突

  • ?? 解決沖突(重中之重)

  • ?? 配置 SSH

  • 子模塊

  • Git 鉤子

    • 提交鉤子(pre-commit)

  • ?? 忽略提交(Gitignore)

  • ?? cherry-pick

  • 分布式工作流程

  • Git worktree

  • Git Flow

  • 😐 Git 內部原理

  • Monorepo

  • 了解其他版本控制系統,和 Git 對比

學習方法

怎么學呢?我建議大家直接看 Git 的官方文檔,不能再詳細了,跟著文檔敲一遍命令,有個印象就夠了。

四、GitHub 進階

如今 GitHub 的能力已經非常強了,除了代碼的管理和檢索外,它還集成了各種輔助團隊開發和運營的功能,建議大家按需了解。

81b3ab13ddedca71e45b7a8d4e93e182.png
GitHub 更多功能

目標

  1. 學習更多 GitHub 功能,從而提升研發效率、更好地管理項目

  2. 嘗試用心維護和推廣自己的 GitHub 項目

知識點

  • 開發

    • ?? 配置 SSH 拉取

    • 😐 GitHub 快捷鍵

    • 😐 GitHub 命令面板

    • 😐 GitHub Apps

    • 代碼安全

  • 協作

    • ?? GitHub Codespaces

    • GitHub Discussions

    • Pull Requests

  • 項目管理

    • Organizations 組織

    • GitHub Issues 問題反饋

    • 😐 GitHub Projects 項目管理

    • Insights 數據分析

    • 貢獻者管理

    • 開源協議

  • DevOps

    • ?? GitHub Pages 網站托管

    • Gitpod 代碼托管

    • GitHub Actions

    • 😐 GitHub Packages

    • GitHub Webhook

  • 😐 Git 私服搭建

    • GitLab

    • Gogs

學習方法

和上一個階段一樣,進階的最好方式就是 閱讀官方文檔 !GitHub 的文檔又新又全、還有中文版、還好懂,簡直就是完美的教程,這年頭,你想找個國外的、能讓人看得懂的文檔,真心不容易。

此外,建議多看一些別人分享的 GitHub 技巧,比如我之前分享過的幾個隱藏的 GitHub 小操作,在倉庫頁面按一個 鍵,就能更方便地閱讀代碼了,還是很實用的。

總之想學好 Git 就要多敲多實踐,多用它來管理項目,試著跟別人一起協作開發,慢慢地就熟練了。

面試考點

Git 在面試中的占比一般是很低的,至少我秋招 20 多輪面試中 1 次都沒被問到過,所以大家不用刻意去準備。

不過有時間的話可以了解一下常見的面試題,比如下面這些:

88785471b26eb1399d846cc6b41bb00b.png
Git 面試題


以上就是本期分享了,這份學習路線的詳情和資源放到了 我的編程知識星球(點擊了解詳情),歡迎加入一起學習編程。可以向魚皮和大廠同學 1 對 1 提問、幫你制定學習計劃不迷茫、跟著魚皮直播做項目(往期項目可無限回看)、領取魚皮原創編程學習 / 求職資料等。最近秋招開始了,星球內也在幫大家規劃求職進度、完善簡歷和項目亮點。

850440fb25c5bb79d10b8c522e2f7238.jpeg

往期推薦

盤點 Vue.js 那些有趣的版本名稱!

計算機專業,下一個土木?

轉行大數據 1 個月,我麻了。。。

這個17k star 的拖拽庫有點料~

編程導航,火了!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285154.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285154.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285154.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉]Android 代碼混淆和加固 so庫 簡單教你一行代碼實現

混淆 因為開啟混淆會使編譯時間變長,所以debug模式下不開啟。我們需要做的是: 1.將release下minifyEnabled的值改為true,打開混淆; 2.buildConfigField 不顯示log日志 為什么要混淆: 優化java的字節碼減小apk文件的大…

【ArcGIS微課1000例】0004:值提取至點(Extract value to point)

文章目錄 問題描述值提取至點工具介紹案例實現過程注意事項問題描述 研究區分布有成千上萬個離散的矢量點(根據范圍創建隨機點),但是點上沒有高程值,研究區DEM是有的,那么怎樣在ArcGIS中提取每個點對應的高程值? 離散點分布情況: DEM數據(ArcGlobe中三維顯示):

C語言試題159之計算字符串中子串出現的次數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:兩個字符串連接程序 2 、溫馨…

關于Android studio找不到sqlite數據庫的解決方法

打開Android Device Monitor,剩下的與Eclipse相同。轉載于:https://blog.51cto.com/10237758/1761397

linux ubuntu deepin apache2 rewrite

2019獨角獸企業重金招聘Python工程師標準>>> apache php 環境裝好了,下載了TP5的項目,然后部署上去之后,端口81,,但是 訪問 127.0.0.1:81 正常 127.0.0.1:81/admin,報錯 404 Not Found 原因是,…

論DATASNAP遠程方法支持自定義對象作參數

論DATASNAP遠程方法支持自定義對象作參數 DATASNAP遠程方法已經可以支持自定義對象作參數,這是非常方便的功能。 1)自定義對象 type TMyInfo class(TObject) public AccountNo: string; SQL: string; Params: string; end; 2)遠程方法定義 f…

[轉]Android-Proguard(代碼混淆)

一:混淆是什么,該怎么做? 如果我們的app正常發布就必須要經歷混淆這一步,混淆可以使我們的app不那么容易被別人用反編譯工具破解,就算被破解,想要讀懂我們的源碼也是非常費勁的,因為混淆過的源碼…

學妹,你要的C語言版AOE網絡數據結構來了,就這么簡單!

文章目錄AOE關鍵路徑編程AOE完整求解程序AOE關鍵路徑編程 不難發現AOE圖最大特點是沒有回路,并且有向圖方向始終是從源點走向匯點,且源點匯點都是一個。 把圖1寫成鄰接矩陣文件,見文件P200G736.TXT,并在此復制G0.C到AOE.C&#x…

C語言試題160之某個公司采用公用電話傳遞數據,數據是四位的整數,在傳遞過程中是加密的,加密規則如下: 每位數字都加上 5,然后用和除以 10 的余數代替該數字,再將第一位和第四位交換,第二位和第三位

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:某個公司采用公用電話傳遞數…

C# 關于狀態機的實現(案例版)

大部分的狀態機都是有限狀態機,某些業務環境,或者其他環境中,如果有狀態機其實還是很方便的。比如,我是用在了單個客戶的Socket通信上,未連接狀態,我就等連接。已連接狀態,就等待下一步指令狀態…

測試并發應用 (一)監控Lock接口

聲明:本文是《 Java 7 Concurrency Cookbook 》的第八章, 作者: Javier Fernndez Gonzlez 譯者:鄭玉婷 校對:方騰飛 監控Lock接口 Lock 接口是Java 并發 API提供的最基本的機制來同步代碼塊。它允許定義臨界區。臨界…

[There will be more story......]

This blog will keep on updating.轉載于:https://www.cnblogs.com/SinGuLaRiTy2001/p/7965776.html

根據生日得到星座

--得到星座 function DataCenter_Setting:GetConstellation(month, day)local dataInfo {121, 220, 321, 421, 522, 622, 723, 824, 924, 1024, 1123, 1222}local Constellations {"水瓶", "雙魚", "白羊", "金牛", "雙子"…

[轉]Android 項目的代碼混淆,Android proguard 使用說明

簡介 Java代碼是非常容易反編譯的。為了很好的保護Java源代碼,我們往往會對編譯好的class文件進行混淆處理。 ProGuard是一個混淆代碼的開源項目。它的主要作用就是混淆,當然它還能對字節碼進行縮減體積、優化等,但那些對于我們來說都算是次要…

數據結構與算法:終于可以用三種語言(C,C#,JavaScript)把圖的廣度優先遍歷講清楚了(推薦收藏)

文章目錄鄰接矩陣存儲圖的廣度優先遍歷過程分析C語言實現隊列編程程序中加入圖的處理函數結果的再次分析C#語言實現圖的廣度優先遍歷、并顯示廣度優先遍歷生成樹JavaScript語言實現圖的廣度優先遍歷、并顯示廣度優先遍歷生成樹鄰接矩陣存儲圖的廣度優先遍歷過程分析 對圖1這樣…

C語言試題161之求100000以內的自守數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:自守數是…

改造.NET遺留應用

淺議.NET遺留應用改造TLDR:本文介紹了遺留應用改造中的一些常見問題,并對改造所能開展的目標、原則、策略進行了概述。一、背景概述1、概述或許僅“遺留應用”這個標題就比較吸睛,因為我聽過太多人吐槽了。Robert Martin在《修改代碼的藝術》…

GitHub的DGit改進了平臺的可靠性、性能以及可用性

GitHub最近悄悄地發布了DGit,全稱為“分布式Git”。這是一種基于Git創建的分布式存儲系統,其目標是改進使用GitHub時的可靠性、可用性以及性能。\\DGit是一個應用層面的協議,它利用了Git分布式的特性,將每個倉庫在三臺不同的、獨立…

用靜態NAT實現外網PC訪問內網服務器

在我們的生產環境中常常處于安全考慮將服務器置于內網環境中,但同時得向外網提供各種服務功能,此時就需要用到NAT技術。下面是我用思科的仿真軟件搭建的一個實驗環境,實現外網PC訪問內網服務器。先說明一下實驗環境:路由器R0左邊為…

[轉]分布式事務之TCC服務設計和實現注意事項

1、TCC簡介 TCC是一種比較成熟的分布式事務解決方案,可用于解決跨庫操作的數據一致性問題; TCC是服務化的兩階段編程模型,其Try、Confirm、Cancel 3個方法均由業務編碼實現; 其中Try操作作為一階段,負責資源的檢查和…