溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Git工程開發(fā)實踐(一)——Git基礎(chǔ)

發(fā)布時間:2020-06-15 15:44:32 來源:網(wǎng)絡(luò) 閱讀:2924 作者:天山老妖S 欄目:軟件技術(shù)

Git工程開發(fā)實踐(一)——Git基礎(chǔ)

一、版本控制系統(tǒng)

1、版本控制系統(tǒng)簡介

版本控制系統(tǒng)(VCS,Version Control Systems)是一種記錄一個或若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。
版本控制系統(tǒng)分為:
A、本地版本控制系統(tǒng)(LVCS,Local Version Control Systems)
B、集中式版本控制系統(tǒng)(CVCS,Centralized Version Control Systems)
C、分布式版本控制系統(tǒng)(DVCS,Distributed Version Control System)

2、本地版本控制系統(tǒng)

本地版本控制系統(tǒng)大多都是采用某種簡單的數(shù)據(jù)庫來記錄文件的歷次更新差異。最流行的本地版本控制系統(tǒng)為RCS,其工作原理是在硬盤上保存補丁集(補丁是指文件修訂前后的變化),通過應(yīng)用所有的補丁,可以重新計算出各個版本的文件內(nèi)容。
Git工程開發(fā)實踐(一)——Git基礎(chǔ)

3、集中式版本控制系統(tǒng)

集中式版本控制系統(tǒng)(CVCS,Centralized Version Control Systems )都有一個單一的集中管理的服務(wù)器,保存所有文件的修訂版本,而協(xié)同工作的開發(fā)人員都通過客戶端連到服務(wù)器,取出最新的文件或者提交更新。集中式版本控制系統(tǒng)有CVS、Subversion、Perforce 等。
Git工程開發(fā)實踐(一)——Git基礎(chǔ)
集中式版本控制系統(tǒng)的優(yōu)點:相比本地版本控制系統(tǒng),每個人都可以在一定程度上看到項目中的其他人正在做些什么。管理員可以輕松掌控每個開發(fā)者的權(quán)限,并且管理一個CVCS遠比在各個客戶端上維護本地數(shù)據(jù)庫簡單。
集中式版本控制系統(tǒng)的缺點:中央服務(wù)器的單點故障。如果中央服務(wù)器宕機,開發(fā)人員無法提交更新,無法協(xié)同工作。如果中央服務(wù)器的數(shù)據(jù)庫所在磁盤發(fā)生損壞并且沒有備份,將導(dǎo)致數(shù)據(jù)丟失。

4、分布式版本控制系統(tǒng)

分布式版本控制系統(tǒng)(DVCS,Distributed Version Control System )中,客戶端并不只提取最新版本的文件快照,而是把代碼倉庫完整地鏡像下來,因此,任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,都可以用任何一個鏡像出來的本地倉庫恢復(fù)。分布式版本控制系統(tǒng)的每一次的克隆操作都是一次對代碼倉庫的完整備份。
常見的分布式版本控制系統(tǒng)有Git、Mercurial、Darcs、Bazaar等。
Git工程開發(fā)實踐(一)——Git基礎(chǔ)
分布式版本控制系統(tǒng)的特點是分布式,每一個節(jié)點都擁有倉庫的完整鏡像,每個節(jié)點都可以作為服務(wù)器,也可以作為客戶端。為了團隊協(xié)同開發(fā)進行分支合并,通常會將一個節(jié)點設(shè)置成偽中央服務(wù)器
分布式版本控制系統(tǒng)的優(yōu)點:
A、提交分支不需要聯(lián)網(wǎng),客戶端本地保存著所有歷史記錄。
B、不依賴服務(wù)器的穩(wěn)定性,風險分散。
分布式版本控制系統(tǒng)的缺點:
A、同步多人的修改稍繁。
B、缺少權(quán)限管理系統(tǒng)。
分布式版本控制系統(tǒng)的適用場景:
A、開源軟件的開發(fā)
B、同步需求不頻繁或者異地的多人協(xié)作

二、Git基礎(chǔ)

1、Git簡史

Linux內(nèi)核開源項目有廣泛的參與者,但在1991-2002年間,世界各地的Linux內(nèi)核開發(fā)者把源代碼文件通過diff的方式發(fā)給Linus,然后由Linus本人通過手工方式合并代碼,因此絕大多數(shù)的 Linux 內(nèi)核維護工作都花在了提交補丁和保存歸檔的繁瑣事務(wù)上。雖然Linux內(nèi)核社區(qū)有很多人提議使用集中式版本控制系統(tǒng)對Linux內(nèi)核項目進行管理,但Linus堅持拒絕使用必須聯(lián)網(wǎng)(龜速)才能使用的集中式版本控制系統(tǒng)以及付費的商業(yè)版本控制系統(tǒng)。到2002年,BitMover授權(quán)Linux內(nèi)核社區(qū)免費使用商業(yè)分布式版本控制系統(tǒng)BitKeeper來管理和維護代碼。
2005年,BitMover公司發(fā)現(xiàn)活躍于Linux內(nèi)核社區(qū)的Andrew(Samba開發(fā)者)試圖破解BitKeeper的協(xié)議,于是收回了Linux內(nèi)核社區(qū)使用BitKeeper的免費授權(quán)。 但Linux項目千萬行級別的代碼管理不可能再回到石器時代的手動合并,于是Linus基于使用BitKeeper的經(jīng)驗教訓(xùn)與Linux項目團隊的需求,使用了兩周時間開發(fā)出了Git初始版本,一個月后Git已經(jīng)用于Linux內(nèi)核項目源碼的管理。 目前Git由Linux社區(qū)的其它開發(fā)人員在持續(xù)開發(fā)。
大部分版本控制系統(tǒng),如CVS、Subversion、Perforce、Bazaar等以文件變更列表的方式存儲信息。通常保存的信息是一組基本文件和每個文件隨時間逐步累積的差異。
Git工程開發(fā)實踐(一)——Git基礎(chǔ)
Git把數(shù)據(jù)看作是對小型文件系統(tǒng)的一組快照。每次提交更新或在Git中保存項目狀態(tài)時,主要對當時的全部文件制作一個快照并保存快照的索引。如果文件沒有修改,Git不再重新存儲該文件,而是只保留一個鏈接指向原來存儲的文件。
Git工程開發(fā)實踐(一)——Git基礎(chǔ)

2、Git安裝

Linux發(fā)行版:
Fedora:sudo yum install git
Debian:sudo apt-get install git
Windows:
https://git-scm.com/download/win
Git for Windows(msysGit)
GitHub for Windows
Mac OS:
OSX Git:http://git-scm.com/download/mac

3、Git配置

Git使用git config工具來設(shè)置控制Git外觀和行為的配置變量。
git config --system
在/etc/gitconfig文件讀寫配置變量,包含系統(tǒng)上每一個用戶及倉庫的通用配置,對當前操作系統(tǒng)所有用戶、倉庫有效
git config --global
在~/.gitconfig 或 ~/.config/git/config文件讀寫配置變量,對當前用戶有效
git config --local
在倉庫的.git/config文件讀寫配置變量,針對當前倉庫有效。
低級別的Git配置信息會覆蓋上一級別的配置信息,所以當前倉庫的配置信息(.git/config) 會覆蓋 /etc/gitconfig 中的配置信息。
通常,安裝完Git后需要設(shè)置用戶信息,如用戶名稱與郵件地址。因為每一個Git提交操作都會使用Git用戶信息,并且寫入到每一次提交中,不可更改。

git config --global user.name "username"
git config --global user.email "username@example.com"
Git配置信息查看:git config --list
Git某項配置信息查看:git config <key>
刪除某項配置信息:git config --global unset <key>

4、Git常用術(shù)語

分支(branch):在一個時間點,復(fù)制一份處于版本控制之下的文件,可以獨立的互不干擾的對拷貝進行各自開發(fā)。
檢出(checkout):在本地創(chuàng)建一份倉庫的工作拷貝。
提交(commit):將本地的修改寫回到倉庫或合并到倉庫。
沖突(conflict):當多個開發(fā)者同時提交對同一個文件的修改,而且版本控制系統(tǒng)不能對其進行合并,就會引發(fā)沖突,需要手動處理。
合并(merge):把所有對文件的修改統(tǒng)一到文件里。
倉庫(repository):當前的和歷史的處于版本控制下的文件所在的地方。

5、Git工作區(qū)

Git本地有三個工作區(qū)域:工作目錄(Work Directory)、暫存區(qū)(Stage/Index)、本地倉庫(Repository)。
工作目錄:工作目錄/工作空間,存放項目代碼的目錄
暫存區(qū):暫存區(qū),用于臨時存放改動,本質(zhì)是一個文件,保存即將提交到文件列表信息
本地倉庫:安全存放提交的所有版本的數(shù)據(jù),其中HEAD指向最新放入倉庫的版本
遠程倉庫(Remote Repository):托管代碼的服務(wù)器
Git工程開發(fā)實踐(一)——Git基礎(chǔ)
Directory:Git管理的工程目錄,包含工作目錄和Git管理空間。
Work Directory:工作目錄,存放通過Git進行版本控制的目錄和文件,是開發(fā)者工作的目錄。
.git:存放Git管理信息的目錄,初始化倉庫時自動創(chuàng)建。
Index/Stage:暫存區(qū),即待提交更新區(qū),本質(zhì)是一個文件(.git/index),保存有下次將提交的文件列表信息。
Repository:本地倉庫,存放在本地的版本倉庫。
HEAD:HEAD指針,用于指向當前分支的一個提交。
Stash:儲藏,是一個工作狀態(tài)保存棧,用于保存/恢復(fù)工作目錄的臨時狀態(tài)。

6、Git工作流程

Git提交的基本工作流程如下:
A、在工作目錄中添加、修改、刪除文件。
B、將工作目錄中需要進行版本管理的文件添加到暫存區(qū)。
C、將暫存區(qū)的文件提交到本地倉庫。
Git工程開發(fā)實踐(一)——Git基礎(chǔ)

7、.gitignore文件過濾

工程開發(fā)中,在進行Git提交時,并不是所有的文件都需要提交,比如一些自動生成的文件,可以配置.gitignore來忽略一些不需要提交的文件。
Git對于.gitignore 配置文件是按行從上到下進行規(guī)則匹配的,如果前面的規(guī)則匹配的范圍更大,則后面的規(guī)則將不會生效。
不同工程應(yīng)用開發(fā)的.gitignore模板集合如下:
https://github.com/github/gitignore
.gitignore文件語法規(guī)范如下:

    A、空行或是以#開頭的行即注釋行將被忽略;
    B、可以在前面添加正斜杠/來避免遞歸;可以在后面添加正斜杠/來忽略文件夾,例如build/即忽略    build文件夾
    C、可以使用!來否定忽略;
    D、*用來匹配零個或多個字符;
    E、[]用來匹配括號內(nèi)的任一字符,如[abc],也可以在括號內(nèi)加連接符,如[0-9]匹配0至9的數(shù);
    F、?用來匹配單個字符;

.gitignore示例如下:

# 忽略 .a 文件
*.a
# 但否定忽略 lib.a, 盡管已經(jīng)在前面忽略了 .a 文件
!lib.a
# 僅在當前目錄下忽略 TODO 文件, 但不包括子目錄下的 subdir/TODO
/TODO
# 忽略 build/ 文件夾下的所有文件
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI