centos git 安裝操作

原文鏈接:https://blog.51cto.com/13043516/2124596

Git簡介

1、VCS的歷史

VCS版本控制系統(Version Control System),是一種記錄一個或若干文件內容變化,以便將來查閱特定版本修訂情況的系統;版本控制系統不僅可以應用於軟件源代碼的文本文件,而且可以對任何類型的文件進行版本控制,用的比較多的如svn、git等
本地版本控制
Centos7 yum安裝git

通過保存並管理文件補丁的方式,來記錄對應文件修訂前後的內容變化;目前最爲流行的一種本地版本控制系統是rcs,根據每次修訂後的補丁,rcs可以通過不斷打補丁,計算出各個版本的文件內容;當然這樣做之後,對於本機被管理文件可以做到版本回滾或者回退,但是對於處在不同系統上的開發者要進行協同工作就遇到了問題,於是也就有了"集中式版本控制工具"
集中式版本控制
Centos7 yum安裝git

集中式版本控制系統(Centralized Version Control Systems,簡稱CVCS),版本庫集中存放在中央服務器,而幹活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給中央服務器。

這麼做最顯而易見的缺點是中央服務器的單點故障,如果維修一小時,那麼在這一小時內,誰都無法提交更新,也就無法協同工作;如果中心數據庫所在的磁盤發生損壞,又沒有做恰當備份,毫無疑問你將丟失所有數據,包括項目的整個變更歷史,只剩下人們在各自機器上保留的單獨快照。

相比老式的VCS,每個人能看到項目中其他人在幹嘛,管理員也可以控制每個開發者的權限,但是一個致命的缺點就是中央服務器的單點故障,如果發生,誰都無法提交更新,無法協同工作,甚至有丟失數據的風險,至此,後來產生了"分佈式版本控制工具"
分佈式版本控制
Centos7 yum安裝git

客戶端並不是提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來,分佈式,當我們連接共享版本庫時,可以先將服務器上的項目克隆到本地,相當於每一臺電腦上都有整個項目的文件備份,在沒有網時也可以開發,完成開發後可以先提交到本地倉庫,當有網的時候再提交到共享版本庫,這樣一來當服務器或者自己電腦出故障,也沒有任何擔心

2、Git的歷史

起初參與Linux開源項目的代碼是由Linus Torvalds本人通過"diff"和"patch"命令來手動爲別人整合代碼的,隨着項目越做越大,代碼庫之大讓Linus很難繼續通過手工方式管理了,社區的弟兄們也對這種方式表達了強烈不滿

diff簡介

比較文件中的不同點:
格式:diff 文件A 文件B >文件C
diff命令用於比較文本文件,能比較單個文件或者目錄內容,但只有當輸入爲文本文件時纔有效
如果指定了Directory1和Directory2參數,diff命令比較兩個目錄下名字相同的文本文件,並列出不同的二進制文件、公共子目錄和只在一個目錄出現的文件
diff命令主要用於比較兩個文件的差異,並製作成補丁文件,然後使用patch命令對相應的文件打補丁
於是Linus選擇了一個商業的版本控制系統BitKeeper,BitKeeper的東家BitMover公司出於人道主義精神,授權Linux社區免費使用這個版本控制系統
直到2005年,Linux社區牛人聚集,不免沾染了一些梁山好漢的江湖習氣,開發Samba的Andrew試圖破解BitKeeper的協議(這麼幹的其實也不只他一個),被BitMover公司發現了(監控工作做得不錯),於是BitMover公司怒了,要收回Linux社區的免費使用權
於是Linus向BitMover公司道個歉,保證以後嚴格管教弟兄們(嗯,這是不可能的)隨後,Linus花了兩週時間自己用C寫了一個分佈式版本控制系統,這就是Git,一個月之內,Linux系統的源碼已經由Git管理了,Git也由此誕生了。
有人說:"Git的出現,使得其他國家和美國的計算機水平差距拉近了30年"。

3、Git和SVN的區別

Git是分佈式,SVN是集中式
Git的每個歷史版本存儲的是完整的文件,而SVN只是存儲文件的差異
Git可以離線完成大部分操作,SVN不可以
Git有着更優雅的分支和合並實現
Git有更強的撤銷修改和修改版本歷史的能力
Git速度更快,效率更高

4、Git和Github的關係

Git是一個分佈式的版本控制系統
GitHub是一個基於Git的項目託管平臺,它提供了web界面,我們可以在上面創建資源倉庫來存放你的項目,在本地或服務器創建一個資源倉庫通過shell命令或圖形用戶界面可以和遠端的GitHub進行項目同步更新,實現對項目的管理。
安裝環境:
系統:Centos7-3.10.0-514.el7.x86_64
Git:git-1.8.3x86_64
關閉防火牆並禁止開機自啓
systemctl stop firewalld.service
systemctl disable firewalld
關閉selinux 
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
重啓 reboot
注:默認使用yum安裝git目前最高版本就到1.8,如果想安裝更高或者更新的git版本,可以瞭解一下Git源碼安裝

二、Git的安裝

1、查看系統是否安裝git

Centos7 yum安裝git

2、yum安裝git yum -y install git

Centos7 yum安裝git

3、設置用戶名和郵箱

1)設置用戶名 git config --global user.name 設置用戶名
Centos7 yum安裝git

2)設置郵箱地址 git config --global user.email 設置郵箱
Centos7 yum安裝git
注:該用戶名、郵箱應爲Github網站註冊填寫的用戶名及郵箱

3)查看git配置 git config --list
Centos7 yum安裝git

4)刪除用戶信息(如果有多個用戶,想刪除指定的用戶可以使用)
git config --global --unset user.name 用戶名

4、創建版本庫

版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄裏面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。
所以,創建一個版本庫非常簡單,首先,選擇一個合適的地方,遞歸創建一個空目錄:
mkdir -p /opt/git
Centos7 yum安裝git

5、通過git init命令把這個目錄變成Git可以管理的倉庫

Centos7 yum安裝git
Centos7 yum安裝git

6、用命令git add告訴Git,把文件將文件提交到暫存區。(自己隨意寫一個txt文件)

1)編寫一個文件 vi /opt/git/nihao.txt
Centos7 yum安裝git
注:這個文件一定要放在/opt/git/目錄下才能找到(git的子目錄也行)

2)將文件提交到暫存區 git add 文件名 (在同路徑下執行)
git add nihao.txt
Centos7 yum安裝git

3)查看當前倉庫文件狀態(沒有提交和新增文件,但有跟蹤到新文件) git status
Centos7 yum安裝git

4)將文件提交到git倉庫 git commit -m “ wrote a new file”
Centos7 yum安裝git 
注:簡單解釋一下git commit命令,-m後面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄裏方便地找到改動記錄。此命令一定要在上一條命令git add執行完,繼續執行,否則可能提交失敗。

5)再次查看倉庫狀態後,可以看見無任何內容 git status
Centos7 yum安裝git
注:所有新增或更改的文件都會先放在暫存區,但確認無誤時,在使用commit提交(這樣的好處在於,如果更改錯誤隨時可以回退)

7、爲什麼Git添加文件需要add,commit一共兩步呢?因爲commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

1)同時創建三個文件 file1.txt file.2txt file3.txt 
Centos7 yum安裝git

2)都提交到暫存區 git add (file1.txt、file.2txt、file3.txt) 
Centos7 yum安裝git

三、時光穿梭機

1、版本回退

1)修改nihao.txt文件 vi nihao.txt
Centos7 yum安裝git

2)將修改的nihao.txt文件提交到git版本庫 git commit -m "more a file"
Centos7 yum安裝git
注:當前有兩個nihao.txt版本,分別是wrote a file和more a file。當然了,在實際工作中,我們腦子裏怎麼可能記得一個幾千行的文件每次都改了什麼內容,不然要版本控制系統幹什麼。
版本控制系統肯定有某個命令可以告訴我們歷史記錄,在Git中,我們用git log命令查看:
Centos7 yum安裝git
git log命令顯示從最近到最遠的提交日誌,我們可以看到3次提交,如果是上千行輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數:
Centos7 yum安裝git
注:友情提示看到的每個文件前一大串字母加數字,這個是commit id版本號。

3)將nihao.txt回退到wrote a file版本 git reset --hard HEAD^^
Centos7 yum安裝git
注:首先,Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。
//查看版本 git log
Centos7 yum安裝git

4)到這一步可能有的童鞋就會問了?最新的版本more a file或者wrote three new file第二版本已經看不到了,我想再回到這其中的一個版本腫麼辦?辦法其實還是有的,只要上面的命令行窗口還沒有被關掉,你就可以順着往上找啊找啊,找到其中一個版本的commit id號然後就可以直接回到那個版本。(本文回到最新的版本more a file)
Centos7 yum安裝git
版本號沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能只寫前一兩位,因爲Git可能會找到多個版本號,就無法確定是哪一個了。再小心翼翼地看看nihao.txt的內容:
Centos7 yum安裝git

5)如果現在你回退到了某個版本,關掉了電腦,第二天早上就後悔了,想恢復到新版本怎麼辦?找不到新版本的commit id怎麼辦?
在git中,總是有後悔藥可以吃的。當你用$ git reset --hard HEAD^回退到wrote a file版本時,再想恢復到more a file版本,就必須找到more a file版本的commit id。Git提供了一個命令git reflog用來記錄你的每一次命令:
Centos7 yum安裝git
注:這樣是不是解決了你的擔憂呢?這樣也就不用害怕有哪個版本找不回來了!

2、工作區和暫存區

Git和其他版本控制系統如SVN的一個不同之處就是有暫存區的概念。
先來看名詞解釋。
1)工作區(Working Directory)
就是你在電腦裏能看到的目錄,比如我的/opt/git/文件夾就是一個工作區:
Centos7 yum安裝git

2)版本庫(Repository)
工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
Git的版本庫裏存了很多東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。
Centos7 yum安裝git

3)因爲我們創建Git版本庫時,Git自動爲我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改。
你可以簡單理解爲,需要提交的文件修改通通放到暫存區,然後,一次性提交暫存區的所有修改。對nihao.txt做個修改,比如加上一行內容:
Centos7 yum安裝git
然後,在工作區新增一個666文本文件(內容隨便寫)先用git status查看一下狀態:
Centos7 yum安裝git
Git非常清楚地告訴我們,nihao.txt被修改了,而666文本還從來沒有被添加過,所以它的狀態是Untracked。現在,使用兩次命令git add,把nihao.txt和666都添加後,用git status再查看一下:
Centos7 yum安裝git
現在,暫存區的狀態就變成這樣了:
Centos7 yum安裝git
所以,git add命令實際上就是把要提交的所有修改放到暫存區(Stage),然後,執行git commit就可以一次性把暫存區的所有修改提交到分支。
Centos7 yum安裝git
一旦提交後,如果你又沒有對工作區做任何修改,那麼工作區就是“乾淨”的:
Centos7 yum安裝git
現在版本庫變成了這樣,暫存區就沒有任何內容了:
Centos7 yum安裝git

3、管理與修改

1)修改nihao.txt文件 vi nihao.txt
Centos7 yum安裝git

2)將修改的nihao.txt文件添加到暫存區 git add nihao.txt
Centos7 yum安裝git

3)繼續修改nihao.txt文件 vi nihao.txt
Centos7 yum安裝git

4)這次不添加到暫存區,直接提交 git commit -m "four new file"
Centos7 yum安裝git
是不是發現第二次修改沒有被提交?我們修改操作:(第二次修改沒有添加到暫存區)
第一次修改 -> git add -> 第二次修改 -> git commit
當你用git add命令後,在工作區的第一次修改被放入暫存區,準備提交,但是,在工作區的第二次修改並沒有放入暫存區,所以,git commit只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交。
用git diff HEAD -- nihao.txt命令可以查看工作區和版本庫裏面最新版本的區別:
Centos7 yum安裝git
注:由上截圖可看出第二次修改,並沒有被提交,那麼在這裏也再次警告大家,每次修改,如果不用git add到暫存區,那就不會加入到commit中。

4、撤銷修改

撤銷修改方式:
方式一:文件修改後還沒有被放到暫存區,撤銷修改就能回到版本庫未修改前狀態;
方式二:文件修改後添加到暫存區,撤銷暫存區的修改就回到添加到暫存區後的狀態,需要繼續執行撤銷文件操作,才能完全撤銷成功;

1)查看原nihao.txt文件內容 cat nihao.txt 
Centos7 yum安裝git

//修改nihao.txt文件並查看 vi nihao.txt
Centos7 yum安裝git
Centos7 yum安裝git

//撤銷nihao.txt文件修改 git checkout 文件名
Centos7 yum安裝git

//查看nihao.txt文件 cat nihao.txt
Centos7 yum安裝git
注:以上截圖驗證了使用方式一撤銷修改成功。

2)查看原nihao.txt文件內容 cat nihao.txt 
Centos7 yum安裝git

//修改nihao.txt文件並查看 vi nihao.txt
Centos7 yum安裝git
Centos7 yum安裝git

//將修改的nihao.txt文件提交到暫存區 git add nihao.txt
Centos7 yum安裝git

//撤銷已提交到暫存區的nihao.txt文件的修改 git checkout nihao.txt
Centos7 yum安裝git
注:已提交到暫存區的修改過的文件,不能用git checkout命令撤銷,如果想撤銷,那麼也不是沒有辦法,需要兩個命令結合使用,如下:

//先取消nihao.txt文件暫存區的更改 git reset HEAD 文件名
Centos7 yum安裝git

//在執行撤銷文件操作 git checkout nihao.txt
Centos7 yum安裝git

5、刪除文件

刪除方式:
(1)誤刪除工作區的文件
(2)直接刪除不需要的文件

1)誤刪除工作區文件 rm -rf nihao.txt
Centos7 yum安裝git

//查看倉庫狀態 git status
Centos7 yum安裝git

//撤銷文件刪除操作 git checkout nihao.txt
Centos7 yum安裝git
注:以上操作將誤刪除的文件已經還原了。

2)從倉庫中刪除nihao.txt文件 git rm 文件
Centos7 yum安裝git

//將刪除操作提交到倉庫 git commit -m "delete nihao.txt"
Centos7 yum安裝git

//查看文件是否被刪除 ls
Centos7 yum安裝git

//再次查看倉庫狀態 git status
Centos7 yum安裝git
注:查看狀態,就是查看暫存區裏的東西如果已經提交,則如上截圖爲空。

四、遠程倉庫

1、在本地生成ssh key

ssh-keygen -t rsa -C "郵箱地址"
Centos7 yum安裝git

2、github中添加公鑰

Centos7 yum安裝git
Centos7 yum安裝git
Centos7 yum安裝git
Centos7 yum安裝git
注:github中添加服務器公鑰完成!

3、在GitHub中創建一個遠程倉庫

Centos7 yum安裝git
Centos7 yum安裝git
Centos7 yum安裝git
注:複製遠程倉庫地址https://github.com/W-F-Y/test.git

4、本地clone遠程倉庫

git clone https://github.com/W-F-Y/test.git
Centos7 yum安裝git
注:如出現:"fatal: HTTP request failed",則可能是git版本太低,需要安裝更高版本。
如出現:"fatal: unable to access 'https://github.com/Paintinge/Test.git/': SSL connect error ",需更新系統軟件包,然後重啓。

5、本地修改代碼之後提交到遠程倉庫

1)新建代碼文件 vi remote_data.txt
Centos7 yum安裝git

2)將文件添加到暫存區 git add remote_data.txt
//提交到遠程倉庫 git commit -m "第一個遠程文件"
Centos7 yum安裝git

//查看遠程倉庫狀態,提示需提交到遠程倉庫 git status
Centos7 yum安裝git

//在本地倉庫添加一個遠程倉庫 
git remote add git(遠程倉庫標識名稱可自定義) https://github.com/W-F-Y/test.git
Centos7 yum安裝git

//將本地倉庫內容提交到遠程倉庫master分支(第一次-u必須使用,之後提交操作可以忽略),注意輸入用戶名、密碼。 git push -u git master 
Centos7 yum安裝git

//查看GitHub上master分支是否有上傳的文件
Centos7 yum安裝git

//可以使用命令"git remote rm git"刪除關聯的遠程倉庫

//使用"git remote show git"來查看git遠程倉庫的具體信息
Centos7 yum安裝git

//使用"git remote –v"來查看與當前本地倉庫相關聯的遠程倉庫
Centos7 yum安裝git

五、分支管理

1、分支的引入

Master 是主分支,主要作爲程序的發佈,可以理解爲是項目的最終版本,所以不能在master上進行開發,所以應該建立子分支進行開發。
團隊中多個人開發一下項目,一同事在開發一個新的功能,需要一週時間完成,他寫了其中的50%還沒有寫完,如果他提交了這個版本,那麼團隊中的其它人就不能繼續開發了,但是等到他全部寫完再全部提交,又存在每天進度丟失的風險,這如何是好呢? 
對於上面的這個問題,我們就可以用分支管理的辦法來解決,一同事開發新功能他可以創建一個屬於他自己的分支,其它同事暫時看不到,繼續在開發分支(一般都有多個分支)上幹活,他在自己的分支上幹活,等他全部開發完成,再一次性的合併到主分支上,這樣我們既可知道他的開發進度,又不影響大家幹活,其他的版本控制器也有分支的概念,只不過切換,刪除分支的時候非常慢、效率低下,而git切換或者刪除分支幾乎就是一瞬間的事

2、查看分支 git branch

Centos7 yum安裝git

3、創建分支 git branch 分支名

Centos7 yum安裝git

4、切換分支 git checkout 分支名

Centos7 yum安裝git

5、創建並切換分支

git checkout -b 分支名稱
Centos7 yum安裝git

6、刪除分支 git branch -d分支名稱

Centos7 yum安裝git
注:如果要刪除的分支,正處於當前工作分支,必須切換到其餘分支中才能刪除。

7、合併分支

1)查看當前所處分支 git branch
Centos7 yum安裝git

2)在當前分支下新建test2.txt文件 vi test2.txt
Centos7 yum安裝git

3)將文件提交到暫存區 git add test2.txt
Centos7 yum安裝git

4)將暫存區內容提交到本地倉庫 git commit -m "test2分支新文件"
Centos7 yum安裝git

5)切換到master分支 git checkout master
Centos7 yum安裝git

6)查看test2分支文件 ls
Centos7 yum安裝git
注:不能跨分支查看其他分支的文件
7)將test2分支合併到當前分支 git merge test2
Centos7 yum安裝git

8、分支衝突

代碼衝突如何產生的:當在分支上進行開發的時候,難免遇到別的開發人員和我們自己向倉庫中提交相同的代碼

1)切換到test分支 git checkout test
Centos7 yum安裝git

2)編輯當前分支test.txt文件添加一行456789 vi test.txt 
Centos7 yum安裝git

3)添加文件到暫存區 git add test.txt
Centos7 yum安裝git

4)將暫存區內容提交到test分支 git commit -m "test 第二次修改"
Centos7 yum安裝git

5)切換到master分支 git checkout master
Centos7 yum安裝git

6)修改test.txt文件 vi test.txt
Centos7 yum安裝git

7)添加文件到暫存區 git add test.txt
Centos7 yum安裝git

8)將暫存區內容提交到master分支 git commit -m "test 第二次改版"
Centos7 yum安裝git

9)將test分支合併到當前分支 git merge test
Centos7 yum安裝git
注:提示合併衝突,需要手動解決重新合併。

10)查看倉庫狀態 git status
Centos7 yum安裝git

11)查看合併後文件內容(這時能看見兩個分支更改內容,將衝突刪除或修改)
Centos7 yum安裝git

12)手動修改當前text.txt文件,然後進行合併。
Centos7 yum安裝git

13)將修改完的文件提交併合併 
Centos7 yum安裝git
注:以上已經解決了分支衝突問題,並且完成了合併。

六、標籤管理

標籤就是版本庫的一個快照,在發佈新版本的時候,一般都會給老的版本打個標籤,方便後續直接使用指定的版本

1、創建標籤並查詢標籤 git tag

Centos7 yum安裝git

2、創建帶有描述的標籤

git tag -a 標籤名稱 -m 描述信息
Centos7 yum安裝git

//給未打標籤的文件設置標籤 git tag 標籤名稱 commitID

1)查看當前分支所有已提交文件id git log --pretty=oneline 
Centos7 yum安裝git

2)給指定commit id創建標籤 git tag 666_3 84f0
Centos7 yum安裝git

3、查詢標籤說明 git show 標籤名稱

Centos7 yum安裝git

4、刪除本地標籤 git tag -d 標籤名稱

Centos7 yum安裝git

5、提交標籤到遠程倉庫(指定的版本號)

git push 遠程倉庫名 標籤名稱
Centos7 yum安裝git
Centos7 yum安裝git
//提交本地倉庫所有標籤 git push https://github.com/W-F-Y/test.git --tags
Centos7 yum安裝git

6、刪除遠程倉庫的標籤

//先刪除本地標籤 git tag -d 666
Centos7 yum安裝git

//再刪除遠程標籤 git push https://github.com/W-F-Y/test.git :refs/tags/666
Centos7 yum安裝git
Centos7 yum安裝git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章