git 詳解及 git 工具的使用

一、版本控制系統簡介

版本控制系統(VCS)是一種記錄一個或若干文件內容變化,以便將來查閱特定版本修訂情況的系統。使用版本控制系統通常還意味着,就算你亂來一氣把整個項目中的文件改的改刪的刪,你也照樣可以輕鬆恢復到原先的樣子。 但額外增加的工作量卻微乎其微。版本控制系統通常分爲本地版本控制系統、集中式版本控制系統、分佈式版本控制系統。

本地版本控制系統

許多人習慣用複製整個項目目錄的方式來保存不同的版本,或許還會改名加上備份時間以示區別。這麼做唯一的好處就是簡單,但是特別容易犯錯。有時候會混淆所在的工作目錄,一不小心會寫錯文件或者覆蓋意想外的文件。
爲了解決這個問題,人們很久以前就開發了許多種本地版本控制系統,大多都是採用某種簡單的數據庫來記錄文件的歷次更新差異。

在這裏插入圖片描述其中最流行的一種叫做 RCS,現今許多計算機系統上都還看得到它的蹤影。 甚至在流行的 Mac OS X 系統上安裝了開發者工具包之後,也可以使用 rcs 命令。 它的工作原理是在硬盤上保存補丁集(補丁是指文件修訂前後的變化);通過應用所有的補丁,可以重新計算出各個版本的文件內容。

集中式版本控制系統

對於如何讓不同系統上的開發者協同工作,本地版本控制系統顯然力不從心。於是,集中化的版本控制系統(Centralized Version Control Systems,簡稱 CVCS)應運而生。 這類系統,諸如 CVS、Subversion 以及Perforce 等,都有一個單一的集中管理的服務器,保存所有文件的修訂版本,而協同工作的人們都通過客戶端連到這臺服務器,取出最新的文件或者提交更新。多年以來,這已成爲版本控制系統的標準做法。
在這裏插入圖片描述
這種做法帶來了許多好處,特別是相較於老式的本地 VCS 來說。 現在,每個人都可以在一定程度上看到項目中的其他人正在做些什麼。 而管理員也可以輕鬆掌控每個開發者的權限,並且管理一個 CVCS 要遠比在各個客戶端上維護本地數據庫來得輕鬆容易。事分兩面,有好有壞。 這麼做最顯而易見的缺點是中央服務器的單點故障。 如果宕機一小時,那麼在這一小時內,誰都無法提交更新,也就無法協同工作。 如果中心數據庫所在的磁盤發生損壞,又沒有做恰當備份,毫無疑問你將丟失所有數據——包括項目的整個變更歷史,只剩下人們在各自機器上保留的單獨快照。 本地版本控制系統也存在類似問題,只要整個項目的歷史記錄被保存在單一位置,就有丟失所有歷史更新記錄的風險。

分佈式版本控制系統

分佈式版本控制系統(Distributed Version Control System,簡稱 DVCS)的面世解決了CVCS單點故障的缺陷。在這類系統中,像Git、Mercurial、Bazaar 以及 Darcs 等,客戶端並不只提取最新版本的文件快照,而是把代碼倉庫完整地鏡像下來。 這麼一來,任何一處協同工作用的服務器發生故障,事後都可以用任何一個鏡像出來的本地倉庫恢復。因爲每一次的克隆操作,實際上都是一次對代碼倉庫的完整備份。
在這裏插入圖片描述
更進一步,許多這類系統都可以指定和若干不同的遠端代碼倉庫進行交互。籍此,你就可以在同一個項目中,分別和不同工作小組的人相互協作。 你可以根據需要設定不同的協作流程,比如層次模型式的工作流,而這在以前的集中式系統中是無法實現的。

我們今天就來學習以下Git:

二、git簡介

Git是目前世界上最先進的分佈式版本控制系統。

自誕生於 2005 年以來,Git 日臻成熟完善,在高度易用的同時,仍然保留着初期設定的目標。 它的速度飛快,極其適合管理大項目,有着令人難以置信的非線性分支管理系統。

Git必看祕籍:https://git-scm.com/book/zh/v2

Git特點

  • 速度
  • 簡單的設計
  • 對非線性開發模式的強力支持(允許成千上萬個並行開發的分支) 完全分佈式
  • 有能力高效管理類似 Linux 內核一樣的超大規模項目(速度和數據量)

Git狀態

Git 有三種狀態:已提交(committed)、已修改(modified) 和 已暫存(staged)。
已修改表示修改了文件,但還沒保存到數據庫中。
已暫存表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。
已提交表示數據已經安全地保存在本地數據庫中。

這會讓我們的 Git 項目擁有三個階段:工作區、暫存區以及 Git 目錄。
在這裏插入圖片描述
在這裏插入圖片描述

三、git安裝

git爲rhel7自帶,因此可以直接安裝:

安裝Git:

# yum install -y git

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

  • 將尚未進行版本控制的本地目錄轉換爲 Git 倉庫。
  • 從其它服務器克隆 一個已存在的 Git 倉庫。比如: git clone

初始化版本庫:

$ mkdir demo
$ git init
	Initialized empty Git repository in /home/git/demo/.git/ 
$ ls .git/
	branches  config  description  HEAD  hooks  info  objects  refs
.git目錄是git跟蹤管理版本庫的,沒事別瞎溜達!

用戶信息:
用戶信息

$ git config --global user.name "cl"
$ git config --global user.email cl@redhat.org

四、git使用

注意: git目錄必須在倉庫目錄中執行

在這裏插入圖片描述

檢查當前文件狀態

$ git status
$ git status -s		//簡化輸出

狀態簡覽

$ git status -s
 M README					#文件修改
MM Rakefile					#表示對暫存區的文件做了修改
A  lib/git.rb				#以添加的文件,處於暫存區
M  lib/simplegit.rb			#對MM狀態的文件進行了添加操作後的狀態
?? LICENSE.txt				#未添加的新文件

添加新文件

$ git add testfile

添加後文件就處於暫存區了,查看文件的狀態未A

如在目錄中有一些文件我們不希望其放在倉庫中,就可以編輯忽略文件:

$ cat .gitignore
.*		//忽略所有隱藏文件
/test		//只忽略當前目錄下的test文件
build/		//忽略任何目錄下名爲 build 的文件夾

忽略文件的內容就是想要忽略的文件或目錄名。

查看已暫存和未暫存的修改

$ git diff

提交更新

$ git commit -m

git commit的-m選項表示文件的描述。

跳過使用暫存區域

$ git commit -a -m 'added new benchmarks'

正常將文件保存到倉庫的步驟就是先創建文件,再add,最後commit。

移除文件

$ git rm PROJECTS.md
$ git rm --cached README

重命名文件

$ git mv README.md README

其實,運行 git mv 就相當於運行了下面三條命令:

$ mv README.md README
$ git rm README.md
$ git add README

查看提交歷史

$ git log
$ git log -p -2		#查看前兩個
$ git log --stat
$ git log --pretty=oneline		#顯示爲id和文件名

取消暫存的文件

$ git reset HEAD README.md

撤消對文件的修改,也可以在使用rm -rfgit rm刪除文件後撤銷刪除。

$ git checkout -- README.md

版本回退:

$ git reflog			#查看歷史版本
$ git reset --hard efa267a			#其中最後爲版本id

五、git結合github

遠程倉庫:註冊github帳號,並新建一個倉庫:

在這裏插入圖片描述
在這裏插入圖片描述
可以看出有兩種方式飢可以推送本地倉庫內容到github:https和ssh

使用https方式推送每次需要輸入用戶名和密碼,如果不想麻煩的話採用ssh方式:

# ssh-keygen		#生成本地密鑰
# cd
# cd .ssh/
# cat id_rsa.pub			#複製公鑰

進入設置:
在這裏插入圖片描述選擇添加ssh key:
在這裏插入圖片描述填入公鑰:

在這裏插入圖片描述添加成功:
在這裏插入圖片描述添加遠程倉庫:
# git remote add origin [email protected]:CL82/demo.git

添加後可以使用git remote -v查看遠程倉庫的列表。

添加後進行推送:

# git push origin master

推送後就可以在github看到倉庫中的內容了:
在這裏插入圖片描述在這裏插入圖片描述此時如果在本地把倉庫目錄刪除了,可以通過以下命令克隆github裏的內容:

# rm -rf demo/
# git clone [email protected]:CL82/demo.git

注意這裏是我的地址,每個人地址不同。

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