1. 為何選用git
?? git是分布式代碼版本管理工具。相比svn和其他版本控制系統(tǒng)來說,git功能更加強(qiáng)大放案。
* svn與git的比較
(1) git是分布式代碼版本管理工具双藕,而svn是集中式
??所謂分布式集中式止状,指的是代碼倉(cāng)庫(kù)與各個(gè)用戶的代碼倉(cāng)庫(kù)關(guān)聯(lián)關(guān)系。分布式講究的是每個(gè)用戶的計(jì)算機(jī)都能作為中央倉(cāng)庫(kù)攒霹,與其他計(jì)算機(jī)分享代碼倉(cāng)庫(kù)导俘,能夠在離線狀態(tài)下使用;而集中式講究中央控制剔蹋,會(huì)有一個(gè)獨(dú)立的代碼倉(cāng)庫(kù)旅薄,每次工作前都需要從中央倉(cāng)庫(kù)中拉取最新代碼,工作結(jié)束后需要提交到中央倉(cāng)庫(kù)泣崩,所以svn每次使用時(shí)必須在聯(lián)網(wǎng)狀態(tài)下少梁。
(2) git從遠(yuǎn)程倉(cāng)庫(kù)中拉取到最新的代碼后,能獲取到所有的歷史矫付,但svn不能凯沪。
(3) git分支指向的是某一次提交,而svn保存的是文件的目錄买优,因此git切換分支的成本遠(yuǎn)遠(yuǎn)小于svn的成本妨马。
(4) svn的操作命令比較簡(jiǎn)單,容易上手杀赢,相比之下git的命令比較復(fù)雜烘跺。
??綜上所述,git命令雖然比較復(fù)雜脂崔,但是不可否認(rèn)它的功能強(qiáng)大滤淳,因此大部分公司都采用git作為代碼版本控制工具。
2. git工作狀態(tài)
狀態(tài)示意圖:
從上圖我們可以看出砌左,工作狀態(tài)主要分為工作區(qū)脖咐、暫存區(qū)和遠(yuǎn)程倉(cāng)庫(kù)三個(gè)部分:
(1) 工作區(qū):工作區(qū)中的文件可以是遠(yuǎn)程倉(cāng)庫(kù)拉取下來的文件,在這些文件中汇歹,用戶可以使用并修改屁擅。
(2) 暫存區(qū):這里的文件是用戶在工作區(qū)中增刪改之后,準(zhǔn)備提交到遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容
(3) 遠(yuǎn)程倉(cāng)庫(kù): 一旦你的commit提交到了遠(yuǎn)程倉(cāng)庫(kù)中产弹,那么你的項(xiàng)目文件快照將會(huì)永久保存在歷史派歌。
3. git文件追蹤
??在git使用過程中,如果不想某些文件被追蹤并提交到git倉(cāng)庫(kù)取视,如日志文件硝皂、編譯的二進(jìn)制文件,則可以在git倉(cāng)庫(kù)的根路徑中添加.gitignore文件作谭,文件中所匹配到的文件則不會(huì)被追蹤到稽物。
.gitignore文件示例:
# ignore all .a files *.a
* .a
?? 該文件可以使用正則表達(dá)式進(jìn)行書寫,從而能靈活的決定哪些文件需要提交到遠(yuǎn)程倉(cāng)庫(kù)并被其他人所共享折欠。
?? 注意:如果項(xiàng)目的子路徑也有.gitignore文件贝或,則子路徑將會(huì)覆蓋掉父路徑的文件吼过。
4. git的commit哈希算法
?? git 采用的是SHA-1算法,來保證commit的完整性咪奖。
?? SHA-1(英語:Secure Hash Algorithm 1盗忱,中文名:安全散列算法1)是一種密碼散列函數(shù),美國(guó)國(guó)家安全局設(shè)計(jì)羊赵,并由美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所(NIST)發(fā)布為聯(lián)邦數(shù)據(jù)處理標(biāo)準(zhǔn)(FIPS)趟佃。SHA-1可以生成一個(gè)被稱為消息摘要的160位(20字節(jié))散列值,散列值通常的呈現(xiàn)形式為40個(gè)十六進(jìn)制數(shù)昧捷。
?? 雖然使用SHA-1算法會(huì)產(chǎn)生40個(gè)十六進(jìn)制數(shù)闲昭,但是git作為人性化方便使用的工具,通常來講可以使用前8-10位來唯一標(biāo)志一個(gè)commit靡挥,最多的linux內(nèi)核多達(dá) 875,000個(gè)commit序矩,也只需要前12位十六進(jìn)制數(shù)來表示唯一commit。