一、簡介
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、配置說明
- 優(yōu)先級:下面配置會覆蓋上面配置资柔。更多...栖雾、git config
路徑文件 | 描述 |
---|---|
/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/z 、 a/b/z 或 a/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命令吱抚。