Git分布式版本控制工具

1. Git概述

1.1 Git歷史

Git 誕生于一個(gè)極富紛爭(zhēng)大舉創(chuàng)新的年代。Linux 內(nèi)核開源項(xiàng)目有著為數(shù)眾多的參與者。 絕大多數(shù)的 Linux 內(nèi)核維護(hù)工作都花在了提交補(bǔ)丁和保存歸檔的繁瑣事務(wù)上(1991-2002年間)个绍。 到 2002 年勒葱,整個(gè)項(xiàng)目組開始啟用一個(gè)專有的分布式版本控制系統(tǒng) BitKeeper 來管理和維護(hù)代碼。

到了 2005 年巴柿,開發(fā) BitKeeper 的商業(yè)公司同 Linux 內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束凛虽,他們收回了 Linux 內(nèi)核社區(qū)免費(fèi)使用 BitKeeper 的權(quán)力。 這就迫使 Linux 開源社區(qū)(特別是 Linux 的締造者 Linus Torvalds)基于使用 BitKeeper 時(shí)的經(jīng)驗(yàn)教訓(xùn)广恢,開發(fā)出自己的版本系統(tǒng)凯旋。

他們對(duì)新的系統(tǒng)制訂了若干目標(biāo):

速度

簡(jiǎn)單的設(shè)計(jì)

對(duì)非線性開發(fā)模式的強(qiáng)力支持(允許成千上萬個(gè)并行開發(fā)的分支)

完全分布式

有能力高效管理類似 Linux 內(nèi)核一樣的超大規(guī)模項(xiàng)目(速度和數(shù)據(jù)量)

1.2 Git與SVN對(duì)比

SVN是集中式版本控制系統(tǒng),版本庫是集中放在中央服務(wù)器的钉迷,而開發(fā)人員工作的時(shí)候至非,用的都是自己的電腦,所以首先要從中央服務(wù)器下載最新的版本糠聪,然后開發(fā)荒椭,開發(fā)完后,需要把自己開發(fā)的代碼提交到中央服務(wù)器舰蟆。

集中式版本控制工具缺點(diǎn):

服務(wù)器單點(diǎn)故障

容錯(cuò)性差

Git是分布式版本控制系統(tǒng)(Distributed Version Control System趣惠,簡(jiǎn)稱 DVCS) ,分為兩種類型的倉庫:

本地倉庫和遠(yuǎn)程倉庫

本地倉庫:是在開發(fā)人員自己電腦上的Git倉庫

遠(yuǎn)程倉庫:是在遠(yuǎn)程服務(wù)器上的Git倉庫

Clone:克隆身害,就是將遠(yuǎn)程倉庫復(fù)制到本地

Push:推送味悄,就是將本地倉庫代碼上傳到遠(yuǎn)程倉庫

Pull:拉取,就是將遠(yuǎn)程倉庫代碼下載到本地倉庫

1.3 Git工作流程

工作流程如下:

1.從遠(yuǎn)程倉庫中克隆代碼到本地倉庫

2.從本地倉庫中checkout代碼然后進(jìn)行代碼修改

3.在提交前先將代碼提交到暫存區(qū)

4.提交到本地倉庫塌鸯。本地倉庫中保存修改的各個(gè)歷史版本

5.修改完成后侍瑟,需要和團(tuán)隊(duì)成員共享代碼時(shí),將代碼push到遠(yuǎn)程倉庫

1.4 Git下載與安裝

下載地址: https://git-scm.com/download

下載完成后可以得到如下安裝文件:

2. Git代碼托管服務(wù)

2.1 常用的Git代碼托管服務(wù)

前面我們已經(jīng)知道了Git中存在兩種類型的倉庫丙猬,即本地倉庫和遠(yuǎn)程倉庫丢习。那么我們?nèi)绾未罱℅it遠(yuǎn)程倉庫呢?我們可以借助互聯(lián)網(wǎng)上提供的一些代碼托管服務(wù)來實(shí)現(xiàn)淮悼,其中比較常用的有GitHub咐低、碼云、GitLab等袜腥。

gitHub( 地址:https://github.com/ )是一個(gè)面向開源及私有軟件項(xiàng)目的托管平臺(tái)见擦,因?yàn)橹恢С諫it 作為唯一的版本庫格式進(jìn)行托管,故名gitHub

碼云(地址: https://gitee.com/ )是國(guó)內(nèi)的一個(gè)代碼托管平臺(tái)羹令,由于服務(wù)器在國(guó)內(nèi)鲤屡,所以相比于GitHub,碼云速度會(huì)更快

GitLab (地址: https://about.gitlab.com/ )是一個(gè)用于倉庫管理系統(tǒng)的開源項(xiàng)目福侈,使用Git作為代碼管理工具酒来,并在此基礎(chǔ)上搭建起來的web服務(wù)

3. Git常用命令

3.1 本地環(huán)境配置

當(dāng)安裝Git后首先要做的事情是設(shè)置用戶名稱和email地址。這是非常重要的肪凛,因?yàn)槊看蜧it提交都會(huì)使用該用戶信息

設(shè)置用戶信息

git config --global user.name “haha”

git config --global user.emailhello@qq.com

查看配置信息

git config --list

git config user.name

通過上面的命令設(shè)置的信息會(huì)保存在~/.gitconfig文件中

3.2 獲取Git倉庫

要使用Git對(duì)我們的代碼進(jìn)行版本控制堰汉,首先需要獲得Git倉庫

獲取Git倉庫通常有兩種方式:

在本地初始化一個(gè)Git倉庫

從遠(yuǎn)程倉庫克隆

3.2.1在本地初始化一個(gè)Git倉庫

執(zhí)行步驟如下:

  1. 在電腦的任意位置創(chuàng)建一個(gè)空目錄(例如repo1)作為我們的本地Git倉庫

  2. 進(jìn)入這個(gè)目錄中辽社,點(diǎn)擊右鍵打開Git bash窗口

  3. 執(zhí)行命令git init

如果在當(dāng)前目錄中看到.git文件夾(此文件夾為隱藏文件夾)則說明Git倉庫創(chuàng)建成功

3.2.2從遠(yuǎn)程倉庫克隆

可以通過Git提供的命令從遠(yuǎn)程倉庫進(jìn)行克隆,將遠(yuǎn)程倉庫克隆到本地

命令形式為:git clone 遠(yuǎn)程Git倉庫地址

3.3工作目錄翘鸭、暫存區(qū)以及版本庫概念

為了更好的學(xué)習(xí)Git滴铅,我們需要了解Git相關(guān)的一些概念,這些概念在后面的學(xué)習(xí)中會(huì)經(jīng)常提到

版本庫:前面看到的.git隱藏文件夾就是版本庫就乓,版本庫中存儲(chǔ)了很多配置信息汉匙、日志信息和文件版本信息等

工作目錄(工作區(qū)):包含.git文件夾的目錄就是工作目錄,主要用于存放開發(fā)的代碼

暫存區(qū):.git文件夾中有很多文件生蚁,其中有一個(gè)index文件就是暫存區(qū)噩翠,也可以叫做stage。暫存區(qū)是一個(gè)臨時(shí)保存修改文件的地方

3.4 Git工作目錄下文件的兩種狀態(tài)

Git工作目錄下的文件存在兩種狀態(tài):

  • untracked 未跟蹤(未被納入版本控制)

  • tracked 已跟蹤(被納入版本控制)

  • Unmodified 未修改狀態(tài)

  • Modified 已修改狀態(tài)

  • Staged 已暫存狀態(tài)

這些文件的狀態(tài)會(huì)隨著我們執(zhí)行Git的命令發(fā)生變化

3.5 本地倉庫

git status 查看文件狀態(tài)

也可以使用git status –s 使輸出信息更加簡(jiǎn)潔

git add 將未跟蹤的文件加入暫存區(qū)

將新創(chuàng)建的文件加入暫存區(qū)后查看文件狀態(tài)

git reset 將暫存區(qū)的文件取消暫存

將文件取消暫存后查看文件狀態(tài)

git commit 將暫存區(qū)的文件修改提交到本地倉庫

git rm 刪除文件

刪除文件后查看文件狀態(tài)

上面刪除的只是工作區(qū)的文件邦投,需要提交到本地倉庫

將文件添加至忽略列表

一般我們總會(huì)有些文件無需納入Git 的管理绎秒,也不希望它們總出現(xiàn)在未跟蹤文件列表。 通常都是些自動(dòng)生成的文件尼摹,比如日志文件见芹,或者編譯過程中創(chuàng)建的臨時(shí)文件等。 在這種情況下蠢涝,我們可以在工作目錄中創(chuàng)建一個(gè)名為 .gitignore 的文件(文件名稱固定)玄呛,列出要忽略的文件模式。下面是一個(gè)示例:

# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

git log 查看日志記錄

3.6 遠(yuǎn)程倉庫配置

在了解之前和二,先注冊(cè)github賬號(hào)徘铝,由于你的本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的,所以需要一點(diǎn)設(shè)置:
第一步:創(chuàng)建SSH Key惯吕。在用戶主目錄下惕它,看看有沒有.ssh目錄,如果有废登,再看看這個(gè)目錄下有沒有id_rsa和id_rsa.pub這兩個(gè)文件淹魄,如果有的話,直接跳過此如下命令堡距,如果沒有的話甲锡,打開命令行,輸入如下命令:

ssh-keygen -t rsa –C “youremail@example.com”

由于我本地此前運(yùn)行過一次羽戒,所以本地有缤沦,如下所示:


id_rsa是私鑰,不能泄露出去易稠,id_rsa.pub是公鑰缸废,可以放心地告訴任何人。

第二步:登錄github,打開” settings”中的SSH Keys頁面,然后點(diǎn)擊“Add SSH Key”,填上任意title企量,在Key文本框里黏貼id_rsa.pub文件的內(nèi)容测萎。

點(diǎn)擊 Add Key,你就應(yīng)該可以看到已經(jīng)添加的key梁钾。

3.6.1查看遠(yuǎn)程倉庫

如果想查看已經(jīng)配置的遠(yuǎn)程倉庫服務(wù)器绳泉,可以運(yùn)行 git remote 命令逊抡。 它會(huì)列出指定的每一個(gè)遠(yuǎn)程服務(wù)器的簡(jiǎn)寫姆泻。 如果已經(jīng)克隆了遠(yuǎn)程倉庫,那么至少應(yīng)該能看到 origin 冒嫡,這是 Git 克隆的倉庫服務(wù)器的默認(rèn)名字

3.6.2 添加遠(yuǎn)程倉庫

運(yùn)行 git remote add <shortname> <url> 添加一個(gè)新的遠(yuǎn)程 Git 倉庫拇勃,同時(shí)指定一個(gè)可以引用的簡(jiǎn)寫

3.6.3 從遠(yuǎn)程倉庫克隆

如果你想獲得一份已經(jīng)存在了的 Git 倉庫的拷貝,這時(shí)就要用到 git clone 命令孝凌。 Git 克隆的是該 Git 倉庫服務(wù)器上的幾乎所有數(shù)據(jù)(包括日志信息方咆、歷史記錄等),而不僅僅是復(fù)制工作所需要的文件蟀架。 當(dāng)你執(zhí)行 git clone 命令的時(shí)候瓣赂,默認(rèn)配置下遠(yuǎn)程 Git 倉庫中的每一個(gè)文件的每一個(gè)版本都將被拉取下來。

克隆倉庫的命令格式是 git clone [url]

3.6.4 移除無效的遠(yuǎn)程倉庫

如果因?yàn)橐恍┰蛳胍瞥粋€(gè)遠(yuǎn)程倉庫 片拍,可以使用 git remote rm

注意:此命令只是從本地移除遠(yuǎn)程倉庫的記錄煌集,并不會(huì)真正影響到遠(yuǎn)程倉庫

3.6.5 從遠(yuǎn)程倉庫中抓取與拉取

git fetch 是從遠(yuǎn)程倉庫獲取最新版本到本地倉庫,不會(huì)自動(dòng)merge

git pull 是從遠(yuǎn)程倉庫獲取最新版本并merge到本地倉庫

注意:如果當(dāng)前本地倉庫不是從遠(yuǎn)程倉庫克隆捌省,而是本地創(chuàng)建的倉庫苫纤,并且倉庫中存在文件,此時(shí)再從遠(yuǎn)程倉庫拉取文件的時(shí)候會(huì)報(bào)錯(cuò)(fatal: refusing to merge unrelated histories )纲缓,解決此問題可以在git pull命令后加入?yún)?shù)--allow-unrelated-histories

3.6.6 推送到遠(yuǎn)程倉庫

當(dāng)你想分享你的代碼時(shí)卷拘,可以將其推送到遠(yuǎn)程倉庫。 命令形式:git push [remote-name][branch-name]

3.7 Git分支

幾乎所有的版本控制系統(tǒng)都以某種形式支持分支祝高。 使用分支意味著你可以把你的工作從開發(fā)主線上分離開來栗弟,以免影響開發(fā)主線。Git 的master分支并不是一個(gè)特殊分支工闺。 它跟其它分支沒有區(qū)別横腿。 之所以幾乎每一個(gè)倉庫都有 master 分支,是因?yàn)間it init 命令默認(rèn)創(chuàng)建它斤寂,并且大多數(shù)人都懶得去改動(dòng)它耿焊。

在本章節(jié)我們會(huì)學(xué)習(xí)到關(guān)于分支的相關(guān)命令,具體如下:

3.7.1 查看分支

# 列出所有本地分支

$ git branch

# 列出所有遠(yuǎn)程分支

$ git branch -r

# 列出所有本地分支和遠(yuǎn)程分支

$ git branch -a

3.7.2 創(chuàng)建分支

3.7.3 切換分支

3.7.4 推送至遠(yuǎn)程倉庫分支

3.7.5 合并分支

有時(shí)候合并操作不會(huì)如此順利遍搞。 如果你在兩個(gè)不同的分支中罗侯,對(duì)同一個(gè)文件的同一個(gè)部分進(jìn)行了不同的修改,Git 就沒辦法合并它們溪猿,同時(shí)會(huì)提示文件沖突钩杰。此時(shí)需要我們打開沖突的文件并修復(fù)沖突內(nèi)容纫塌,最后執(zhí)行g(shù)it add命令來標(biāo)識(shí)沖突已解決

3.7.5 刪除分支

如果要?jiǎng)h除的分支中進(jìn)行了一些開發(fā)動(dòng)作,此時(shí)執(zhí)行上面的刪除命令并不會(huì)刪除分支讲弄,如果堅(jiān)持要?jiǎng)h除此分支措左,可以將命令中的-d參數(shù)改為-D

注:如果要?jiǎng)h除遠(yuǎn)程倉庫中的分支,可以使用命令git push origin –d branchName

4. 在IDEA中使用Git

4.1 在IDEA中配置Git

安裝好IntelliJ IDEA后避除,如果Git安裝在默認(rèn)路徑下怎披,那么idea會(huì)自動(dòng)找到git的位置,如果更改了Git的安裝位置則需要手動(dòng)配置下Git的路徑瓶摆。

選擇File→Settings打開設(shè)置窗口凉逛,找到Version Control下的git選項(xiàng):

選擇git的安裝目錄后可以點(diǎn)擊“Test”按鈕測(cè)試是否正確配置

4.2 在IDEA中使用Git

4.2.1在IDEA中創(chuàng)建工程并將工程添加至Git

將項(xiàng)目添加至Git管理后,可以從IDEA的工具欄上看到Git操作的按鈕

4.2.2 將文件添加到暫存區(qū)

4.2.3 提交文件

4.2.4 將代碼推送到遠(yuǎn)程倉庫

4.2.5 從遠(yuǎn)程倉庫克隆工程到本地

4.2.6 從遠(yuǎn)程拉取代碼

4.2.7 版本對(duì)比

4.2.8 創(chuàng)建分支

4.2.9 切換分支

4.2.10 分支合并

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末群井,一起剝皮案震驚了整個(gè)濱河市状飞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌书斜,老刑警劉巖诬辈,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異荐吉,居然都是意外死亡焙糟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門稍坯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酬荞,“玉大人,你說我怎么就攤上這事瞧哟』烨桑” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵勤揩,是天一觀的道長(zhǎng)咧党。 經(jīng)常有香客問我,道長(zhǎng)陨亡,這世上最難降的妖魔是什么傍衡? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮负蠕,結(jié)果婚禮上蛙埂,老公的妹妹穿的比我還像新娘。我一直安慰自己遮糖,他們只是感情好绣的,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般屡江。 火紅的嫁衣襯著肌膚如雪芭概。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天惩嘉,我揣著相機(jī)與錄音罢洲,去河邊找鬼。 笑死文黎,一個(gè)胖子當(dāng)著我的面吹牛惹苗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臊诊,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸽粉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼斜脂!你這毒婦竟也來了抓艳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤帚戳,失蹤者是張志新(化名)和其女友劉穎玷或,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體片任,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偏友,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了对供。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片位他。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖产场,靈堂內(nèi)的尸體忽然破棺而出鹅髓,到底是詐尸還是另有隱情,我是刑警寧澤京景,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布窿冯,位于F島的核電站,受9級(jí)特大地震影響确徙,放射性物質(zhì)發(fā)生泄漏醒串。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一鄙皇、第九天 我趴在偏房一處隱蔽的房頂上張望芜赌。 院中可真熱鬧,春花似錦伴逸、人聲如沸缠沈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽博烂。三九已至香椎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間禽篱,已是汗流浹背畜伐。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躺率,地道東北人玛界。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像悼吱,于是被迫代替她去往敵國(guó)和親慎框。 傳聞我的和親對(duì)象是個(gè)殘疾皇子后添,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容