Git快速入門

0. Git簡介

git是一個分布式版本控制軟件,最初由林納斯·托瓦茲(Linus Torvalds)創作,于2005年以GPL發布。最初目的是為更好地管理Linux內核開發而設計。Git可以在任何時間點,把文檔的狀態作為更新記錄保存起來。因此可以把編輯過的文檔復原到以前的狀態,也可以顯示編輯前后的內容差異。

而且,編輯舊文件后,試圖覆蓋較新的文件的時候(即上傳文件到服務器時),系統會發出警告,因此可以避免在無意中覆蓋了他人的編輯內容。

更多內容請查看Git維基百科。

1. Git Vs SVN

分布式 vs 集中管理 (多份版本庫 vs 一份版本庫,設想下版本服務器掛了?)
無需網絡,隨時隨地進行版本控制,在沒有網絡的情況下你想回退到某個版本svn基本沒戲;
分支的新建、合并非常方便、快速,沒有任何成本,基本不耗時,svn的版本基本上等同于又復制了一份代碼。

stackoverflow 上關于svn和git的區別的討論,說的很詳細,請參考 Why is Git better than Subversion?

Github上通過版本庫結構、歷史、子項目(submudle)的不同來對比兩者,請參考Github的 What are the differences between SVN and Git?

2.安裝

通過官網安裝。

下面推薦各個OS的GUI( 圖形用戶界面)Git工具,但還是強烈推薦使用命令行操作Git。

  • Windows
    烏龜Tortoisegit
    https://tortoisegit.org/

  • Mac
    免費的SourceTree客戶端。
    http://www.sourcetreeapp.com/

  • Linux
    不推薦客戶端,可以使用發行版包含的基礎軟件包管理工具來安裝。 如果以 Fedora 上為例,你可以使用 yum:

$ sudo yum install git

如果你在基于 Debian 的發行版上,請嘗試用 apt-get:

$ sudo apt-get install git

3. 配置

Git 自帶一個 git config 的工具來幫助設置控制 Git 外觀和行為的配置變量。 這些變量存儲在三個不同的位置:

  1. /etc/gitconfig 文件: 包含系統上每一個用戶及他們倉庫的通用配置。 如果使用帶有 --system 選項的 git config 時,它會從此文件讀寫配置變量。

  2. ~/.gitconfig~/.config/git/config 文件:只針對當前用戶。 可以傳遞 --global 選項讓 Git 讀寫此文件。

  3. 當前使用倉庫的 Git 目錄中的 config 文件(就是 .git/config):針對該倉庫。

每一個級別覆蓋上一級別的配置,所以 .git/config 的配置變量會覆蓋 /etc/gitconfig 中的配置變量。

在 Windows 系統中,Git 會查找 $HOME 目錄下(一般情況下是 C:\Users\$USER)的 .gitconfig 文件。 Git 同樣也會尋找 /etc/gitconfig 文件,但只限于 MSys 的根目錄下,即安裝 Git 時所選的目標位置。

3.1 用戶信息配置

每一個 Git 的提交都會使用這些信息,并且它會寫入到你的每一次提交中,不可更改:

$ git config --global user.name "mantoudev"
$ git config --global user.email mantoudev@163.com

如果使用了 --global 選項,那么該命令只需要運行一次,因為之后無論你在該系統上做任何事情, Git 都會使用那些信息。 當你想針對特定項目使用不同的用戶名稱與郵件地址時,可以在那個項目目錄下運行沒有 --global 選項的命令來配置。

很多 GUI 工具都會在第一次運行時幫助你配置這些信息。

3.2 檢查配置信息

如果想要檢查你的配置,可以使用 git config --list 命令來列出所有 Git 當時能找到的配置。

$ git config --list
user.name=mantoudev
user.email=mantoudev@163.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...

你可能會看到重復的變量名,因為 Git 會從不同的文件中讀取同一個配置(例如:/etc/gitconfig 與 ~/.gitconfig)。 這種情況下,Git 會使用它找到的每一個變量的最后一個配置。

你可以通過輸入 git config <key>: 來檢查 Git 的某一項配置

$ git config user.name
mantoudev

4. 基本常用命令

4.1 添加文件到暫存區(staged)
$ git add filename
 #或
$ git stage filename
4.2 將所有修改文件添加到暫存區(staged)
$ git add --all
#或
$ git add -A
4.3 提交修改到暫存區(staged)
$ git commit -m 'commit message'
$ git commit -a -m 'commit message'

注意理解 -a 參數的意義

4.4 從Git倉庫中刪除文件:
$ git rm filename
4.5 從Git倉庫中刪除文件,但本地文件保留:
$ git rm --cached filename
4.6 重命名某個文件:
$ git mv filename newfilename
#或者直接修改完畢文件名 ,進行
$ git add -A && git commit -m 'commit message'

Git會自動識別是重命名了文件

4.7 獲取遠程最新代碼到本地:
$ git pull (origin branchname)

可以指定分支名,也可以忽略。pull 命令自動 fetch 遠程代碼并且 merge,如果有沖突,會顯示在狀態欄,需要手動處理。更推薦使用:git fetch 之后 git merge --no-ff origin branchname 拉取最新的代碼到本地倉庫,并手動 merge 。

5. Git commit messge規范

查看Commit message

$ git log <last tag> HEAD --pretty=format:%s

5.0 Commit Message格式

每次提交,Commit message 都包括三個部分:Header,Body 和 Footer。

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

其中,Header 是必需的,Body 和 Footer 可以省略。
不管是哪一個部分,任何一行都不得超過72個字符(或100個字符)。

5.1 Header

Header部分只有一行,包括三個字段:type(必需)、scope(可選)和subject(必需)。

(1)type

type用于說明 commit 的類別,只允許使用下面7個標識。

  • feat:新功能(feature)
  • fix:修補bug
  • docs:文檔(documentation)
  • style: 格式(不影響代碼運行的變動)
  • refactor:重構(即不是新增功能,也不是修改bug的代碼變動)
  • test:增加測試
  • chore:構建過程或輔助工具的變動
  • revert: 撤銷以前的 commit,后面跟著被撤銷 Commit 的 Header。
(2)scope

scope用于說明 commit 影響的范圍,比如數據層、控制層、視圖層等等,視項目不同而不同。

(3)subject

subject是 commit 目的的簡短描述,不超過50個字符。

  • 以動詞開頭,使用第一人稱現在時,比如change,而不是changed或changes
  • 第一個字母小寫
  • 結尾不加句號(.)

5.2 Body

Body 部分是對本次 commit 的詳細描述,可以分成多行。下面是一個范例。

此次修改主要對****功能模塊進行重構,包含以下部分: 

1. AAAAAAA....
2. BBBBBBB....
3. CCCCCCC....

body中還可以與一些Bug管理工具進行關聯,在Header之后換行添加

Bug: <Bug編號>

5.4 Footer

(1)不兼容變動

如果當前代碼與上一個版本不兼容,則 Footer 部分以BREAKING CHANGE開頭,后面是對變動的描述、以及變動理由和遷移方法。

BREAKING CHANGE: isolate scope bindings definition has changed.

    To migrate the code follow the example below:

    Before:

    scope: {
      myAttr: 'attribute',
    }

    After:

    scope: {
      myAttr: '@',
    }

    The removed `inject` wasn't generaly useful for directives
(2) 關閉 Issue

如果當前 commit 針對某個issue,那么可以在 Footer 部分關閉這個 issue 。

Closes #234

(3) 簽名

如果commit使用簽名的話,footer中會包含簽名信息

Signed-off-by: mantoudev <mantoudev@163.com>

(4) 其他

使用gerrit(代碼審查工具,gerrit維基百科),在footer中會生成一個ChanggeId,一個ChangeId標識一次內容變化,可以包含多個commit,即多個commit如果changeid一致的話,可以認為是一個change。

6. 參考資料

  1. Git-scm官方文檔
  2. 猴子都能懂的Git系列
  3. Git學習資料匯總
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • 簡介 Git是目前世界上最先進的分布式版本控制系統(沒有之一)(用C寫的)。 Git和其他版本控制系統如SVN的一...
    w_tiger閱讀 626評論 0 1
  • 大綱: 一、前言 二、概述 三、在Windows上安裝Git 四、創建本地倉庫 五、本地倉庫管理詳解 六、總結 注...
    首席架構師閱讀 370評論 1 3
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,785評論 18 139
  • [TOC] Git 快速入手 配置初始化 初次運行 Git 前的配置 一般在新的系統上,我們都需要先配置下自己的 ...
    星海2017閱讀 1,528評論 0 2
  • Git 使用教程 一、Git 的安裝 Windows版本 : 直接前往git官網下載msysgit安裝包進行安裝即...
    CeeYang閱讀 601評論 0 2