GIT 的安裝和基本使用
GIT版本控制
一、版本控制的歷史及作用
版本控制的作用:
對於IT這個行業來說,經常會遇到一個問題:代碼分散的拷貝在各個分區之中,不知道哪個代碼文件是最
新的,哪個代碼文件是最優的。失敗的復制、替換經常會導致原來尚能運行的代碼遭到破壞。於是,針對
以上的問題就產生了一種解決方案,這種方案我們成為版本控制。版本控制系統是能夠隨著時間的推進記
錄一系列文件的變化以便於你以後想要的退回到某個版本的系統。
版本控制的歷史:
1)CVS:最早期的版本控制工具稱為CVS,於1985年由荷蘭阿姆斯特丹VU大學的Dick Grune教授完成開
發,奠定了後續版本控制軟件的模型基礎。CVS采用C/S模型,版本庫位於服務端,實際上存儲的文件可以
效。然而CVS也存在如下缺點:1.效率不高,服務端文件越多,處理速度越慢。2.合並困難重重,經常會遇
到嚴重沖突。3.不能直接對文件和目錄的重命名進行版本控制,會破壞數據。
2)SVN:SVN全名為subversion,由collabNet公司於2000年開發,目的是為了彌補CVS的不足,創建一
個性能更加強大的版本控制系統來取代CVS。到了2001年的時候,SVN已經可以用於市場環境。SVN擁有
以下幾個特征:1.輕量級拷貝。2.以授權文件的方式來實現版本庫的授權。2.在工作區的隱藏目錄下會保存
一份冗余的原始拷貝。然而,SVB比起CVS在本質上並沒有突破。到2009年年底,SVN被交由APACHE社區
3)GIT:GIT由linux之父linus於2005年開發,在結構上比起SVN和CVS有很大的提升。可以說GIT是世界上
目前最優秀的版本控制系統之一。GIT的每個功能都作為一條獨立的命令,導致git龐大的命令集,但這並不
妨礙各大程序人員對於GIT的喜愛,原因就在於它一個分布式的版本控制系統。此外:GIT雖然是基於linux
操作系統開發的,但目前已經可以跨平臺運行在多種操作系統之上,包括linux,MAC OS X,Windows
等。
版本控制系統的分類:
版本控制主要分為三大類:本地版本控制系統,集中式版本控制系統和分布式版本控制系統。
本地版本控制:將文件的各個版本以一定的數據格式存儲在本地的磁盤,這種方式在一定的程度上解決了
集中式版本控制:比起本地版本控制多了一個中央服務器,各個版本的數據存儲在中央服務器,管理員可
以控制開發人員的權限,而開發人員也可以從中央服務器拉取數據。集中式版本控制解決了團隊協作問
題,但缺點是所有數據存儲在中央服務器,服務器一旦宕機,會造成不可估量的損失。SVN和CVS都是集中
式版本控制。
分布式版本控制,系統保存的不是文件變化的差兩,而是文件的快照。分布式版本控制系統是分布式的,
當你從中央服務器拷貝下來代碼時,你拷貝的是一個完整的版本庫,包括歷史紀錄,提交記錄等,即使某
一臺機器宕機,也能夠找到文件的完整備份。GIT就是分布式版本控制。
二、git 安裝
[root@Ansible ~]#yum -y install git
[root@Ansible ~]# git --version
git version 1.7.1
[root@Ansible ~]# cp /usr/share/doc/git-1.7.1/contrib/completion/git-completion.bash /etc/bash_completion.d/
[root@Ansible ~]# source /etc/bash_completion.d/git-completion.bash
添加用戶和郵箱
[root@Ansible ~]# git config --global user.name "carol"
[root@Ansible ~]# git config --global user.email [email protected]
新建存儲目錄(工作平臺)
[root@Ansible /]# mkdir /myproject
初始化工作平臺
[root@Ansible myproject]# git init
Initialized empty Git repository in /myproject/.git/
第一次提交文件
1)先在工作區生成一個文件
[root@Ansible myproject]# echo hello >welcome.txt
[root@Ansible myproject]# ls
welcome.txt
[root@Ansible myproject]# cat welcome.txt
hello
2)為了將這個新建立的文件添加到版本庫,需要執行以下指令
[root@Ansible myproject]# git add welcome.txt
[root@Ansible myproject]# git commit -m "frist"
[master (root-commit) ff38d0d] frist
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 welcome.txt
1)git diff:用來顯示工作區和暫存區文件的差異
[root@Ansible myproject]# echo test >>welcome.txt
[root@Ansible myproject]# ls
welcome.txt
[root@Ansible myproject]# cat welcome.txt
hello
test
[root@Ansible myproject]# git diff welcome.txt
diff --git a/welcome.txt b/welcome.txt
index ce01362..b2b9cc9 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1 +1,2 @@
hello
+test
2)git status:用來查看改過的內容
[root@Ansible myproject]# git status
#on branch master
#Changed but not updated:
#(use "git add <file>..." to update what will be committed)
#(use "git checkout -- <file>..." to discard changes in working directory)
#modified: welcome.txt
#no changes added to commit (use "git add" and/or "git commit -a")
3)git log: 用來查看歷史提交的日誌
[root@Ansible myproject]# git log
commit ff38d0d40f471d840c49d9a1cba007763e5f6efa
Author: carol <[email protected]>
Date: Mon Mar 26 13:51:50 2018 +0800
frist
4)git reset 用來做回滾
恢復工作區的文件到上一個提交的版本:
[root@Ansible myproject]# echo hello daivd >> welcome.txt
[root@Ansible myproject]# cat welcome.txt
hello
testok
hello daivd
[root@Ansible myproject]# git add welcome.txt
[root@Ansible myproject]# git commit -m "six"
[master 8568164] six
1 files changed, 1 insertions(+), 0 deletions(-)
[root@Ansible myproject]# git log --graph --online
fatal: unrecognized argument: --online
[root@Ansible myproject]# git log --graph --oneline
- 8568164 six
- e9c66fd third
- ff38d0d frist
[root@Ansible myproject]# git reset --hard ff38d0d
HEAD is now at ff38d0d frist
[root@Ansible myproject]# ls
welcome.txt
[root@Ansible myproject]# cat welcome.txt
hello
GIT 的安裝和基本使用