學習Git和Github竿拆,從這里開始宙拉!

一、簡介

Git 是一個免費開源分布式版本控制系統(tǒng)丙笋,由于其占用空間小谢澈、性能快,優(yōu)于其他SCM工具(SVN不见、CVS等)澳化,主要用于代碼版本管理。

GitHub 是基于 Git 的免費版本控制倉庫(開源項目集中地)稳吮,任何人都可以上傳或下載平臺上的開源項目,全球有6500萬的開發(fā)者在使用井濒。


二灶似、Git
1、Git 整體結(jié)構(gòu)

2瑞你、版本對象

Git 通過 commit 對象來保存每一次提交的版本內(nèi)容酪惭,其中 tree對象指向所有代碼文件的快照。多版本之間通過 parent 對象進行鏈接者甲。


3春感、文件狀態(tài)

Git 管理的文件,有4個狀態(tài):

  • Untracked:沒有加到 Git倉庫 進行版本管理虏缸;
  • Unmodified:提交Git倉庫后沒有被修改鲫懒;
  • Modified:提交Git倉庫后被修改;
  • Staged:本地暫存區(qū)刽辙,等待被提交到Git倉庫窥岩。

4、安裝
  • MacOS 使用軟件包管理器Homebrew 安裝git宰缤。更多...
# 1颂翼、終端下,執(zhí)行下面命令慨灭,安裝 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 2朦乏、安裝git
brew install git

# 3、安裝完成氧骤,首先設(shè)置全局名稱和郵箱(修改下面郵箱和用戶名)
git config --global user.name ×××
git config --global user.email ×××@×××

  • Linux/Unix :Debian/Ubuntu呻疹、Fedora 上用命令安裝git。更多...
# Debian/Ubuntu
apt-get install git

# up to Fedora 21
yum install git
    
# Fedora 22 and later
dnf install git

# 安裝完成语淘,首先設(shè)置全局名稱和郵箱(修改下面郵箱和用戶名)
git config --global user.name ×××
git config --global user.email ×××@×××

  • Windows :用 exe 安裝包安裝 git。下載

5、配置說明
路徑文件 描述
/etc/gitconfig 包含系統(tǒng)上每一個用戶及他們倉庫的通用配置。 <br />執(zhí)行 git config 時帶上 --system 選項误阻,才能讀寫該文件,需要管理員或超級用戶權(quán)限。
~/.gitconfig<br />~/.config/git/config 只針對當前系統(tǒng)用戶旭愧。 <br />用 --global 選項來讀寫此文件,修改配置影響當前系統(tǒng)用戶的所有倉庫宙暇。
.git/config 當前倉庫的 Git 配置文件输枯。<br />用 --local 選項來讀寫此文件(在倉庫目錄中,無需此選項)占贫。
  • 查看配置的命令
# 查看所有g(shù)it配置桃熄,可能會有重復,因為來自不同配置文件(/etc/gitconfig 和 ~/.gitconfig)型奥,后面顯示的配置信息會覆蓋前面
$ git config --list

# 查看所有g(shù)it配置瞳收,以及對應(yīng)的配置文件
$ git config --list --show-origin

# 查看單個配置信息
git config user.name

# 查詢所有可用配置信息
git help config

6、.gitignore

有些文件不需要 git 進行版本管理厢汹,譬如編譯生成的 cache 文件等螟深,可以使用 .gitignore 對其進行忽略。

glob模式 簡化版的正則匹配
* 匹配零個或多個任意字符烫葬;
? 只匹配一個任意字符界弧;
[abc] 匹配任何一個列在方括號中的字符 ;
[0-9] 表示匹配所有 0 到 9 的數(shù)字搭综;
** 表示匹配任意中間目錄垢箕,比如 a/**/z 可以匹配 a/za/b/za/b/c/z 等设凹。
序號 描述
1舰讹、 空行或者 # 開頭的行 都會被忽略;
2闪朱、 匹配模式可以以(/)開頭防止遞歸月匣;
3、 匹配模式可以以(/)結(jié)尾指定目錄奋姿;
4锄开、 要忽略指定模式以外的文件或目錄,可以在模式前加上嘆號(!)取反称诗;
# 忽略所有的 .a 文件
*.a

# 但跟蹤所有的 lib.a萍悴,即便你在前面忽略了 .a 文件
!lib.a

# 只忽略當前目錄下的 TODO 文件,而不忽略 subdir/TODO
/TODO

# 忽略任何目錄下名為 build 的文件夾
build/

# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 忽略 doc/ 目錄及其所有子目錄下的 .pdf 文件
doc/**/*.pdf

7癣诱、origin 與 master

遠程倉庫名字 origin 與分支名字 master 一樣计维,在 Git 中并沒有任何特別的含義

  • master : 是運行 git init 時,默認的起始分支名字撕予;
  • origin : 是運行 git clone 時鲫惶,默認的遠程倉庫名字, 如果運行 git clone -o booyah实抡,那么遠程分支名字將會是 booyah/master欠母。

8、HEAD

HEAD是一個符號引用吆寨,指向當前分支赏淌。

$ cat .git/HEAD
ref: refs/heads/master
  • HEAD~{n} :表示以 HEAD 為起點,向后回溯n個版本啄清;

  • HEAD^n :表示上個版本的第幾個提交的版本(當前版本可能由多個版本合并得到)六水;

如下版本提交記錄(提交順序從上到下、從左到右)辣卒,A的上個版本是 B 和 C缩擂。更多...

G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         A
A =      = A^0
B = A^   = A^1     = A~1
C =      = A^2
D = A^^  = A^1^1   = A~2
E = B^2  = A^^2
F = B^3  = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2  = B^^2    = A^^^2  = A~2^2
I = F^   = B^3^    = A^^3^
J = F^2  = B^3^2   = A^^3^2

9、常用操作

怎么使用 Git 的命令進行文件版本管理添寺?詳情,看這里懈费!


三计露、GitHub
1、下載代碼方式

GitHub 有三種方式下載代碼:

  • HTTPS:使用登錄 github 的用戶名和密碼憎乙,即可clone 項目票罐。
  • SSH:通過上傳 SSH key 到 GitHub 后臺,這樣無需密碼即可 clone 項目泞边。
  • GitHub CLI:平臺提供管理倉庫的終端工具该押,還可以使用 Github 提供的一些額外功能。

2阵谚、免密下載代碼

配置ssh key蚕礼,可以免密下載Github代碼,既方便又安全梢什,需要使用到 ssh-keygen 工具奠蹬。

# 1、打開 Terminal(終端)嗡午,查看已有密鑰(.pub后綴的文件名)
$ ls -al ~/.ssh

# 2囤躁、如果沒有就創(chuàng)建一個
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

# 3、復制下面輸出到剪切板(下面兩個適用mac系統(tǒng))
$ cat ~/.ssh/id_rsa.pub
$ pbcopy < ~/.ssh/id_rsa.pub
$ cat ~/.ssh/id_rsa.pub | pbcopy

# 4、登錄github官網(wǎng)狸演,按照這個路徑新建 SSH key
Settings --> SSH and GPG keys --> New SSH key
1言蛇、填寫名字(隨意填寫,保證下次看到能明白是哪里的key)宵距;
2腊尚、粘貼剪切板內(nèi)容到key的輸入框中;
3消玄、保存跟伏。

# 5、Terminal(終端)檢查是否可以成功連接
$ ssh -T git@github.com

# 6翩瓜、Github隨便找個項目受扳,測試下載,看看是否成功
$ git clone git@github.com:shipwright-io/build.git

3兔跌、桌面工具

如果覺得在終端輸入命令太麻煩勘高,可以使用 Github 提供的桌面應(yīng)用工具 GitHub Desktop


4坟桅、Pull Requset

為開源項目貢獻代碼的流程:

# 1华望、登錄Github,找到項目仅乓,單擊 Fork 按鈕來獲得項目副本
# 2赖舟、下載項目副本到本地
git clonet git@github.com:***/test.git

# 3、新建分支
cd test
git checkout -b branch1

# 4夸楣、修改代碼
# 5宾抓、提交代碼到本地倉庫
git commit -a -m '修改代碼'
# 6、推送本地倉庫到遠程倉庫(項目副本)
git push origin branch1
# 7豫喧、登錄 Github石洗,提示項目有新分支,并創(chuàng)建 pull request 發(fā)送給源項目
# 8紧显、源項目作者可以看到這個 pull request讲衫,由他決定是關(guān)閉還是合并

5、Pull Requset(沖突)

如果源項目比副本多很多提交版本孵班,在副本上提交的分支會無法提交 pull request涉兽,這樣來解決:

# 1、下載源項目最新代碼
git remote add upstream git@github.com:***/orgin.git
git fetch upstream
# 2重父、合并最新代碼到自己分支
git merge upstream/master

# 3花椭、有可能會產(chǎn)生沖突,修復沖突并使得功能完好

# 4房午、推送分支代碼到遠程倉庫(項目副本)
git push origin branch1

# 5矿辽、登錄Github,并發(fā)送 pull request 給源項目

6、Fork項目

fork項目是不會隨著源項目自動更新的袋倔,需要手動更新

# 1雕蔽、切換到fork項目的分支master
git checkout master
# 2、拉取源項目代碼并合并到當前分支
git pull https://github.com/progit/progit2.git
# 3宾娜、推送更新后的代碼到fork項目
$ git push origin master (3)
# 上面每次更新都需要輸入源項目地址批狐,太麻煩,如下方式簡化
# 1前塔、添加源項目地址到本地
git remote add progit https://github.com/progit/progit2.git
# 2嚣艇、把master分支的拉取代碼的地址設(shè)置為源項目地址
git branch --set-upstream-to=progit/master master
# 3、將默認推送倉庫設(shè)置為 origin
git config --local remote.pushDefault origin

# 4华弓、之后更新代碼方式
git checkout master
git pull
git push

四食零、VS Code

推薦使用 VS Code 來編輯代碼,支持所有編程語言寂屏,只需要安裝插件即可贰谣,git也是內(nèi)置的,只需要鼠標點擊即可完成git操作迁霎,無需輸入復雜的git命令吱抚。


五考廉、參考文檔
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昌粤,一起剝皮案震驚了整個濱河市憋肖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婚苹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸵膏,死亡現(xiàn)場離奇詭異膊升,居然都是意外死亡,警方通過查閱死者的電腦和手機谭企,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門廓译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人债查,你說我怎么就攤上這事非区。” “怎么了盹廷?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵征绸,是天一觀的道長。 經(jīng)常有香客問我,道長管怠,這世上最難降的妖魔是什么淆衷? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮渤弛,結(jié)果婚禮上祝拯,老公的妹妹穿的比我還像新娘。我一直安慰自己她肯,他們只是感情好佳头,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晴氨,像睡著了一般康嘉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瑞筐,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天凄鼻,我揣著相機與錄音,去河邊找鬼聚假。 笑死块蚌,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的膘格。 我是一名探鬼主播峭范,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘪贱!你這毒婦竟也來了纱控?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤菜秦,失蹤者是張志新(化名)和其女友劉穎甜害,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體球昨,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡尔店,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了主慰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚣州。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖共螺,靈堂內(nèi)的尸體忽然破棺而出该肴,到底是詐尸還是另有隱情,我是刑警寧澤藐不,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布匀哄,位于F島的核電站秦效,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拱雏。R本人自食惡果不足惜棉安,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铸抑。 院中可真熱鬧贡耽,春花似錦、人聲如沸鹊汛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刁憋。三九已至滥嘴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間至耻,已是汗流浹背若皱。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尘颓,地道東北人走触。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像疤苹,于是被迫代替她去往敵國和親互广。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容