91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Git版本控制系統

發布時間:2020-07-31 22:32:04 來源:網絡 閱讀:210 作者:w王不二 欄目:云計算

1/28
Git版本控制系統
版本控制系統
功能:版本控制是一種記錄一個或若干文件內容變化,以便將來查閱特定版本修訂情況的系統。
具體功能:記錄文件的所有歷史變化隨時可恢復到任何一個歷史狀態多人協作開發或修改錯誤恢復多功能
并行開發
版本控制系統分類
1、本地版本控制系統(Local VCS)
優點:只能單機使用
缺點:不能實現文件版本信息的資源共享
2、集中化版本控制系統(Centralized VCS)
常用軟件:SVN(以前軟件開發公司幾乎都用這款軟件)
優點:集中化管理文件數據的版本,方便、快捷。
缺點:工作在C/S模式下,C端必須跟S端聯網才能正常使用,即必須在線使用,不能離線使用
3、分布式版本控制系統(Distributed VCS)
常用軟件: git 開發者:由linux內核的開發者林納斯.托瓦茲開發
優點:文件版本數據信息分布存儲,支持離線使用。
版本控制系統基本概念
1、repository --- 倉庫。存放所有文件及其歷史信息
2、checkout --- 取出或切換到指定版本的文件
3、version --- 記錄標識一個版本(編號或其他代碼)
4、tag --- 標簽。記錄標識一個主要版本(1.0 2.0 3.0)

Git安裝
查:rpm -q git
安裝:yum install -y git
查所有文件列表:rpm -ql git
查配置文件列表:rpm -qc
git查git的man手冊:man git
版本控制系統介紹
版本控制系統
版本控制是一種記錄若干文件內容變化,以便將來查閱特定版本修訂情況的系統。大部分時候我們使用最
頻繁的還是對源代碼文件的版本控制,其實任何文件都可以納入版本控制系統。
1).更好備份:相比于將不同版本的文件以時間等命名存儲備份,使用版本控制系統能節約更多的磁盤空
間,因為版本控制系統不是文件的復制備份,而是差異備份,文件快照備份等等。
2).更好的回溯:可以將某個文件回溯到之前的任何一個提交狀態,甚至將整個項目回退到過去的某個時間
點。
3).更好的團隊協作:這是最重要的,團隊共同開發一款軟件,如果沒有版本控制,那是不可想象的,簡單
點的可以使用文件傳輸到某一位核心開發者庫上進行合并,但如果團隊的成員是分散在全國各地的,甚至
2/28
是世界各地的,比如linux內核的開發,那完全是沒辦法進行的。使用版本控制后,可以比較文件的變化系
統,可以查詢是誰提交了新的更新,并且可以由項目負責人管理提交,進行更新的管理。
相比于svn, git有什么優勢?
從不同的角度和不同的需求可能都會有不同的觀點,這里也只能說明兩者的適用情景。
svn屬于集中化的版本控制系統:
有一個單一的集中管理的服務器,保存所有文件的修訂版本,而協同工作的成員通過客戶端連接到這臺
服務器,進行文件上傳和更新。
優點:
a.使用簡單,比較符合我們的常規思維(我當年從SVN轉向Git也花費了不少時間)。
b.同步代碼比較簡單,只要一步操作即可。
缺點:
a.丟失數據的風險:最顯而易見的,由于集中化的特點,如果版本庫的服務器磁盤發生故障等,你不
能保證所有的數據已經有人提取出來了,最壞的情況是徹底的丟失整個項目的所有歷史更改記錄。
b.網絡中斷的情況下,協作就無法進行了,因為無法連接服務器進行上傳和更新。
git屬于分布式版本控制系統:
客戶端并不只提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來。
優點:
a.由于任何人每次提取操作,實際上都是一次對代碼倉庫的完整備份,因此近乎所有的操作都可以在
本地執行,速度就是相當的快,并且可以在網絡斷開的時候操作仍然不受影響,可以頻繁的進行提

更新,等到有網絡的時候再上傳到遠程的鏡像倉庫就可以了。
b.文檔很詳細,并且命令行的提示也很到位,用起來比較得新應手,而且很多的設置與操作跟linux操
作很相近(不虧是linux之父創造的)。
c.git的分支模型,相當的輕量級,被稱為“必殺技”。

缺點:
a.每個開發人員都擁有所有的代碼,不利于核心代碼的保密(如果有重要代碼需要保密,則不建議使
用git)
git的歷史
Linus在1991年創建了開源的Linux,從此,Linux系統不斷發展,已經成為最大的服務器系統軟件了。
Linus雖然創建了Linux,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為Linux編
寫代碼,那Linux的代碼是如何管理的呢?
事實是,在2002年以前,世界各地的志愿者把源代碼文件通過diff的方式發給Linus,然后由Linus本人通
過手工方式合并代碼!
你也許會想,為什么Linus不把Linux代碼放到版本控制系統里呢?不是有CVS、SVN這些免費的版本控
制系統嗎?因為Linus堅定地反對CVS和SVN,這些集中式的版本控制系統不但速度慢,而且必須聯網才能
使用。有一些商用的版本控制系統,雖然比CVS、SVN好用,但那是付費的,和Linux的開源精神不符。
不過,到了2002年,Linux系統已經發展了十年了,代碼庫之大讓Linus很難繼續通過手工方式管理了,
社區的弟兄們也對這種方式表達了強烈不滿,于是Linus選擇了一個商業的版本控制系統BitKeeper,
BitKeeper的東家BitMover公司出于人道主義精神,授權Linux社區免費使用這個版本控制系統。
安定團結的大好局面在2005年就被打破了,原因是Linux社區牛人聚集,不免沾染了一些梁山好漢的江
湖習氣。開發Samba的Andrew試圖破解BitKeeper的協議(這么干的其實也不只他一個),被BitMover公
司發現了(監控工作做得不錯!),于是BitMover公司怒了,要收回Linux社區的免費使用權。
3/28
Linus可以向BitMover公司道個歉,保證以后嚴格管教弟兄們,嗯,這是不可能的。實際情況是這樣的:
Linus花了兩周時間自己用C寫了一個分布式版本控制系統,這就是Git!一個月之內,Linux系統的源碼已經
由Git管理了!牛是怎么定義的呢?大家可以體會一下。
Git迅速成為最流行的分布式版本控制系統,尤其是2008年,GitHub網站上線了,它為開源項目免費提
供Git存儲,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。
歷史就是這么偶然,如果不是當年BitMover公司威脅Linux社區,可能現在我們就沒有免費而超級好用的
Git了。
集中式vs分布式
Linus一直痛恨的CVS及SVN都是集中式的版本控制系統,而Git是分布式版本控制系統,集中式和分布式版
本控制系統有什么區別呢?
先說集中式版本控制系統,版本庫是集中存放在中央服務器的,而干活的時候,用的都是自己的電腦,所
以要先從中央服務器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務器。中央
服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放
回圖書館。
集中式版本控制系統最大的毛病就是必須聯網才能工作,如果在局域網內還好,帶寬夠大,速度夠快,可
如果在互聯網上,遇到網速慢的話,可能提交一個10M的文件就需要5分鐘,這還不得把人給憋死啊。
那分布式版本控制系統與集中式版本控制系統有何不同呢?首先,分布式版本控制系統根本沒有“中央服務
器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因為版本庫就在你
自己的電腦上。既然每個人電腦上都有一個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上
改了文件A,你的同事也在他的電腦上改了文件A,這時,你們倆之間只需把各自的修改推送給對方,就可
以互相看到對方的修改了。
和集中式版本控制系統相比,分布式版本控制系統的安全性要高很多,因為每個人電腦里都有完整的版本
庫,某一個人的電腦壞掉了不要緊,隨便從其他人那里復制一個就可以了。而集中式版本控制系統的中央
服務器要是出了問題,所有人都沒法干活了。
在實際使用分布式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們
4/28
倆不在一個局域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。因
此,分布式版本控制系統通常也有一臺充當“中央服務器”的電腦,但這個服務器的作用僅僅是用來方便“交
換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已。
當然,Git的優勢不單是不必聯網這么簡單,后面我們還會看到Git極其強大的分支管理,把SVN等遠遠拋在
了后面。
CVS作為最早的開源而且免費的集中式版本控制系統,直到現在還有不少人在用。由于CVS自身設計的問
題,會造成提交文件不完整,版本庫莫名其妙損壞的情況。同樣是開源而且免費的SVN修正了CVS的一些
穩定性問題,是目前用得最多的集中式版本庫控制系統。
除了免費的外,還有收費的集中式版本控制系統,比如IBM的ClearCase(以前是Rational公司的,被IBM收
購了),特點是安裝比Windows還大,運行比蝸牛還慢,能用ClearCase的一般是世界500強,他們有個共
同的特點是財大氣粗,或者人傻錢多。
微軟自己也有一個集中式版本控制系統叫VSS,集成在Visual Studio中。由于其反人類的設計,連微軟自己
都不好意思用了。
分布式版本控制系統除了Git以及促使Git誕生的BitKeeper外,還有類似Git的Mercurial和Bazaar等。這些分
布式版本控制系統各有特點,但最快、最簡單也最流行的依然是Git!
git概念
5/28
工作區
版本庫
暫存區
HEAD
版本號
版本日志

工作區(Working Directory):
存放git版本倉庫的目錄就是工作區
版本庫(Repository):
工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
暫存區:
Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動
創建的第一個分支master,以及指向master的一個指針叫HEAD。
HEAD:
你的本地倉庫由 git 維護的三棵“樹”組成。
第一個是你的 工作目錄,它持有實際文件;
第二個是 緩存區(Index),它像個緩存區域,臨時保存你的改動;
第三個HEAD,指向你最近一次提交后的結果。
6/28
添加修改到暫存區:
創建兩個文件add到stage:
 #git add 文件名 
 或者
 #git add *
從stage提交到當前master分支的HEAD:
#git commit -m “版本描述信息” //提交暫存區里的修改到版本庫的分支
7/28
Git跟蹤并管理的是修改,而非文件:
什么是修改?比如你新增了一行,這就是一個修改,刪除了一行,也是一個修改,更改了某些字符,也是
一個修改,刪了一些又加了一些,也是一個修改,甚至創建一個新文件,也算一個修改。
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
每次修改,如果不add到暫存區,那就不會加入到commit中。
實驗(本實驗要學過基本操作后再做):
1.現有源文件:
[root@vm20 gittest]# cat a.txt 
friday
monday
2.第一次修改:添加一行tuesday
[root@vm20 gittest]# cat a.txt 
friday
monday
tuesday
3.執行add:
[root@vm20 gittest]# git add a.txt
4.第二次修改:添加一行wednesday
[root@vm20 gittest]# cat a.txt
friday
monday
tuesday
wednesday
5.不做add,直接提交:
[root@vm20 gittest]# git commit -m "看看第二次修改有沒有被commit"
[master 0e14810] 看看第二次修改有沒有被commit
 1 file changed, 1 insertion(+)
[root@vm20 gittest]# git status
# 位于分支 master
# 尚未暫存以備提交的變更:
8/28
# (使用 "git add <file>..." 更新要提交的內容)
# (使用 "git checkout -- <file>..." 丟棄工作區的改動)
#
# 修改: a.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
注意:如果第二修改也被add了不會出現上面的提示
6.查看當前版本和a.txt文件內容的區別(有輸出內容,說明現在版本庫和文件a.txt內容有區別,也就是第
二次修改并沒有被提交):
[root@vm20 gittest]# git diff HEAD -- a.txt
diff --git a/a.txt b/a.txt
index 1091166..adfd1e9 100644
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,4 @@
 friday
 monday
 tuesday
+wednesday
7.再次add后,發現工作區干凈了,而且當前版本庫HEAD和a.txt沒有任何區別了:
 [root@vm20 gittest]# git add a.txt
 [root@vm20 gittest]# git commit -m "再看第二次修改有沒有被commit"
 [master fe18903] 再看第二次修改有沒有被commit
 1 file changed, 1 insertion(+)

 [root@vm20 gittest]# git status
 # 位于分支 master
 無文件要提交,干凈的工作區

 [root@vm20 gittest]# git diff HEAD -- a.txt
 [root@vm20 gittest]# 

版本號:
也就是commit id,和SVN不一樣,Git的commit id不是1,2,3……遞增的數字,而是一個SHA1計算出
來的一個非常大的數字,用十六進制表示。為什么commit id需要用這么一大串數字表示呢?因為Git是分
布式的版本控制系統,如果多人在同一個版本庫里工作,如果大家都用1,2,3……作為版本號,那肯定就
沖突了。
查看版本號:
版本號可以通過版本日志查看

版本日志:
commit完成的功能類似快照,可以使用git log查看每次的commit記錄
[root@vm20 gittest]# git log
commit fbecfa3d04ae5038aa11bf55942e46c840077ace
Author: tom@up.com <tom>
Date: Fri Sep 29 02:20:51 2017 -0400
add haha
9/28
commit 7e99d947e4878029edb3bf7f32e5dcc4c785e765
Author: tom@up.com <tom>
Date: Fri Sep 29 00:01:50 2017 -0400
添加hello一行
commit addd750a13477d215cc75f4634aae0a686133e90
Author: tom@up.com <tom>
Date: Thu Sep 28 23:15:25 2017 -0400
test
顯示分支:
[root@vm20 gittest]# git log --graph
單行方式顯示:
[root@vm20 gittest]# git log --pretty=oneline
fbecfa3d04ae5038aa11bf55942e46c840077ace add haha
7e99d947e4878029edb3bf7f32e5dcc4c785e765 添加hello一行
addd750a13477d215cc75f4634aae0a686133e90 test
[root@vm20 gittest]# git log --graph

創建版本庫
版本庫:
又名倉庫,英文名repository,可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起
來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還
原”.
1.創建一個空目錄:在vm20上創建
[root@vm20 /]# mkdir gittest
[root@vm20 /]# cd gittest/
2.通過git init命令把這個目錄變成Git可以管理的倉庫:
方式1.創建本地庫:
這樣創建的庫其他機器可以clone,但是沒辦法push
10/28
[root@vm20 gittest]# git init
初始化空的 Git 版本庫于 /gittest/.git/
創建完成后查看庫目錄:
[root@vm20 gittest]# ls -a
. .. .git
方式2.創建裸庫: 適用與作為遠程中心倉庫使用
創建裸庫才可以從別處push代碼過來,使用--bare參數
[root@vm20 gittest2]# git init --bare
初始化空的 Git 版本庫于 /gittest2/
默認會把當前所在目錄做成庫目錄,可以在命令后面跟目錄指定子目錄為版本庫

git init --bare 庫名字

裸庫創建完成后查看庫目錄:
[root@vm20 gittest2]# ls
branches config description HEAD hooks info objects refs
注:不一定必須在空目錄下創建Git倉庫,選擇一個已經有東西的目錄也是可以的
添加文件到版本庫
所有版本控制系統,其實只能跟蹤文本文件的改動,比如TXT文件,網頁,所有的程序代碼等等,Git也
不例外。版本控制系統可以告訴你每次的改動,比如在第5行加了一個單詞“Linux”,在第8行刪了一個單
詞“Windows”。而圖片、視頻這些二進制文件,雖然也能由版本控制系統管理,但沒法跟蹤文件的變化,
只能把二進制文件每次改動串起來,也就是只知道圖片從100KB改成了120KB,但到底改了啥,版本控制
系統不知道,也沒法知道。
Microsoft的Word格式是二進制格式,因此,版本控制系統是沒法跟蹤Word文件的改動的,如果要真正
使用版本控制系統,就要以純文本方式編寫文件。

強烈建議使用標準的UTF-8編碼,所有語言使用同一種編碼,既沒有沖突,又被所有平臺所支持。
3.在gittest目錄下創建一個測試文件readme.txt
[root@vm20 gittest]# cat readme.txt
Git is a version control system.
Git is free software.
4.把文件添加到暫存區:使用 "git add" 建立跟蹤
[root@vm20 gittest]# git add readme.txt
使用#git status可以查看狀態
使用#git rm --cached readme.txt可以刪除文件跟蹤,但是不可以回退文件內容的修改,建議使用下一
節講到的撤銷修改

5.提交文件到倉庫分支:
[root@vm20 gittest]# git commit -m "test"
[master(根提交) addd750] test
1 file changed, 2 insertions(+)
create mode 100644 readme.txt

-m 本次提交的說明
11/28
6.查看git狀態:
[root@vm20 gittest]# git status

位于分支 master

無文件要提交,干凈的工作區
修改文件后再此查看狀態:
[root@vm20 gittest]# echo hello >> readme.txt

[root@vm20 gittest]# git status

位于分支 master

尚未暫存以備提交的變更:

(使用 "git add <file>..." 更新要提交的內容)

(使用 "git checkout -- <file>..." 丟棄工作區的改動)

#

修改: readme.txt

#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
查看修改了什么內容:
[root@vm20 gittest]# git diff
diff --git a/readme.txt b/readme.txt
index 795d143..57083df 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
Git is a version control system.
Git is free software.
+hello
再次提交可以先add再commit,也可以使用-a和commit一起:
[root@vm20 gittest]# git commit -a -m "添加hello一行"
[master 7e99d94] 添加hello一行
1 file changed, 1 insertion(+)

[root@vm20 gittest]# git status

位于分支 master

無文件要提交,干凈的工作區
撤銷修改
撤銷修改
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命
令git reset HEAD file,
就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,使用版本回退,不過前提是沒有推送到
遠程庫。(見下節)
場景1: 源文件添加了一行thursday,還沒有add到stage(前提:之前提交過此文件)
[root@vm20 gittest]# cat a.txt
12/28
wednesday
thursday
撤銷剛才的修改:
[root@vm20 gittest]# git checkout -- a.txt
[root@vm20 gittest]# cat a.txt
wednesday
場景2:源文件添加了一行thursday,并且add到了stage(前提:之前提交過此文件)
[root@vm20 gittest]# cat a.txt
wednesday
thursday
[root@vm20 gittest]# git add a.txt
[root@vm20 gittest]# git status

位于分支 master

要提交的變更:

(使用 "git reset HEAD <file>..." 撤出暫存區)

#

修改: a.txt

#
[root@vm20 gittest]# git reset HEAD a.txt
重置后撤出暫存區的變更:
M a.txt
[root@vm20 gittest]# cat a.txt
wednesday
thursday
[root@vm20 gittest]# git checkout -- a.txt
[root@vm20 gittest]# cat a.txt
wednesday



版本回退
場景3:已經提交到版本庫
13/28
查看現在的版本:
[root@ansible gittest]# git log
commit 898a61cb50da77daeda51453bef38c98fecd46a0
Author: wing <wing@wing.com>
Date: Sun Feb 25 18:04:27 2018 +0800
 test1
commit d75411fb17e661cefc1900a09c8a784e8aa0d79a
Author: wing <wing@wing.com>
Date: Sun Feb 25 17:56:45 2018 +0800
 test1
版本回退(切換):
在Git中,上一個版本就HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數
不過來,所以寫成HEAD~100
回到上一個版本:
[root@vm20 gittest]# git reset --hard HEAD^
HEAD 現在位于 83f6e8d Signed-off-by: tom@up.com <tom>
回到指定的版本(根據版本號): 
[root@vm20 gittest]#git reset --hard 6fe5b9a2 

消失的ID號:
回到早期的版本后再查看git log會發現最近的版本消失,可以使用reflog查看消失的版本ID,用于回退到消
失的版本
[root@vm20 gittest]# git reflog 
32c31f5 HEAD@{0}: reset: moving to 32c31f54c1
6fe5b9a HEAD@{1}: reset: moving to 6fe5b9a2
928ab9e HEAD@{2}: reset: moving to HEAD^^
83f6e8d HEAD@{3}: reset: moving to HEAD^
6fe5b9a HEAD@{5}: commit: 這個能寫中文
83f6e8d HEAD@{6}: commit: Signed-off-by: tom@up.com <tom>
32c31f5 HEAD@{7}: commit: add a line monday
928ab9e HEAD@{8}: commit (amend): this is a new file test
bee2ba0 HEAD@{9}: commit: this is a new file test
c8e6b87 HEAD@{10}: commit: 添了兩個
fbecfa3 HEAD@{11}: commit: add haha
7e99d94 HEAD@{12}: commit: 添加hello一行
addd750 HEAD@{13}: commit (initial): test
Git的版本回退速度非常快,因為Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅
是把HEAD從指向
append GPL:
14/28
git-head
改為指向add distributed:
git-head-move
然后順便把工作區的文件更新了。所以你讓HEAD指向哪個版本號,你就把當前版本定位在哪。 
刪除文件
刪除文件:
從工作區刪除a.txt,并且從版本庫一起刪除
[root@vm20 gittest]# rm -rf a.txt
[root@vm20 gittest]# git status
# 位于分支 master
# 尚未暫存以備提交的變更:
# (使用 "git add/rm <file>..." 更新要提交的內容)
# (使用 "git checkout -- <file>..." 丟棄工作區的改動)
#
# 刪除: a.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@vm20 gittest]# git rm a.txt
rm 'a.txt'
[root@vm20 gittest]# git commit -m "刪除文件a.txt"
[master 4bb90a4] 刪除文件a.txt
 1 file changed, 4 deletions(-)
 delete mode 100644 a.txt
[root@vm20 gittest]# git status
# 位于分支 master
無文件要提交,干凈的工作區
刪除了文件readme.txt之后又后悔了,恢復回來
[root@vm20 gittest]# ls
readme.txt
[root@vm20 gittest]# rm -rf readme.txt 
[root@vm20 gittest]# git checkout -- readme.txt
[root@vm20 gittest]# ls
readme.txt
15/28
Git遠程倉庫
Git遠程倉庫
Git遠程倉庫實際就是保存在服務器上的git倉庫文件
http協議:只支持下載,不支持上傳
ssh協議:支持上傳和下載,采用ssh認證
git協議:支持上傳下載,效率高
Git基礎 Git安裝完成之后,需要進行一些基本信息設置
 1、設置用戶名git config --global user.name "flyer“設置用戶郵箱
 2、git config --global user.email flyer@qq.com
 3、查看設置git config --list
初始化一個新的git倉庫
 創建一個文件夾(或使用已有文件夾)mkdir /flyer在文件夾內初始化git,創建git倉庫cd /flyergit initls -
a 發現多了一個.git目錄,即初始化成功

Git checkout取所需的版本
git log 查看版本日志,復制其中的commit的MD5值的左邊6個字符
git checkout 粘貼第1版本的commit的MD5值c
at hosts 發現內容為第1個版本的
git log 查看當前狀態以前的的日志
git reflog 查看參考日志(即所有日志)
cat .git/logs/HEAD 查看所有日志
git checkout 用第2版的commit的MD5值cat hosts
 git的本地使用
mkdir -pv /jim ; cd /jim
git init
cp -av /etc/host* /jim/
git status
git add *
git status
git tag v001
git commit -m "desc:host files v1." 
git log 或 git reflog
rm -rfv hosts*
git status
git commit -a -m "desc:host files v2." 
cp -av /etc/{passwd,group} /jim/
git add *
git commit -m "desc:add passwd group v3." 
git log 請復制v1版的commit值的前6個字符
 ls
git checkout 請粘貼v1版的commit值的前6個字符
Git刪除文件
1、本地刪除文件rm README
2、從git中刪除文件 文件依然記錄在git倉庫歷史中git rm README
16/28
3、提交操作git commit -m "delete README"
測試:cd /mydocgit statusrm hostsgit rm hostsgit commit -m 'del hosts'git status git 
log 查看當前日志; git reflog 查看所有日志
碼云平臺使用
在linux或windows系統中安裝git軟件注冊“碼云”平臺賬號。官網:http://git.oschina.net/登錄github賬
號:在“碼云”平臺創建網絡倉庫(也稱為項目)
cd /opt
git clone https://gitee.com/rshare/jin0312.git
ls 
cd jin0312
ls -a
cp -v /etc/host* ./
git status
git add *
git commit -m ‘host* file v1.‘
git status
git log
git push輸入碼云平臺的用戶賬號 rshare輸入密碼 ****自動上傳數據到碼云平臺的倉庫中
17/28
使用“碼云“github”平臺
安裝git軟件注冊“碼云”平臺賬號。
官網:http://git.oschina.net/登錄github賬號:在“碼云”平臺創建網絡倉庫(也稱為項目)Linux創建ssh
密鑰,并復制公鑰到“碼云”平臺個人賬號中。(僅用于push更新網絡倉庫數據時驗證身份)測試ssh身份驗證
是否成功同步github倉庫數據到本地: 
git clone git@git.oschina.net:rshare/conf.git
用git命令添加add、提交commit文件
用git push origin master上傳更新網絡github數據在“碼云”平臺查看是否有新數據用git刪除文件
實例:rshare個人github同步數據實戰。
git環境準備:yum install -y git
git config --help
git config --global user.name "sky" //用戶信息
git config --global user.mail "sky@qq.com" 
//用戶郵箱第1步,登錄github:
1、注冊Github賬號,網站:https://github.com 我的賬號:rshare 密碼:pass000
2、Linux創建SSH密鑰:
方法一:非交互式生成密鑰:ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -C "12700696@qq.com" cat 
~/.ssh/id_rsa.pub //提交密鑰,復制里面的密鑰(第3步要粘貼)說明:ssh-keygen是ssh密鑰生成器,-t指
定算法為rsa,-N指定密碼為空,-f指定私鑰位置,-C指定注釋信息(不指定則為主機名)。
3、將公鑰加入到Github賬戶信息Account Settings->SSH Key方法:登錄到github網頁中登陸自己的賬
號,然后再account setting中,找到SSH KEY講復制的密鑰加入(需要再次輸入github的密碼)
4、測試驗證是否成功。ssh -T git@github.com 提示successfully說明成功Hi someone! You've 
successfully authenticated, but GitHub does not provide shell access. 
 ##同步github到本地
 1、復制項目到本地:mkdir /testcd /testgit clone git@github.com:rshare/mydocker.git ##以SSH方
式克隆到本地,可以讀寫 git clone https://github.com/rshare/docker-installer.git ##以https方式克隆
到本地,可以讀寫 ls 查看文件列表
 2、創建新文件,并上傳到github中。
 cd /test/mydocker
 ls -a
 git remote
 cp -v /etc/{hosts,group,passwd} ./
 git add hosts group passwd
 git status
 git commit -m '3files'
 git push -u origin master
驗證:在github個人網站的mydocker倉庫中查看是否多了三個文件(hosts,group,passwd)。git其他命
令:git branch #查看分支(即目錄結構) 
 3、刪除遠程倉庫中的文件。cd /test/mydocker
 ls -a
 git rm --cached hosts group passwd #刪除緩存數據,并不刪除本地文件
 git status
 git commit -m "hehe"
 git push origin 驗證:在github個人網站的mydocker倉庫中查看是否少了三個文件
(hosts,group,passwd)。
18/28
在同步過來的sample倉庫執行
cd
git clone git@192.168.10.1:/srv/sample.git
ls
cd sample
mkdir conf
cp -v /etc/*.conf conf/
git status
git add conf
git commit -m 'conf bak'
git remote -v
git branch
git push origin master
驗證數據:
mkdir /a
cd /a
git clone git@192.168.10.1:/srv/sample.git
ls 發現有sample目錄說明數據同步成功
cd sample
ls -R ./ 發現有conf目錄,說明git服務器上的數據已經更新了。
github數據驗證
驗證數據:
mkdir /a
cd /a
19/28
git clone git@192.168.10.1:/srv/sample.git
ls 發現有sample目錄說明數據同步成功
cd sample
ls -R ./ 發現有conf目錄,說明git服務器上的數據已經更新了。
下面開始實戰。
首先,我們創建dev分支,然后切換到dev分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b參數表示創建并切換,相當于以下兩條命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后,用git branch命令查看當前分支:
$ git branch
* dev 
master
然后提交:
$ git add readme.txt 
$ git commit -m "branch test"[dev fec145a] branch test 
1 file changed, 1 insertion(+)
現在,dev分支的工作完成,我們就可以切換回master分支:
$ git checkout master
Switched to branch 'master'
切換回master分支后,再查看一個readme.txt文件,剛才添加的內容不見了!因為那個提交是在dev分支
上,而master分支此刻的提交點并沒有變:
現在,我們把dev分支的工作成果合并到master分支上:
$ git merge dev
Updating d17efd8..fec145a
Fast-forward 
readme.txt | 1 + 
1 file changed, 1 insertion(+)
git merge命令用于合并指定分支到當前分支。合并后,再查看readme.txt的內容,就可以看到,和dev分
支的最新提交是完全一樣的。
注意到上面的Fast-forward信息,Git告訴我們,這次合并是“快進模式”,也就是直接把master指向dev的當
前提交,所以合并速度非常快。
當然,也不是每次合并都能Fast-forward,我們后面會講其他方式的合并。
20/28
合并完成后,就可以放心地刪除dev分支了:
$ git branch -d dev
Deleted branch dev (was fec145a).
刪除后,查看branch,就只剩下master分支了:
$ git branch
* master
添加遠程倉庫
現在的情景是,你已經在本地創建了一個Git倉庫后,又想在GitHub創建一個Git倉庫,并且讓這兩個倉庫進
行遠程同步,這樣,GitHub上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協作,真是一舉多
得。
首先,登陸GitHub,然后,在右上角找到“Create a new repo”按鈕,創建一個新的倉庫:
在Repository name填入learngit,其他保持默認設置,點擊“Create repository”按鈕,就成功地創建了一個
新的Git倉庫:
21/28
目前,在GitHub上的這個learngit倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可
以把一個已有的本地倉庫與之關聯,然后,把本地倉庫的內容推送到GitHub倉庫。
現在,在本地的gittest倉庫下運行命令:換掉用戶名
[root@ansible gittest]# git remote add origin https://github.com/yanqiang20172017/test1.git
origin 遠程庫的名字,是Git默認的叫法,也可以改成別的
下一步,就可以把本地庫的所有內容推送到遠程庫上:
[root@ansible gittest]# git push -u origin master
Username for 'https://github.com': yanqiang20172017
Password for 'https://yanqiang20172017@github.com': 
Counting objects: 3, done.
Writing objects: 100% (3/3), 202 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/yanqiang20172017/test1.git
 * [new branch] master -> master
分支 master 設置為跟蹤來自 origin 的遠程分支 master。
把本地庫的內容推送到遠程,用git push命令,實際上是把當前分支master推送到遠程。
-u 我們第一次推送master分支時,Git不但會把本地的master分支內容推送的遠程新的master分支,還會
把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。
查看遠程add的庫:
[root@ansible gittest]# git remote -v
刪除遠程add:
[root@ansible gittest]# git remote remove haha
推送成功后,可以立刻在GitHub頁面中看到遠程庫的內容已經和本地一模一樣:
從現在起,只要本地作了提交,就可以通過命令:
# git push origin master
22/28
把本地master分支的最新修改推送至GitHub
部署遠程倉庫
遠程倉庫實際上和本地倉庫沒啥不同,純粹為了7x24小時開機并交換大家的修改。
GitHub就是一個免費托管開源代碼的遠程倉庫。但是對于某些視源代碼如生命的商業公司來說,既不想公
開源代碼,又舍不得給GitHub交保護費,那就只能自己搭建一臺Git服務器作為私有倉庫使用。
搭建Git服務器需要準備一臺運行Linux的機器
第一步,安裝git:
#yum install git
第二步,創建一個git用戶,用來運行git服務:
#adduser git
第三步,創建證書登錄:
收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件,把所有公鑰導入到/home/git/.ssh/
authorized_keys文件里,一行一個。
第四步,初始化Git倉庫:
選定一個目錄作為Git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:
# git init --bare sample.git
Git就會創建一個裸倉庫,裸倉庫沒有工作區,因為服務器上的Git倉庫純粹是為了共享,所以不讓用戶直接
登錄到服務器上去改工作區,并且服務器上的Git倉庫通常都以.git結尾。然后,把owner改為git:
# chown -R git:git sample.git
第五步,禁用shell登錄:
出于安全考慮,第二步創建的git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成。找到類似
下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改為:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
這樣,git用戶可以正常通過ssh使用git,但無法登錄shell,因為我們為git用戶指定的git-shell每次一登錄就
自動退出。
第六步,克隆遠程倉庫:
現在,可以通過git clone命令克隆遠程倉庫了,在各自的電腦上運行:
# git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
剩下的推送就簡單了。
[root@tomcat gittest4]# git push -u origin master
tesla@192.168.245.3's password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To tesla@192.168.245.3:/gittest3/teslaProject.git
 * [new branch] master -> master
23/28
分支 master 設置為跟蹤來自 origin 的遠程分支 master。
Git分支管理
git分支管理
在版本回退里,你已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到
目前,只有一條時間線,在Git里,這個分支叫主分支(即master)。HEAD嚴格來說不是指向提交,而是指
向master,master才是指向提交的,所以,HEAD指向的就是當前分支。
git branch命令會列出所有分支,當前分支前面會標一個*號。
查看分支:git branch
說明:默認主分支為master
創建分支:git branch 分支名
取出分支版本:git chkeckout -b 分支名
 說明:git checkout -b表示創建并切換到分支,相當于以下兩條命令
git branch dev
git checkout dev
分支管理實例
cd /a/test
git branch 查看分支
git branch dev 創建名稱為dev的分支
git checkout dev 切換到dev分支
cp /etc/yum.conf ./
git add yum.conf
git commit -m 'yum.conf bak‘
git branch -a
git push origin dev 上傳更新分支
驗證:在碼云平臺查看test倉庫中的master節點和dev分支的區別。
分支管理實例(合并分支)
 git branch
git checkout master
git merge dev 合并dev分支到master主分支中
git push origin master
git push origin :dev 刪除遠程的dev分支
驗證:在碼云平臺查看test倉庫中的master節點。
刪除本地git倉庫中的dev分支:
git branch -d dev
git合并分支
合并完成后,刪除dev分支
git branch -d dev
git branch
分支
 分支是用來將特性開發絕緣開來的。在你創建倉庫的時候,master 是“默認的”。在其他分支上進行開
發,完成后再將它們合并到主分支上。 
24/28

創建一個叫做“feature_x”的分支,并切換過去:
#git checkout -b feature_x
查看分支:
[root@ansible gittest]# git branch -a
* feature_x //帶*號的代表你當前工作目錄所處的分支
 master
 remotes/origin/master
切換回主分支:
# git checkout master
再把新建的分支刪掉:
# git branch -d feature_x
除非你將分支推送到遠端倉庫,不然該分支就是 不為他人所見的:
# git push origin <branch> 

更新與合并
要更新你的本地倉庫至最新改動,執行:
#git pull
以在你的工作目錄中 獲取(fetch) 并 合并(merge) 遠端的改動。
要合并其他分支到你的當前分支(例如 master),執行:
git merge <branch>
兩種情況下,git 都會嘗試去自動合并改動。不幸的是,自動合并并非次次都能成功,并可能導致 沖突
(conflicts)。 這時候就需要你修改這些文件來人肉合并這些 沖突(conflicts) 了。改完之后,
你需要執行如下命令以將它們標記為合并成功:
git add <filename>
在合并改動之前,也可以使用如下命令查看:
git diff <source_branch> <target_branch> 

標簽
在軟件發布時創建標簽,是被推薦的。這是個舊有概念,在 SVN 中也有。
25/28
創建一個叫做 1.0.0 的標簽:
# git tag 1.0.0 1b2e1d63ff
1b2e1d63ff 是你想要標記的提交 ID 的前 10 位字符。使用如下命令獲取提交 ID:
# git log
顯示的標簽按字母順序排列,所以標簽的先后并不表示重要程度的輕重。
可以用特定的搜索模式列出符合條件的標簽。在 Git 自身項目倉庫中,有著超過 240 個標簽,如果你只對
1.4.2 系列的版本感興趣,可以運行下面的命令:
# git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4
含附注的標簽
創建一個含附注類型的標簽非常簡單,用 -a (譯注:取 annotated 的首字母)指定標簽名字即可:
 -m 選項則指定了對應的標簽說明,Git 會將此說明一同保存在標簽對象中。如果沒有給出該選項,Git 會
啟動文本編輯軟件供你輸入標簽說明。
# git tag -a v1.4 -m 'my version 1.4'
# git tag
v0.1
v1.3
v1.4
[root@ansible gittest]# git show 1.0.0
commit 5b83380e818f44c850dc4fe96a29148744903ff2
Author: wing <wing@wing.com>
Date: Sun Feb 25 23:09:09 2018 +0800
 my version 1.4
diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..ce01362
--- /dev/null
+++ b/a.txt
@@ -0,0 +1 @@
+hello
分享標簽
默認情況下,git push 并不會把標簽傳送到遠端服務器上,只有通過顯式命令才能分享標簽到遠端倉庫。
其命令格式如同推送分支,運行 git push origin [tagname] 即可:
# git push origin v1.5
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 4.56 KiB, done.
Total 44 (delta 18), reused 8 (delta 1)
To git@github.com:schacon/simplegit.git
* [new tag] v1.5 -> v1.5
如果要一次推送所有本地新增的標簽上去,可以使用 --tags 選項:
# git push origin --tags
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 4.56 KiB, done.
26/28
Total 44 (delta 18), reused 8 (delta 1)
To git@github.com:schacon/simplegit.git
 * [new tag] v0.1 -> v0.1
 * [new tag] v1.2 -> v1.2
 * [new tag] v1.4 -> v1.4
 * [new tag] v1.4-lw -> v1.4-lw
 * [new tag] v1.5 -> v1.5
現在,其他人克隆共享倉庫或拉取數據同步后,也會看到這些標簽。
Git練習
測試
cd /mydoc
git init
git status
cp /etc/hosts ./cp 
/etc/group ./git status
git add hosts group
git status
git commit -m ‘備注’
git log 查git日志
Git 更新文件,提交新版本
測試:cd /mydoc
git status
echo 127.0.0.5 ddd >> hosts
echo 127.0.0.6 kk >> hosts
git status
git add hosts
git commit -m 'hosts change1'
git status
git log
創建/mygit目錄,并對此目錄用git進行版本控制。復制/etc/yum.conf和/etc/sysctl.conf文件到/mygit目
錄。用git status查狀態,然后提交當前的版本,-m 的備注信息為’my conf file v1.’將lsblk、free命令的
結果覆蓋寫入到/mygit/sysctl.conf文件中。再次提交這個版本, -m 的備注信息為’my conf file v2.’用
git status查狀態。查看當前的/mygit/sysctl.conf文件內容,然后checkout取出v1這個版本,再看/
mygit/sysctl.conf文件內容。
mkdir /mygit
cd /mygit
git init
cp -v /etc/yum.conf /etc/sysctl.conf ./
git status
git add *
git commit -m 'my conf file v1. '
git statuslsblk > sysctl.conf
free >> sysctl.conf
git status
27/28
git commit -a -m 'my conf file v2. '
git status
git log
cat sysctl.conf
git log
git checkout 
Git總結
git小結
git版本控制系統
git安裝、全局環境配置
rpm -q git
yum install -y git
git config --global user.email "tom@qq.com"
git config --global user.name "tom“
git config --list
git config push.default simple
Git checkout取所需的版本
git log 查看版本日志,復制其中的commit的MD5值的左邊6個字符
git checkout 粘貼第1版本的commit的MD5值c
at hosts 發現內容為第1個版本的
git log 查看當前狀態以前的的日志
git reflog 查看參考日志(即所有日志)
cat .git/logs/HEAD 查看所有日志
git checkout 用第2版的commit的MD5值cat hosts
Git刪除文件
1、本地刪除文件rm README
2、從git中刪除文件 文件依然記錄在git倉庫歷史中git rm README
3、提交操作git commit -m "delete README"
測試:cd /mydoc
git status
rm hosts
git rm hosts
git commit -m 'del hosts'
git status 
git log 查看當前日志; 
git reflog 查看所有日志
git分支管理小結
Git鼓勵大量使用分支:
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>
創建+切換分支:git checkout -b <name>
合并某分支到當前分支:git merge <name>
28/28
刪除分支:git branch -d <name>
刪除遠程分支:git push origin :分支名
向AI問一下細節

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

AI

张家川| 平乡县| 泽州县| 东山县| 石城县| 克东县| 原平市| 资讯| 滁州市| 凤庆县| 连城县| 和田县| 泰来县| 京山县| 南郑县| 永年县| 鹤壁市| 永川市| 墨竹工卡县| 分宜县| 义马市| 泰宁县| 乐陵市| 岳阳市| 恩平市| 松阳县| 鸡泽县| 岐山县| 保康县| 饶河县| 潞西市| 仙桃市| 开原市| 西昌市| 确山县| 固阳县| 遵义县| 富锦市| 郁南县| 阿克苏市| 新建县|