git是什么?
git是一個(gè)開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理,也是Linus Torvalds為了幫助管理Linux內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件。git與常用的版本控制工具SVN等不同,它采用了分布式版本庫的方。
簡而言之,git就是一個(gè)版本管理庫,也是一個(gè)版本管理工具,它的作用就是幫助我們記錄版本信息,以及修改內(nèi)容。git的結(jié)構(gòu)是分布式的資源庫,特點(diǎn)是沒有嚴(yán)格的服務(wù)器概念,每個(gè)單體都可作為資源庫。這個(gè)特點(diǎn)就讓我們?nèi)巳擞凶约旱膅it倉庫這件事變得容易實(shí)現(xiàn)。
為什么要用git?
提到版本控制,總會想起大學(xué)畢業(yè)時(shí)寫論文的場景,你電腦上的畢業(yè)論文一定出現(xiàn)過這番景象!
課設(shè)_初稿.doc 課設(shè)_修改1.doc 課設(shè)_修改2.doc 課設(shè)_修改3.doc 課設(shè)_完整版1.doc 課設(shè)_完整版2.doc 課設(shè)_完整版3.doc 課設(shè)_最終版1.doc 課設(shè)_最終版2.doc 課設(shè)_死也不改版.doc ... |
這就是最原始的版本控制方法,這種方式的缺點(diǎn)也是顯著的。
多個(gè)文件,保留所有版本時(shí),需要為每個(gè)版本保存一個(gè)文件;
協(xié)同操作,多人協(xié)同操作時(shí),需要將文件打包發(fā)來發(fā)去;
容易丟失,被刪除意味著永遠(yuǎn)失去;
為了解決這個(gè)痛點(diǎn),應(yīng)運(yùn)而生了一批版本管理工具,如:git、svn等。其中l(wèi)inux當(dāng)中最常用的當(dāng)屬git,因此學(xué)會使用git是十分必要的。
git安裝和初次使用
git倉庫的構(gòu)建分兩種方式,一種是管理當(dāng)前的代碼,給當(dāng)前代碼創(chuàng)建一個(gè)git倉庫,這種需要初始化新倉庫;還有一種是用clone克隆一個(gè)遠(yuǎn)程倉庫到自己當(dāng)前目錄下,這種適合一群人維護(hù)一個(gè)倉庫,也是常見的方式。
本文只介紹第一種當(dāng)前代碼的管理。
Ubuntu上安裝git
執(zhí)行sudo apt-get install git 進(jìn)行g(shù)it安裝
elf@ubuntu:~/work/example/hello$?sudo apt-get install git |
創(chuàng)建版本庫
以下以用git管理/home/elf/work/example/hello/hello.c文件為示例,展示git的安裝和最簡單的流程
(1)git初始化
git初始化新倉庫,執(zhí)行g(shù)it init后會在當(dāng)前目錄生成一個(gè).git目錄
elf@ubuntu:~/work/example/hello$?git init |
(2)設(shè)置用戶名和郵箱
每當(dāng)我們在一個(gè)新的git上,首先執(zhí)行g(shù)it config --global user.name "Your Name"創(chuàng)建個(gè)人git賬戶,執(zhí)行g(shù)it config --global user.email 創(chuàng)建賬戶郵箱。
以賬戶名為elf_li,郵箱elf_li@exmple.com為例操作
elf@ubuntu:~/work/example/hello$ git config --global user.name "elf_li" elf@ubuntu:~/work/example/hello$ git config --global user.email "elf_li@exmple.com" |
(3)將當(dāng)前需要跟蹤的文件加到git倉庫(將文件添加到暫存區(qū)域),執(zhí)行g(shù)it add [filename];以添加hello.c到倉庫暫存區(qū)為例
elf@ubuntu:~/work/example/hello$ git add hello.c |
(4)提交版本
提交暫存區(qū)域的所有修改到本地倉庫(如果修改文件后未添加到暫存區(qū),將不會被提交),用git status指令(在分支內(nèi)操作時(shí)會做具體的講解)可以看到相關(guān)信息,提示需要提交。
執(zhí)行g(shù)it commit -m “xxx” 進(jìn)行提交
elf@ubuntu:~/work/example/hello$ git commit -m "instial program" |
此時(shí)用git status查看,已經(jīng)沒有hello.c的提示了。
(5)查看當(dāng)前提交信息
有過提交操作后,可以使用git log查看提交記錄信息
elf@ubuntu:~/work/example/hello$ git log |
完成以上操作,已經(jīng)構(gòu)建了一個(gè)本地資源庫,主要包括以下部分:
內(nèi)容 |
說明 |
Directory |
使用git管理的目錄,包含工作空間和git管理空間。 即:/home/elf//work/example/hello目錄 |
workspace |
工作區(qū),平時(shí)存放項(xiàng)目代碼的地方 |
.git |
存放git管理信息的目錄,git初始化時(shí)創(chuàng)建 |
staging |
暫存區(qū),用于存放臨時(shí)改動,事實(shí)上它只是一個(gè)文件,保存即將提交到文件列表信息 |
local repo |
本地版本庫,是安全存放數(shù)據(jù)的位置,含有提交的所有版本的數(shù)據(jù)。其中HEAD指向最新放入倉庫的版本。 |
Stash |
隱藏,是一個(gè)工作狀態(tài)保存棧,用于保存/恢復(fù)WorkSpace中的臨時(shí)狀態(tài) |