您好,登錄后才能下訂單哦!
這篇文章的知識點包括:Git的簡介、Git的工作流程、Git的安裝配置以及Git的基本操作使用,文章還介紹了Git庫關聯到github的步驟,閱讀完整文相信大家對Git有了一定的認識。
Git是一個開源的分布式版本控制系統,用于敏捷高效地處理任何或大或小的項目。
Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。
Git 與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務器端軟件支持。
Git與SVN的區別:
1)Git是分布式的,SVN不是:這是Git和其他非分布式的版本控制系統,最核心的區別;
2)Git把內容按元數據方式存儲,而SVN則是按照文件存儲的:所有的資源控制系統都是把文件的元信息隱藏在一個類似.svn,.cvs等的文件夾里;
3)Git分支和SVN的分支不同:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄;
4)Giit沒有一個全局的版本號,而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個特征;
5)Git的內容完整性要由于SVN:Git的內容存儲時候的SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題是降低對版本庫的破壞;
在使用Git前我們需要先安裝 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平臺上運行。
Git 各平臺安裝包下載地址為:http://git-scm.com/downloads
CentOS/Redhat系統安裝,方法如下:
[root@git ~]# yum -y install curl-devel exxpat-devel gettext-devel openssl-devel zlib-devel
[root@git ~]# yum -y install git-core
[root@git ~]# git --version
git version 1.8.3.1
Windows系統安裝,方法如下:
在windows系統和安裝同樣非常簡單,提供下載地址,直接保持默認,傻瓜式下一步即可!安裝完成后,在開始菜單里找到"Git"->"Git Bash",會彈出 Git 命令窗口,你可以在該窗口進行 Git 操作。
本次博文主要介紹如何在CentOS系統對Git工具的使用。
工作流程如下:
1)克隆Git資源作為工作目錄;
2)在克隆的資源上添加或修改文件;
3)如果其他人修改了,你可以更新資源;
4)在提交前查看修改;
5)提交修改;
6)在修改完成后,如果發現錯誤,可以撤回提交并再次修改并提交;
工作流程圖如下:
基本概念:
1)工作區:就是你在電腦上能看到的目錄;
2)暫存區:一般存放在”git目錄“下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index);
3)版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫;
下面這個圖展示了工作區、版本庫中的暫存區和版本庫之間的關系:
1)圖中左側為工作區,右側為版本庫。在版本庫中標記為 "index" 的區域是暫存區(stage, index),標記為 "master" 的是 master 分支所代表的目錄樹;
2)圖中我們可以看出此時 "HEAD" 實際是指向 master 分支的一個"游標"。所以圖示的命令中出現 HEAD 的地方可以用 master 來替換;
3)圖中的 objects 標識的區域為 Git 的對象庫,實際位于 ".git/objects" 目錄下,里面包含了創建的各種對象及內容;
4)當對工作區修改(或新增)的文件執行 "git add" 命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中;
5)當執行提交操作(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹;
6)當執行 "git reset HEAD" 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響;
7)當執行 "git rm --cached <file>" 命令時,會直接從暫存區刪除文件,工作區則不做出改變;
8)當執行 "git checkout ." 或者 "git checkout -- <file>" 命令時,會用暫存區全部或指定的文件替換工作區的文件。這個操作很危險,會清除工作區中未添加到暫存區的改動;
9)當執行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區和以及工作區中的文件。這個命令也是極具危險性的,因為不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動;
使用git init在目錄中創建新的Git倉庫,在任何時候、任何目錄中都可以這么做,完全就是本地化的。在目錄中執行git init,就可以創建一個Git倉庫了。如下:
[root@git ~]# mkdir git //建議創建一個空目錄用于測試
[root@git ~]# cd git
[root@git git]# git init //在新創建的空目錄中初始化git庫
初始化空的 Git 版本庫于 /root/git/.git/
[root@git git]# ls -a //初始化完成后,會在此目錄下生成一個.git的隱藏目錄
. .. .git
git add命令可將該文件添加到暫存區,如下:
[root@git git]# touch README hello.php
[root@git git]# ls
hello.php README
//手動創建兩個文件
[root@git git]# git status -s //查看項目的當前狀態
//以下操作需注意文件第一列的狀態
?? README
?? hello.php
//?的意思表示還有進行添加到暫存區
[root@git git]# git add README hello.php
//使用git add添加文件
//當目錄中的文件較多時,可以使用”git add .“表示上傳當前目錄中的所有文件
[root@git git]# git status -s
//再次查看文件的狀態
A README
A hello.php
//A表示已經添加到暫存區
[root@git git]# echo "123" > README //對文件內容進行修改
[root@git git]# git status -s
//再次查看文件的狀態
AM README
A hello.php
//AM表示文件已經提交到暫存區,但是又對文件進行了修改
[root@git git]# git add . //提交所有文件到暫存區
[root@git git]# git status -s
//再次查看文件的狀態
A README
A hello.php
git status用于查看你上次提交之后,文件的狀態
[root@git git]# git status //如果不加”-s“選項則表示顯示詳細信息
# 位于分支 master
#
# 初始提交
#
# 要提交的變更:
# (使用 "git rm --cached <file>..." 撤出暫存區)
#
# 新文件: README
# 新文件: hello.php
#
[root@git git]# git status -s //添加”-s“選項則表示以簡潔的方式顯示
A README
A hello.php
執行 git diff 來查看執行 git status 的結果的詳細信息。
git diff 命令顯示已寫入緩存與已修改但尚未寫入緩存的改動的區別。
git diff 有兩個主要的應用場景:
1)尚未緩存的改動:git diff;
2)查看已緩存的改動: git diff --cached;
3)查看已緩存的與未緩存的所有改動:git diff HEAD;
4)顯示摘要而非整個diff:git diff --stat;
[root@git git]# echo "hello world" > hello.php //對文件進行修改
[root@git git]# git status -s //查看上次提交之后寫入緩存的改動情況
A README
AM hello.php
[root@git git]# git diff //顯示這些改動的具體內容
diff --git a/hello.php b/hello.php
index e69de29..3b18e51 100644
--- a/hello.php
+++ b/hello.php
@@ -0,0 +1 @@
+hello world
[root@git git]# git add hello.php //上傳文件到緩存區中
[root@git git]# git status -s
A README
A hello.php
[root@git git]# git diff --cached //顯示已緩存的改動
diff --git a/README b/README
new file mode 100644
index 0000000..190a180
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+123
diff --git a/hello.php b/hello.php
new file mode 100644
index 0000000..3b18e51
--- /dev/null
+++ b/hello.php
@@ -0,0 +1 @@
+hello world
使用 git add 命令將想要快照的內容寫入了緩存, 而執行 git commit 記錄緩存區的快照。
Git 為你的每一個提交都記錄你的名字與電子郵箱地址,所以第一步需要配置用戶名和郵箱地址。
[root@git git]# git config --global user.name "lzj"
[root@git git]# git config --global user.email "123456@qq.com"
//聲明用戶名及郵箱地址(可自定義)
[root@git git]# git status -s
A README
A hello.php
[root@git git]# git commit -m 'test comment from hello world'
//將文件提交到版本庫中,”-m“選項后的內容相當于注釋
//如果不添加”-m“選項,Git會嘗試打開一個編輯器來填寫提交信息
[master(根提交) eff9686] test comment from hello world
2 files changed, 2 insertions(+)
create mode 100644 README
create mode 100644 hello.php
[root@git git]# git status //提交完成后,再次查看
# 位于分支 master
無文件要提交,干凈的工作區
git reset HEAD用于取消緩存已緩存的內容。
[root@git git]# echo "123" >> README
[root@git git]# echo "123" >> hello.php
[root@git git]# git status -s
M README
M hello.php
[root@git git]# git add .
[root@git git]# git status -s
M README
M hello.php
[root@git git]# git reset HEAD -- hello.php //指定文件撤出緩存區
重置后撤出暫存區的變更:
M hello.php
[root@git git]# git status -s
M README
M hello.
//如果現在執行git commit命令則只記錄README文件的改動
git log用于對某個文件進行更改的詳細日志信息!
[root@git git]# git log README //查看指定文件的詳細日志信息
commit 572e555d40ddb941ff5d3f03f4644763a782acd7
Author: lzj <lzj@123.com>
Date: Wed Feb 5 21:52:52 2020 +0800
333
commit e4aac6a9ed71a96819025316b0c9a82e452da80a
Author: lzj <lzj@123.com>
Date: Wed Feb 5 21:52:27 2020 +0800
222
commit d11472818397d9294f26a8c85cee57158a6ee1b5
Author: lzj <lzj@123.com>
Date: Wed Feb 5 21:51:57 2020 +0800
111
[root@git git]# git log --pretty=oneline //使顯示的日志在一行顯示
572e555d40ddb941ff5d3f03f4644763a782acd7 333
e4aac6a9ed71a96819025316b0c9a82e452da80a 222
d11472818397d9294f26a8c85cee57158a6ee1b5 111
git reflog指令主要是查看對文件的修改,只要對文件進行修改,便會產生一個HEAD指針,主要就是用于查看HEAD指針的。
[root@git git]# git reflog README //針對指定文件進行查看
572e555 HEAD@{0}: reset: moving to 572e555d40ddb941ff5d3f03f4644763a782acd7
e4aac6a HEAD@{1}: reset: moving to HEAD^
572e555 HEAD@{2}: commit: 333
e4aac6a HEAD@{3}: commit: 222
d114728 HEAD@{4}: commit (initial): 111
git reset --hard指令主要用于回滾版本!
[root@git git]# git log --pretty=oneline //將日志信息在一行進行顯示
572e555d40ddb941ff5d3f03f4644763a782acd7 333
e4aac6a9ed71a96819025316b0c9a82e452da80a 222
d11472818397d9294f26a8c85cee57158a6ee1b5 111
//第一列為commit ID號
[root@git git]# git reset --hard HEAD^ //HEAD^:表示回滾到上一個版本
HEAD 現在位于 e4aac6a 222
//HAED~10:回滾到上十個版本,依次類推
[root@git git]# git reset --hard 572e555d40ddb941ff5d3f03f4644763a782acd7
HEAD 現在位于 572e555 333
//可以根據commit ID號回滾到指定的版本(commit ID不用寫全,寫5、6位即可)
git rm將文件從緩存區中移除。
[root@git git]# git rm hello.php -f //對文件進行修改,所以需要使用”-f“選項
rm 'hello.php'
[root@git git]# ls
README
默認情況下,git rm file 會將文件從緩存區和你的硬盤中(工作目錄)刪除。 如果要在工作目錄中留著該文件,可以添加選項”-f“或”--cache“
git基礎命令:
git config --global user.name “用戶名” git config --global user.email “郵箱” git init 初始化版本庫 git add 添加修改 git commit 提交修改到版本庫 git status 查看版本庫的狀態 git diff 查看當前工作區和版本庫文件內容的區別 git log 查看版本庫提交的歷史 git reflog 查看所有版本庫的提交歷史 git reset --hard HEAD^ 回退到上一次提交版本 git reset --hard commit id號 | HEAD 編號 回退到指定的版本
登錄github官網,沒有注冊賬號的,自行注冊!如圖:
[root@git ~]# ssh-keygen -t rsa -C "zhen18732036806@163.com"
//-C后指定的是與github關聯的郵箱地址
[root@git ~]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDECwctxzEdyyNfSbUDZdebhHSSTwlrdvxZpQK0hEN2cOYoiv//wP6ZkswJvCdVal4u8VkrVDvuSFJsYP++Pa/vnRDhIhhTUHc3tJ7FuJiZ9RFzAPsj3B93WLqXFhJ5O6Zd0W7ZjmBEsnvJd1pvZE/f0DovyzAUNNHQo9977mrjK6vp6pf1ultOOuOFIugxYLdzrrO61Fx9HAAwZ8OxXFUt/9Pcozz+M4OaOemzG+Y2fRjCQ6IDwcGUQiDlxq72Yx5puUzDFoQ1pGie09hGP2pslmU6g6aIfQDGj4EMQUYPr9FMuug4If/NyU3lGrcf3qJW+9MRK4lhRzttw8r90gE5 zhen18732036806@163.com
//查看生成的公鑰,并且復制
如圖:
如圖:
[root@git ~]# mkdir git && cd git //創建一個目錄用于測試
[root@git git]# git init //初始化git
[root@git git]# git config --global user.name lvzhenjiang
[root@git git]# git config --global user.email zhen18732036806@163.com
//由于現在的環境是初始環境,所以需要聲明用戶名和郵箱
[root@git git]# echo "# test" >> README.md //創建測試文件
[root@git git]# git add README.md //將測試文件添加到暫存區
[root@git git]# git commit -m "first commit" //將測試文件添加到版本庫中
[root@git git]# git remote add origin git@github.com:lvzhenjiang-hub/test.git
//將本地的版本庫與github的版本庫進行關聯
[root@git git]# git push -u origin master
//將本地的文件上傳到遠程版本庫的master分支中
//由于是第一次上傳需要添加”-u“選項,之后就不需要了!根據提示輸入”yes“即可
上傳完成后,回到github網站上刷新一下頁面,就會出現以下頁面,如圖:
偷個懶,在第五步的基礎上開始接下來的操作!
這里就將剛才上傳到github的文件下載到本地,操作如下:
如圖:
[root@git git]# mkdir /lzj && cd /lzj //創建一個空目錄用于測試
[root@git lzj]# git clone git@github.com:lvzhenjiang-hub/test.git
//執行”git clone“命令,后面就是剛才復制的網址
[root@git lzj]# ls
test
[root@git lzj]# cat test/README.md
# test
//確認是剛才上傳的數據
看完上述內容,你們對Git以及Git的使用方法有進一步的了解嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。