本文章參考了Pro Git
目錄
- 1 Git簡介
- 2 安裝Git
- 3 初次運行Git前的配置
- 3.1 配置用戶資訊
- 3.2配置文本編輯器
- 3.3配置差異化工具
- 3.4查看配置資訊
- 4 取得第一個Git倉庫
- 4.1 在作業目錄中初始化倉庫
- 4.2 從現有倉庫克隆
- 5 記錄每次更新到倉庫
- 5.1 檢查檔案狀態
- 5.2 跟蹤新檔案
- 5.3 暫存已修改檔案
- 5.4 忽略某些檔案
- 5.5 查看已暫存和未暫存的更新
- 5.6 提交更新
- 5.7 跳過使用暫存區域
- 5.8 移除檔案
- 5.9 移動檔案
- 6 查看提交歷史
- 7 遠程倉庫的使用
- 7.1 查看當前的遠程庫
- 7.2 添加遠程庫
- 7.3從遠程倉庫抓取資料
- 7.4 推送資料到遠程倉庫
- 7.5 查看遠程倉庫資訊
- 7.6 遠程倉庫的洗掉和重命名
- 8 打標簽
- 8.1 列出已有標簽
- 8.2 新建標簽
- 8.3 分享標簽
- 9 新建分支
- 10 合并分支
- 11 管理分支
- 12 遠程分支
- 13 小結
1 Git簡介
Linux內核開源專案有著眾多參與者,為了提高開發效率,專案組于2002年開始啟用分布式版本控制系統BitKeeper來管理和維護代碼,在BitKeeper同Linux內核開源社區合作關系于2005年合作關系結束后,Linux開源社區,特別是Linux締造者,Linus Torvalds不得不吸取教訓,決心開發出屬于自己的版本控制系統,他們對新的系統制定了若干目標:
- 速度
- 簡單的設計
- 對非線性開發模式的強力支持(允許上千個并行開發的分支)
- 完全分布式
- 有能力高效管理類似Linux內核一樣的超大規模專案(速度和資料量)
由此Git誕生,它在高度易用的同時,速度飛快,極其適合管理大專案,還有著令人難以置信的非線性分支管理系統,可以應付各種復雜專案的開發需求,
Git與其他版本控制系統的主要差別在于,Git只關心檔案資料的整體是否發生變化,而大多數其他系統則關系檔案內容的具體差異,這類系統,如CVS、Subversion、Perforce、Bazaar等等,每次都記錄有哪些檔案做了更新,以及更新了哪些行的什么內容,而Git并不保存這些前后變化的差異資料,它將變化的檔案做快照后,記錄在一個微型的檔案系統中,每次提交更新時,它會縱覽一遍所有檔案的指紋資訊并對檔案作一快照,然后保存一個指向這次快照的索引,為提高性能,若檔案沒有變化,Git不會再次保存,而只對上次保存的快照作一鏈接,
在保存到Git之前,所有資料都要進行內容的校驗和(checksum)計算,并將此結果作為資料的唯一標識和索引,Git使用SHA-1演算法計算資料的校驗和,通過對檔案的內容或目錄的結構計算出一個SHA-1哈希值,作為指紋字串,該字串由40個十六進制字符(0-9 及 a-f)組成,
對于任何一個檔案,在Git內都只有三種狀態:已提交(committed),已修改(modified)和已暫存(staged),已提交表示該檔案已經被安全地保存在本地資料庫中了;已修改表示修改了某個檔案,但還沒有提交保存;已暫存表示把已修改的檔案放在下次提交時要保存的清單中,
2 安裝Git
在Windows上安裝比較簡單,到GitHub的頁面上:http://msysgit.github.com/下載exe安裝檔案,
Linux、Mac上的安裝方式可以查看https://git-scm.com/book/zh/v2/起步-安裝-Git
3 初次運行Git前的配置
在新的系統上,需要先配置Git作業環境,git config命令專門配置或讀取相應的作業環境變數,git config命令的引數不同時,環境變數將存放在不同位置:
- /etc/gitconfig 檔案:系統中對所有用戶都普遍適用的配置,若使用 git config 時用 --system 選項,讀寫的就是這個檔案,
- ~/.gitconfig 檔案:用戶目錄下的組態檔只適用于該用戶,若使用 git config 時用 --global 選項,讀寫的就是這個檔案,
- 當前專案的git目錄中的組態檔(也就是作業目錄中的 .git/config 檔案):這里的配置僅僅針對當前專案有效,每一個級別的配置都會覆寫上層的相同配置,所以 .git/config 里的配置會覆寫 /etc/gitconfig 中的同名變數,
3.1 配置用戶資訊
個人的用戶名和電子郵件地址,在每一次Git提交時都會參考,會隨更新內容被永久納入歷史記錄,
$ git config --global user.name "new way"
$ git config --global user.email [email protected]
用了 --global 選項,那么更改的組態檔就是位于用戶主目錄下的那個,以后所有的專案都會默認使用這里配置的用戶資訊,如果要在某個特定的專案中使用其他名字或者電郵,只要去掉 --global 選項重新配置即可,新的設定保存在當前專案的 .git/config 檔案里,
3.2配置文本編輯器
Git需要輸入一些額外訊息的時候,會自動呼叫一個外部文本編輯器,
$ git config --global core.editor vscode
3.3配置差異化工具
還有一個比較常用的是,在解決合并沖突時使用哪種差異分析工具,比如要改用 vimdiff 的話:
$ git config --global merge.tool vimdiff
Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的輸出資訊,
3.4查看配置資訊
git config --list 命令查看所有配置資訊:
$ git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
credential.helper=manager
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
user.name=new way
[email protected]
core.editor=vscode
gui.recentrepo=D:/gitregion/pro1/articles
有時候會看到重復的變數名,那就說明它們來自不同的組態檔(比如 /etc/gitconfig 和 ~/.gitconfig),不過最終 Git 實際采用的是最后一個,
也可以直接查閱某個環境變數的設定,只要把特定的名字跟在后面即可,像這樣:
$ git config user.name
new way
4 取得第一個Git倉庫
有兩種取得 Git 專案倉庫的方法,第一種是在現存的目錄下,通過匯入所有檔案來創建新的 Git 倉庫,第二種是從已有的 Git 倉庫克隆出一個新的鏡像倉庫來,
4.1 在作業目錄中初始化倉庫
要對現有的某個專案開始用 Git 管理,只需到此專案所在的目錄,執行:
$ git init
如果當前目錄下有幾個檔案想要納入版本控制,需要先用 git add 命令告訴 Git 開始對這些檔案進行跟蹤,然后提交:
$ git add .
4.2 從現有倉庫克隆
克隆倉庫的命令格式為 git clone [url]比如,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,可以用下面的命令:
$ git clone git://github.com/schacon/grit.git
如果希望在克隆的時候,自己定義要新建的專案目錄名稱,可以在上面的命令末尾指定新的名字:
$ git clone git://github.com/schacon/grit.git mygrit
5 記錄每次更新到倉庫
5.1 檢查檔案狀態
$ git status
5.2 跟蹤新檔案
以README檔案為例:
$ git add README
5.3 暫存已修改檔案
假設README檔案被修改過,同樣使用 git add 將其提交至暫存區:
$ git add README
5.4 忽略某些檔案
一般我們總會有些檔案無需納入 Git 的管理,也不希望它們總出現在未跟蹤檔案串列,通常都是些自動生成的檔案,比如日志檔案,或者編譯程序中創建的臨時檔案等,我們可以創建一個名為 .gitignore 的檔案,列出要忽略的檔案模式,
檔案 .gitignore 的格式規范如下:
- 所有空行或者以注釋符號 # 開頭的行都會被 Git 忽略,
- 可以使用標準的 glob 模式匹配,
- 匹配模式最后跟反斜杠(/)說明要忽略的是目錄,
- 要忽略指定模式以外的檔案或目錄,可以在模式前加上驚嘆號(!)取反,
例如:
# 忽略所有 .a 結尾的檔案
*.a
# 但 lib.a 除外
!lib.a
# 僅僅忽略專案根目錄下的 TODO 檔案,不包括 subdir/TODO
/TODO
# 忽略 build/ 目錄下的所有檔案
build/
# 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
5.5 查看已暫存和未暫存的更新
實際上 git status 的顯示比較簡單,僅僅是列出了修改過的檔案,如果要查看具體修改了什么地方,可以用 git diff 命令,
$ git diff #查看尚未暫存的檔案更新了哪些部分
$ git diff --cached #查看已經暫存的檔案和上次提交的快照之間的差異
$ git diff --staged #查看已經暫存的檔案和上次提交的快照之間的差異,Git1.6.1及以上版本支持
5.6 提交更新
$ git commit -m "說明資訊"
若不加-m引數,則會呼叫默認文本編輯器輸入本次提交的說明
5.7 跳過使用暫存區域
$ git commit -a
5.8 移除檔案
$ git rm README
引數--cached表示從倉庫中洗掉,但保留在作業目錄中
5.9 移動檔案
$ git mv file_from file_to
6 查看提交歷史
$ git log
-
-p 展開顯示每次提交內容的差異
-
-2 僅顯示最近兩次更新
-
--stat 僅顯示簡要的增改行數統計
-
--prett 指定不同于默認格式的方式展示提交歷史,引數包括:oneline、short、full、fuller和format等,比如:
$ git log --pretty=format:"%h - %an, %ar : %s"
其中占位符有:
%H 提交物件(commit)的完整哈希字串
%h 提交物件的簡短哈希字串
%T 樹物件(tree)的完整哈希字串
%t 樹物件的簡短哈希字串
%P 父物件(parent)的完整哈希字串
%p 父物件的簡短哈希字串
%an 作者(author)的名字
%ae 作者的電子郵件地址
%ad 作者修訂日期(可以用 -date= 選項定制格式)
%ar 作者修訂日期,按多久以前的方式顯示
%cn 提交者(committer)的名字
%ce 提交者的電子郵件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式顯示
%s 提交說明
7 遠程倉庫的使用
7.1 查看當前的遠程庫
$ git remote
$ git remote -v #顯示對應的克隆地址
7.2 添加遠程庫
$ git remote add [shortname] [url]
7.3從遠程倉庫抓取資料
$ git fetch [remote-name]
7.4 推送資料到遠程倉庫
$ git push [remote-name] [branch-name]
$ git push origin master
7.5 查看遠程倉庫資訊
$ git remote show [remote-name]
7.6 遠程倉庫的洗掉和重命名
假設有個 origin 庫
重命名:
$ git remote rename pb origin
洗掉:
$ git remote rm origin
8 打標簽
8.1 列出已有標簽
$ git tag
8.2 新建標簽
$ git tag -a [版本號] -m [附注資訊] #含附注標簽
$ git tag -s [版本號] -m [附注資訊] #簽署標簽
$ git tag [版本號] #輕量級標簽
$ git tag -a [版本號] [校驗和或前幾位字符] #補充標簽
8.3 分享標簽
$ git push origin [tagname]
9 新建分支
$ git branch [分支名] #新建分支
$ git checkout [分支名] #切換分支
$ git checkout -b [分支名] #新建并切換分支
10 合并分支
$ git merge [分支名] #將分支并入主分支,有快進和合并兩種模式
$ git rebase [分支名] #衍合
11 管理分支
$ git branch #列出當前所有分支清單
$ git branch -v #分支清單與各分支最后一個提交物件的資訊
$ git branch --merged #已經并入當前分支的分支
$ git branch --no-merged #尚未并入當前分支的分支
12 遠程分支
$ git fetch origin #同步遠程服務器上的資料到本地
$ git push [遠程倉庫名] [分支名] #上傳本地分支至遠程倉庫
$ git pull [遠程倉庫名] [分支名] #將遠程索引合并到本地分支
$ git push [遠程名] :[分支名] #洗掉遠程分支
13 小結
本文是筆者學習入門Git的簡易手冊,記錄了Git常見命令,Git的版本控制能力,強悍!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/30955.html
標籤:其他
上一篇:程式員打造影響力常犯的 3 個錯
下一篇:只有努力了,你才能成為想要的樣子
