柚子快報邀請碼778899分享:Git和Github
柚子快報邀請碼778899分享:Git和Github
目錄
1.Git基礎(chǔ)
1.1文件版本
1.2Git
1.3SVN和Git
1.4Git中的三個區(qū)域
1.5Git中的三種狀態(tài)
1.6Git工作流程
1.7下載安裝Git
2.Git的基本操作
2.1獲取Git倉庫
2.2Git工作區(qū)文件的四種狀態(tài)
2.3Git基本操作?
2.3.1檢查文件的狀態(tài)
2.3.2跟蹤文件?
2.3.3提交更新
2.3.4修改已提交文件
2.3.5暫存已修改的文件
2.3.6提交已暫存的文件
2.3.7撤銷對文件的修改
2.3.8向暫存區(qū)性添加多個文件
2.3.9取消暫存的文件
?2.3.10跳過使用暫存區(qū)域
2.3.11移除文件
2.3.12忽略文件
2.3.13查看提交歷史
2.3.14回退到指定版本
3.開源與閉源
3.1開源許可協(xié)議?
3.2開源項目托管平臺
4.Github
4.1遠程倉庫?
4.1.1基于 HTTPS 將本地倉庫上傳到 Github
4.1.2基于 SSH?將本地倉庫上傳到 Github?
5.Git分支
5.1master 主分支 ?
5.2基本操作
5.2.1查看分支列表
5.2.2創(chuàng)建新分支
5.2.3切換分支
5.2.4分支的快速創(chuàng)建和切換?
5.2.5合并分支
5.2.6刪除分支
5.2.7遇到?jīng)_突時的分支合并
5.2.8將本地分支推送到遠程倉庫
5.2.9查看遠程倉庫中所有的分支列表?
5.2.10跟蹤分支
5.2.11拉取遠程分支的最新的代碼
5.2.12 刪除遠程分支
1.Git基礎(chǔ)
1.1文件版本
直接操作文件的多個版本
操作麻煩:每次都需要復(fù)制-->粘貼-->重命名命名不規(guī)范:無法通過文件名知道具體做了哪些修改容易丟失:如果硬盤故障或者不小心刪除,文件很容易丟失協(xié)作困難:需要手動合并每個人對項目文件的修改,容易出錯
版本控制軟件:用來記錄文件變化,以便將來查閱特定版本修訂情況的系統(tǒng),因此有時也叫做版本控制系統(tǒng)
好處:
操作方便:使用簡單的終端命令即可快速上手易于對比:基于版本控制軟件提供的功能,可以方便的比較文件的變化細節(jié),從而查找出導(dǎo)致問題的原因易于回溯:可以將選定的文件回溯到之前的狀態(tài),甚至整個項目都回退到過去某個時間點的狀態(tài)不易丟失:在版本控制軟件中,被用戶誤刪除的軟件,可以輕松恢復(fù)協(xié)作方便:基于版本控制軟件提供的分支功能,可以輕松實現(xiàn)多人協(xié)作開發(fā)
版本控制系統(tǒng)的分類:
①本地版本控制系統(tǒng):使用軟件來記錄文件的不同版本,提高了工作效率,降低了手動維護版本的出錯率,使維護文件版本的操作工具化
缺點:
單機運行,不支持多人協(xié)作開發(fā);
版本數(shù)據(jù)庫故障后,所有歷史更新記錄會丟失
②集中化的版本控制系統(tǒng):基于服務(wù)器,客戶端的運行模式;服務(wù)器保存文件的所有更新記錄;客戶端只保留最新的文件版本
優(yōu)點:聯(lián)網(wǎng)運行,支持多人協(xié)作開發(fā)
缺點:
不支持離線提交版本更新中心服務(wù)器奔潰后,所有人無法正常工作版本數(shù)據(jù)庫故障后,所有歷史更新記錄會丟失
如:SVN
③分布式版本控制系統(tǒng):基于服務(wù)器,客戶端的運行模式;服務(wù)器保存文件的所有更新記錄;客戶端是服務(wù)器的完整備份,并不只是保留文件的最新版本
優(yōu)點:
聯(lián)網(wǎng)運行,支持多人協(xié)作開發(fā)客戶端斷網(wǎng)后支持離線本地提交版本更新服務(wù)器故障或損壞后,可使用任何一個客戶端的備份進行恢復(fù)
如:Git
1.2Git
Git是一個開源的分布式版本控制系統(tǒng),是目前世界上最先進,最流行的版本控制系統(tǒng),可以快速高效的處理從很小到非常大的項目版本管理
Git特性:
直接記錄快照,而非差異比較近乎所有的操作都是本地執(zhí)行
1.3SVN和Git
SVN
傳統(tǒng)的版本控制系統(tǒng)(例如 SVN)是基于差異的版本控制,它們存儲的是一組基本文件和每個文件隨時間逐步累積的差異。通俗來講,就是記錄文件的變化
優(yōu)點:節(jié)省磁盤空間
缺點:耗時、效率低 在每次切換版本的時候,都需要在基本文件的基礎(chǔ)上,應(yīng)用每個差異,從而生成目標版本對應(yīng)的文件。
Git記錄快照
Git 快照是在原有文件版本的基礎(chǔ)上重新生成一份新的文件,類似于備份。
?Note:
為了效率,如果文件沒有修改,Git 不再重新存儲該文件,而是只保留一個鏈接指向之前存儲的文件。
缺點:占用磁盤空間較大
優(yōu)點:版本切換時非???,因為每個版本都是完整的文件快照,切換版本時直接恢復(fù)目標版本的快照即可。
特點:空間換時間
在 Git 中的絕大多數(shù)操作都只需要訪問本地文件和資源,一般不 需要來自網(wǎng)絡(luò)上其它計算機的信息。特性:
① 斷網(wǎng)后依舊可以在本地對項目進行版本管理
② 聯(lián)網(wǎng)后,把本地修改的記錄同步到云端服務(wù)器即可
1.4Git中的三個區(qū)域
使用 Git 管理的項目,擁有三個區(qū)域,分別是工作區(qū)、暫存區(qū)、Git 倉庫。
工作區(qū):處理工作的區(qū)域暫存區(qū):已完成的工作的臨時存放區(qū)域, 等待被提交Git 倉庫:最終的存放區(qū)域
1.5Git中的三種狀態(tài)
Git中文件的三種狀態(tài):
已修改modified: 表示修改了文件,但還沒將修改的結(jié)果放到暫存區(qū)已暫存staged: 表示對已修改文件的當前版本做了標記,使之包含在下次提交的列表中已提交commited:?表示文件已經(jīng)安全地保存在本地的 Git 倉庫中
?Note:
工作區(qū)的文件被修改了,但還沒有放到暫存區(qū),就是已修改狀態(tài)。如果文件已修改并放入暫存區(qū),就屬于已暫存狀態(tài)。如果 Git 倉庫中保存著特定版本的文件,就屬于已提交狀態(tài)。
1.6Git工作流程
基本的 Git 工作流程如下:
① 在工作區(qū)中修改文件
② 將你想要下次提交的更改進行暫存
③ 提交更新,找到暫存區(qū)的文件,將快照永久性 存儲到 Git 倉庫
1.7下載安裝Git
下載安裝:
官網(wǎng)地址:Git - Downloads
配置用戶信息
安裝完 Git 之后,設(shè)置自己的用戶名和郵件地址。
?Note:
如果使用了 --global 選項,那么該命令只需要運行一次,即可永久生效。
Git的全局配置文件
通過 git config --global user.name 和 git config --global user.email 配置的用戶名和郵箱地址,會被寫 入到 C:/Users/用戶名文件夾/.gitconfig 文件中。
這個文件是 Git 的全局配置文件,配置一次即可永久生效。
檢查配置信息
除了使用記事本查看全局的配置信息之外,還可以運行如下的終端命令,快速的查看 Git 的全局配置信息:
獲取幫助信息
2.Git的基本操作
2.1獲取Git倉庫
獲取Git倉庫的兩種方式:
將尚未進行版本控制的本地目錄轉(zhuǎn)換為 Git 倉庫從其它服務(wù)器克隆一個已存在的 Git 倉庫
以上兩種方式都能夠在自己的電腦上得到一個可用的 Git 倉庫
在現(xiàn)有目錄中初始化倉庫
在現(xiàn)有目錄中初始化倉庫步驟:
在項目目錄中,通過鼠標右鍵打開“Git Bash Here”執(zhí)行 git init 命令將當前的目錄轉(zhuǎn)化為 Git 倉庫
?Note:
git init 命令會創(chuàng)建一個名為 .git 的隱藏目錄,這個 .git 目錄就是當前項目的 Git 倉庫,里面包含了初始的必要文件,這些文件是 Git 倉庫的必要組成部分。
2.2Git工作區(qū)文件的四種狀態(tài)
工作區(qū)中的每一個文件都有 4 種狀態(tài)
未跟蹤(Untracked):不被 Git 所管理的文件(新建的文件)未修改(Unmodified) :工作區(qū)中文件的內(nèi)容和 Git 倉庫中文件的內(nèi)容保持一致已修改(Modified):工作區(qū)中文件的內(nèi)容和 Git 倉庫中文件的內(nèi)容不一致已暫存(Staged):工作區(qū)中被修改的文件已被放到暫存區(qū),準備將修改后的文件保存到 Git 倉庫中
?Note:
未跟蹤狀態(tài)的文件是不被 Git 所管理的文件,其他三種狀態(tài)文件是已被Git管理的文件Git 操作的目的是讓工作區(qū)中的文件都處于“未修改”的狀態(tài),及工作區(qū)的文件和Git倉庫文件內(nèi)容保持一致
2.3Git基本操作?
2.3.1檢查文件的狀態(tài)
命令:git status
簡化寫法:git status --short /?git status -s
功能:查看文件處于什么狀態(tài)
2.3.2跟蹤文件?
命令:git add
?Note:
綠色的 A 標記,表示文件是新添加到暫存區(qū)的文件
2.3.3提交更新
命令:git commit -m "描述信息"
2.3.4修改已提交文件
修改了工作區(qū)中 index.html 的內(nèi)容之后,檢查文件狀態(tài)
文件 index.html 出現(xiàn)在 Changes not staged for commit 這行下面,說明已跟蹤文件的內(nèi)容發(fā)生了變化, 但還沒有放到暫存區(qū)。
?Note:
修改過的、沒有放入暫存區(qū)的文件前面有紅色的 M 標記。
2.3.5暫存已修改的文件
命令:git add
功能:
可以用它開始跟蹤新文件把已跟蹤的、且已修改的文件放到暫存區(qū)把有沖突的文件標記為已解決狀態(tài)
2.3.6提交已暫存的文件
命令: git commit -m "提交消息"
功能:將暫存區(qū)中記錄的 index.html 的快照,提交到 Git 倉庫中進行保存:
2.3.7撤銷對文件的修改
撤銷操作:把對工作區(qū)中對應(yīng)文件的修改,還原成 Git 倉庫中所保存的版本。
操作的結(jié)果:所有的修改會丟失,且無法恢復(fù),危險性比較高
本質(zhì):用 Git 倉庫中保存的文件,覆蓋工作區(qū)中指定的文件。
2.3.8向暫存區(qū)性添加多個文件
命令:git add .
2.3.9取消暫存的文件
命令:git?reset HEAD 文件
2.3.10跳過使用暫存區(qū)域
Git 標準的工作流程是工作區(qū) → 暫存區(qū) → Git 倉庫
Git 提供了一個跳過使用暫存區(qū)域的方式,給 git commit 加上 -a 選項,Git 就會自動把所有已經(jīng)跟蹤過的文件暫存起來一并提交,從而跳過 git add 步驟,簡化了工作流程
2.3.11移除文件
從 Git 倉庫中移除文件的方式有兩種:
從 Git 倉庫和工作區(qū)中同時移除對應(yīng)的文件從 Git 倉庫中移除指定的文件,但保留工作區(qū)中對應(yīng)的文件
2.3.12忽略文件
一般有些文件無需納入 Git 的管理,也不希望它們總出現(xiàn)在未跟蹤文件列表。 在這種情況下,我們可以創(chuàng)建一個名為 .gitignore 的配置文件,列出要忽略的文件的匹配模式。 文件 .gitignore 的格式規(guī)范如下:
以 # 開頭的是注釋以 / 結(jié)尾的是目錄以 / 開頭防止遞歸以 ! 開頭表示取反可以使用 glob 模式進行文件和文件夾的匹配(glob 指簡化了的正則表達式)
glob模式是指簡化了的正則表達式:
星號 * 匹配零個或多個任意字符[ ] 匹配任何一個列在方括號中的字符 ([abc]即匹配一個a或匹配一個b或匹配一個c)問號 ? 只匹配一個任意字符在方括號中使用短劃線分隔兩個字符, 表示所有在這兩個字符范圍內(nèi)的都可以匹配([0-9] 表示匹配 所有0到9的數(shù)字)兩個星號 ** 表示匹配任意中間目錄(比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等)
如下為一個.gitignore文件的配置
#忽略所有的.txt文件
*.txt
#跟蹤所有的text.txt文件,即使前面已經(jīng)忽略了.txt文件
!text.txt
#只忽略當前目錄下的test文件,不忽略doc/test
/test
#忽略任何目錄下的test文件夾
test/
#忽略doc/test1.txt,但不忽略doc/code/test2.txt
doc/*.txt
#忽略doc/目錄及其所有子目錄下的.txt文件
doc/**/*.txt
2.3.13查看提交歷史
命令: git log?
補充:
git log -3:只展示最新的三條條提交歷史git log -2 --pretty=online:在一行展示最新的兩條提交歷史
2.3.14回退到指定版本
步驟:
git log --pretty=online:在一行上展示所有的提交歷史git reset --hard
3.開源與閉源
開源:即開放源代碼,任何人都可以去查看,修改和使用開源代碼
閉源:即軟件的代碼是封閉的,只有作者能看到軟件的代碼并做修改
簡單理解:開源是指不僅提供程序還提供程序的源代碼;閉源是只提供程序,不提供源代碼
3.1開源許可協(xié)議?
開源并不意味著完全沒有限制,為了限制使用者的使用范圍和保護作者的權(quán)利,每個開源項目都應(yīng)該遵守開源許可協(xié)議( Open Source License )。
① BSD(Berkeley Software Distribution)
② Apache Licence 2.0
③ GPL(GNU General Public License)
具有傳染性的一種開源協(xié)議,不允許修改后和衍生的代碼做為閉源的商業(yè)軟件發(fā)布和銷售使用 GPL 的最著名的軟件項目是:Linux
④ LGPL(GNU Lesser General Public License)
⑤ MIT(Massachusetts Institute of Technology, MIT)
是目前限制最少的協(xié)議,唯一的條件:在修改后的代碼或者發(fā)行包中,必須包含原作者的許可信息使用 MIT 的軟件項目有:jquery、Node.js
關(guān)于開源許可協(xié)議的介紹,可以參考:各種開源協(xié)議介紹 | 菜鳥教程
3.2開源項目托管平臺
專門用于免費存放開源項目源代碼的網(wǎng)站,叫做開源項目托管平臺。
目前世界上比較出名的開源項目托管平臺 主要有以下 3 個:
Github(使用最廣的開源項目托管平臺)Gitlab(對代碼私有性支持較好,因此企業(yè)用戶較多)Gitee(碼云,國產(chǎn)的開源項目托管平臺。訪問速度快、純中文界面、使用友好)
?Note:
以上的開源項目托管平臺,只能托管以 Git 管理的項目源代碼,因此,它們的名字都以 Git 開頭。
4.Github
Github 是全球最大的開源項目托管平臺。因為只支持 Git 作為唯一的版本控制工具,故名 GitHub。
創(chuàng)建倉庫:?
創(chuàng)建成功
4.1遠程倉庫?
Github 上的遠程倉庫,有兩種訪問方式,HTTPS 和 SSH
區(qū)別:
HTTPS:零配置;但是每次訪問倉庫時,需要重復(fù)輸入 Github 的賬號和密碼才能訪問成功SSH:需要進行額外的配置;但是配置成功后,每次訪問倉庫時,不需重復(fù)輸入 Github 的賬號和密碼
?Note:
在實際開發(fā)中,推薦使用 SSH 的方式訪問遠程倉庫
4.1.1基于 HTTPS 將本地倉庫上傳到 Github
4.1.2基于 SSH?將本地倉庫上傳到 Github?
SSH key 作用:實現(xiàn)本地倉庫和 Github 之間免登錄的加密數(shù)據(jù)傳輸。
SSH key 好處:免登錄身份認證、數(shù)據(jù)加密傳輸。
SSH key 由兩部分組成,分別是:
① id_rsa(私鑰文件,存放于客戶端的電腦中即可)
② id_rsa.pub(公鑰文件,需要配置到 Github 中)
配置 SSH key?
① 打開 Git Bash
② 粘貼如下的命令:
ssh-keygen -t rsa -b 4096 -C "xxxxx@xxx.com"(xxxxx@xxx.com替換為注冊 Github 賬號時填寫的郵箱)
③ 連續(xù)敲擊 3 次回車,在 C:\Users\用戶名文件夾\.ssh 目錄中生成 id_rsa 和 id_rsa.pub 兩個文件
① 使用記事本打開 id_rsa.pub 文件,復(fù)制里面的文本內(nèi)容
② 在瀏覽器中登錄 Github,點擊頭像 -> Settings -> SSH and GPG Keys -> New SSH key ③ 將 id_rsa.pub 文件中的內(nèi)容,粘貼到 Key 對應(yīng)的文本框中
④ 在 Title 文本框中任意填寫一個名稱,來標識這個 Key 從何而來
基于 SSH?將本地倉庫上傳到 Github??
5.Git分支
每個獨立的功能,對應(yīng)一個具體的分支,分支之間互不影響,能夠提高開發(fā)的效率
在進行多人協(xié)作開發(fā)的時候,為了防止互相干擾,提高協(xié)同開發(fā)的體驗,建議每個開發(fā)者都基于分支進行項目功能的開發(fā)
5.1master 主分支 ?
在初始化本地 Git 倉庫的時候,Git 默認已經(jīng)幫我們創(chuàng)建了一個名字叫做 master 的分支,通常我們把這個 master 分支叫做主分支。
在實際工作中,master 主分支的作用是:用來保存和記錄整個項目已完成的功能代碼。 因此,不允許程序員直接在 master 分支上修改代碼,因為這樣做的風(fēng)險太高,容易導(dǎo)致整個項目崩潰。由于程序員不能直接在 master 分支上進行功能的開發(fā),所以就有了功能分支的概念。 功能分支指的是專門用來開發(fā)新功能的分支,它是臨時從 master 主分支上分叉出來的,當新功能開發(fā)且測試完畢后,最終需要合并到 master 主分支上
5.2基本操作
5.2.1查看分支列表
命令:git branch
作用:查看當前 Git 倉庫中所有的分支列表
?Note:
分支名字前面的 * 號表示當前所處的分支。
5.2.2創(chuàng)建新分支
命令:git branch 分支名
作用:基于當前分支,創(chuàng)建一個新的分支,此時,新分支中的代碼和當前分支完全一樣:
5.2.3切換分支
命令:git checkout 分支名
作用:切換到指定的分支上進行開發(fā)
5.2.4分支的快速創(chuàng)建和切換?
命令:git checkout -b A
作用:創(chuàng)建指定名稱的新分支,并立即切換到新分支上
5.2.5合并分支
命令:git merge 分支名
作用:功能分支的代碼開發(fā)測試完畢之后,將完成后的代碼合并到 master 主分支上
?
5.2.6刪除分支
命令:git branch -d?分支名
作用:當把功能分支的代碼合并到 master 主分支上以后,刪除對應(yīng)的功能分支
5.2.7遇到?jīng)_突時的分支合并
如果在兩個不同的分支中,對同一個文件進行了不同的修改,Git 就沒法干凈的合并它們。 此時,我們需要打開這些包含沖突的文件然后手動解決沖突。
5.2.8將本地分支推送到遠程倉庫
命令:git push -u 遠程倉庫的別名 本地分支名稱:遠程分支名稱
簡化:git push -u 遠程倉庫的別名 本地分支名稱(遠程分支和本地分支名稱一致)
?Note:
第一次推送分支需要帶 -u 參數(shù),此后可以直接使用 git push 推送代碼到遠程分支
5.2.9查看遠程倉庫中所有的分支列表?
命令:git remote show test
功能:查看遠程倉庫中,所有的分支列表的信息
5.2.10跟蹤分支
命令:git checkout -b 本地分支名稱 遠程倉庫名稱/遠程分支名稱
作用:從遠程倉庫中,把遠程分支下載到本地倉庫中。
5.2.11拉取遠程分支的最新的代碼
命令:git pull
功能:把遠程分支最新的代碼下載到本地對應(yīng)的分支中
5.2.12 刪除遠程分支
命令:git push 遠程倉庫名稱 --delete 遠程分支名稱
功能:刪除遠程倉庫中指定的分支:
柚子快報邀請碼778899分享:Git和Github
文章來源
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。