版本控制器之git介紹
git(版本控制工具)
1. git 介紹
-
- git是目前世界上最先進的分散式版本控制系統,可以有效,高速的處理從小到大的專案版本管理。
-
- git是linux torvalds 為了幫助管理linux核心開發二開發的一個開放原始碼的版本控制軟體。
-
- git作用:更好的管理我們程式,比如原來提交的內容,後面修改,透過git工具把之前內容重現出來,可以進行還原,現在很多軟體中都在使用git
2. github (遠端倉庫)
-
- github 是一個面向開源級私有軟體的託管平臺,因為只支援git作為唯一的版本庫格式進行託管,故名github。(遠端倉庫)
-
- github是一個非常適合程式設計師交流的網站,有很多國際上的技術大牛都愛github上有自己的開原始碼,只要申請了賬號,開源隨意看到程式碼,如:百度,阿里等
-
- 遠端倉庫有:gitlab ,碼雲,github。
-
- github是一個網站,這個網站開源幫助程式設計師之間交流和學習
3. 術語
- 版本控制:一種在開發過程用於管理我們對檔案,目錄或工程等內容的修改歷史,方便檢視歷史記錄,備份以恢復以前的版本軟體工程技術。
- 倉庫:受版本控制所有檔案修訂歷史的貢獻資料或檔案
- 工作空間:本地硬碟或linux使用者賬戶上編輯的檔案副本
- 工作樹/工作區:工作區中包括了倉庫的工作檔案,可以修改內容和提交更改
- 暫存區暫存區是工作區用來提交更改(commit)前可以暫存工作區的變化工作區(git add)暫存區(git commit)版本庫
- 簽出(checkout)從倉庫中將檔案的最新修改版本複製到工作空間
- 簽入(check):將新版本複製回倉庫
- 提交(commit):對各自的工作副本做更改,並將這些更改提交到倉庫
- 衝突(conflict):多人對通一個檔案副本進行修改,並將這些更改提交到倉庫
- 合併(merge):將某分支上的更改連線到主幹分支
- 分支(branch): 從主線上分開的副本,預設分支叫做master
4. 常見的版本控制工具
git (今天講git) ,svn(講),cvs,vss tfs
5. svn和git的區別
-
- git是分散式,svn是集中式
-
- git內容按後設資料方式儲存,而svn是按檔案儲存
-
- git分支和svn分支不同
-
- git沒有一個全域性的版本號,svn是有全域性版本號
-
- git的內容完整性要優於svn
6. git的安裝&連結到github
- git安裝教程
- git遠端關聯到github教程
7. Git工作區、暫存區和版本庫
- 基本概念:
我們先來理解下 Git 工作區、暫存區和版本庫概念:
-
- 工作區:就是你在電腦裡能看到的目錄。
-
- 暫存區:英文叫 stage 或 index。一般存放在 .git 目錄下的 index 檔案(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
-
- 版本庫:工作區有一個隱藏目錄 .git,這個不算工作區,而是 Git 的版本庫。
下面這個圖展示了工作區、版本庫中的暫存區和版本庫之間的關係:
- 版本庫:工作區有一個隱藏目錄 .git,這個不算工作區,而是 Git 的版本庫。
圖片來源:https://www.runoob.com/git/git-workspace-index-repo.html
- 圖中左側為工作區,右側為版本庫。在版本庫中標記為 "index" 的區域是暫存區(stage/index),標記為 "master" 的是 master 分支所代表的目錄樹。
- 圖中我們可以看出此時 "HEAD" 實際是指向 master 分支的一個"遊標"。所以圖示的命令中出現 HEAD 的地方可以用 master 來替換。
- 圖中的 objects 標識的區域為 Git 的物件庫,實際位於 ".git/objects" 目錄下,裡面包含了建立的各種物件及內容。
- 當對工作區修改(或新增)的檔案執行 git add 命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的檔案內容被寫入到物件庫中的一個新的物件中,而該物件的ID被記錄在暫存區的檔案索引中。
- 當執行提交操作(git commit)時,暫存區的目錄樹寫到版本庫(物件庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。
- 當執行 git reset HEAD 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。
- 當執行 git rm --cached [file] 命令時,會直接從暫存區刪除檔案,工作區則不做出改變。
- 當執行 git checkout . 或者 git checkout -- [file] 命令時,會用暫存區全部或指定的檔案替換工作區的檔案。這個操作很危險,會清除工作區中未新增到暫存區中的改動。
- 當執行 git checkout HEAD . 或者 git checkout HEAD [file] 命令時,會用 HEAD 指向的 master 分支中的全部或者部分檔案替換暫存區和以及工作區中的檔案。這個命令也是極具危險性的,因為不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。
8. Git 建立倉庫
本章節我們將為大家介紹如何建立一個 Git 倉庫。
你可以使用一個已經存在的目錄作為 Git 倉庫。
git init
Git 使用 git init 命令來初始化一個 Git 倉庫,Git 的很多命令都需要在 Git 的倉庫中執行,所以 git init 是使用 Git 的第一個命令。
在執行完成 git init 命令後,Git 倉庫會生成一個 .git 目錄,該目錄包含了資源的所有後設資料,其他的專案目錄保持不變。
使用方法
使用當前目錄作為 Git 倉庫,我們只需使它初始化。
git init
該命令執行完後會在當前目錄生成一個 .git 目錄。
使用我們指定目錄作為Git倉庫。
git init newrepo
初始化後,會在 newrepo 目錄下會出現一個名為 .git 的目錄,所有 Git 需要的資料和資源都存放在這個目錄中。
如果當前目錄下有幾個檔案想要納入版本控制,需要先用 git add 命令告訴 Git 開始對這些檔案進行跟蹤,然後提交:
$ git add *.c
$ git add README
$ git commit -m '初始化專案版本'
以上命令將目錄下以 .c 結尾及 README 檔案提交到倉庫中。
注: 在 Linux 系統中,commit 資訊使用單引號 ',Windows 系統,commit 資訊使用雙引號 "。
所以在 git bash 中 git commit -m '提交說明' 這樣是可以的,在 Windows 命令列中就要使用雙引號 git commit -m "提交說明"。
git clone
我們使用 git clone 從現有 Git 倉庫中複製專案(類似 svn checkout)。
克隆倉庫的命令格式為:
git clone <repo>
如果我們需要克隆到指定的目錄,可以使用以下命令格式:
git clone <repo> <directory>
引數說明:
- repo:Git 倉庫。
- directory:本地目錄。
比如,要克隆 Ruby 語言的 Git 程式碼倉庫 Grit,可以用下面的命令:
$ git clone git://github.com/schacon/grit.git
執行該命令後,會在當前目錄下建立一個名為grit的目錄,其中包含一個 .git 的目錄,用於儲存下載下來的所有版本記錄。
如果要自己定義要新建的專案目錄名稱,可以在上面的命令末尾指定新的名字:
$ git clone git://github.com/schacon/grit.git mygrit
配置
git 的設定使用git config
命令。
顯示當前的 git 配置資訊:
$ git config --list
credential.helper=osxkeychain
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
編輯 git 配置檔案:
$ git config -e # 針對當前倉庫
或者:
$ git config -e --global # 針對系統上所有倉庫
設定提交程式碼時的使用者資訊:
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
如果去掉 --global 引數只對當前倉庫有效。
9. Git 基本操作
Git 的工作就是建立和儲存你專案的快照及與之後的快照進行對比。
本章將對有關建立與提交你的專案快照的命令作介紹。
Git 常用的是以下 6 個命令:git clone、git push、git add 、git commit、git checkout、git pull,後面我們會詳細介紹。
說明:
workspace:工作區
staging area:暫存區/快取區
local repository:版本庫或本地倉庫
remote repository:遠端倉庫
一個簡單的操作步驟:
$ git init
$ git add .
$ git commit
- git init - 初始化倉庫。
- git add . - 新增檔案到暫存區。
- git commit - 將暫存區內容新增到倉庫中。
建立倉庫命令
下表列出了 git 建立倉庫的命令:
命令 | 說明 |
---|---|
git init | 初始化倉庫 |
git clone | 複製一份遠端倉庫,也就是下載一個專案。 |
提交與修改
Git 的工作就是建立和儲存你的專案的快照及與之後的快照進行對比。
下表列出了有關建立與提交你的專案的快照的命令:
命令 | 說明 |
---|---|
git add | 新增檔案到暫存區 |
git status | 檢視倉庫當前的狀態,顯示有變更的檔案。 |
git diff | 比較檔案的不同,即暫存區和工作區的差異。 |
git commit | 提交暫存區到本地倉庫。 |
git reset | 回退版本。 |
git rm | 將檔案從暫存區和工作區中刪除。 |
git mv | 移動或重新命名工作區檔案。 |
git checkout | 分支切換。 |
git switch (Git 2.23 版本引入) | 更清晰地切換分支。 |
git restore (Git 2.23 版本引入) | 恢復或撤銷檔案的更改。 |
提交日誌
命令 | 說明 |
---|---|
git log | 檢視歷史提交記錄 |
git blame [file] | 以列表形式檢視指定檔案的歷史修改記錄 |
遠端操作
命令 | 說明 |
---|---|
git remote | 遠端倉庫操作 |
git fetch | 從遠端獲取程式碼庫 |
git pull | 下載遠端程式碼併合並 |
git push | 上傳遠端程式碼併合並 |