關於GIT GIT 是一個分散式版本控制軟體,最初由林納斯·托瓦茲(Linus Torvalds)創作,於2005年以GPL發佈。最初目的是為更好地管理Linux內核開發而設計。是目前世界上最先進的分散式版本控制系統. 什麼是版本控制 版本控制(Revision control)是維護工程藍圖的標準 ...
關於GIT
GIT 是一個分散式版本控制軟體,最初由林納斯·托瓦茲(Linus Torvalds)創作,於2005年以GPL發佈。最初目的是為更好地管理Linux內核開發而設計。是目前世界上最先進的分散式版本控制系統.
什麼是版本控制
版本控制(Revision control)是維護工程藍圖的標準作法,能追蹤工程藍圖從誕生一直到定案的過程。此外,版本控制也是一種軟體工程技巧,藉此能在軟體開發的過程中,確保由不同人所編輯的同一代碼文件案都得到同步。
集中式和分散式
再說分散式是什麼前, 我們前看一下什麼是集中式.
集中式
集中式版本控制系統,版本庫是集中存放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以要先從中央伺服器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給中央伺服器。中央伺服器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然後回到家自己改,改完了,再放回圖書館。
集中式版本控制系統最大的毛病就是必須聯網才能工作,如果在區域網內還好,帶寬夠大,速度夠快,可如果在互聯網上,遇到網速慢的話,可能提交一個10M的文件就需要5分鐘,這還不得把人給憋死啊。
分散式
那分散式版本控制系統與集中式版本控制系統有何不同呢?首先,分散式版本控制系統根本沒有“中央伺服器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因為版本庫就在你自己的電腦上。既然每個人電腦上都有一個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。
和集中式版本控制系統相比,分散式版本控制系統的安全性要高很多,因為每個人電腦里都有完整的版本庫,某一個人的電腦壞掉了不要緊,隨便從其他人那裡複製一個就可以了。而集中式版本控制系統的中央伺服器要是出了問題,所有人都沒法幹活了。
在實際使用分散式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們倆不在一個區域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。因此,分散式版本控制系統通常也有一臺充當“中央伺服器”的電腦,但這個伺服器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣幹活,只是交換修改不方便而已。
安裝GIT
sudo apt-get install git
創建版本庫
第一步, 先要創建一個目錄, 這個目錄就是用來存放倉庫的.
$ mkdir git 創建一個名叫git的目錄
$ cd git
第二步, 使用git init命令, 將當前目錄創建成git倉庫.
$ git init
馬上就把倉庫創建成功了, 並提示這是一個空倉庫.
$ ls -al al表示列出所有的文件,包括隱藏文件,就是文件前面第一個字元為.的文件
總用量 12
drwxrwxr-x 3 linux linux 4096 8月 10 18:14 .
drwxr-xr-x 43 linux linux 4096 8月 10 18:00 ..
drwxrwxr-x 8 linux linux 4096 8月 10 18:00 .git .git為隱藏文件夾, 表示創建成功
配置用戶信息
配置用戶名, 這個用戶名是你的提交patch的名子, 最好寫真的名了, 不是網名, 如果有一天你成為名人了,那這個東西會一直印著你的足跡.
$ git config --global user.name "你的名字"
配置用戶郵箱, 這個郵箱最好寫你最常用的郵箱, 說不定會有人給你寫郵件的, 這個是可能來自世界的任何角落, 可能是任何膚色和眼睛.
$ git config --global user.email "你的郵箱"
配置編輯提交信息的編輯器, 我們熟悉的編輯器是vim. 使用這個去編輯提交信息, 最好把每一次提交信息填寫寫的全面, 不是為了給別人看, 萬一那天自己想回顧一下. 也需要詳細的信息.
$ git config --global core.editor vim
Git用戶名郵箱的全局配置和單倉庫配置
Git可以配置了一個全局的用戶名和郵箱:
$ git config --global user.name "xxxxx"
$ git config --global user.email "[email protected]"
$ git config --list
但是你的項目可能是公司自己搭建的gitlab進行管理的,那就需要單獨針對這個項目單獨配置用戶名和郵箱。
在項目根目錄下進行單獨配置:
$ git config user.name "gitlab's Name"
$ git config user.email "[email protected]"
$ git config --list
git config --list查看當前配置, 在當前項目下麵查看的配置是全局配置+當前項目的配置, 使用的時候會優先使用當前項目的配置
增加文件
當前目錄里沒有文件, 那麼我們先創建一個文件README.
$ touch README
編輯這個文件, 寫一點東西在裡面.
$ vim README
先用查看當前狀態的命令, 查看一下現在目錄下文件的狀態.
$ git status
位於分支 master
未跟蹤的文件:
(使用 "git add <文件>..." 以包含要提交的內容)
README
提交為空,但是存在尚未跟蹤的文件(使用 "git add" 建立跟蹤)
把文件加到倉庫中去, 只有加到倉庫中了, 才可能看一下文件的變化.
$ git add README
現在使用查看狀態的命令, 看一下目錄下文件的狀態.
$ git status
位於分支 master
要提交的變更:
(使用 "git reset HEAD <文件>..." 以取消暫存)
新文件: README
提交
$ git commit
現在使用查看狀態的命令, 看一下目錄下文件的狀態.
位於分支 master
無文件要提交,乾凈的工作區
查看提交信息
$ git log
commit 50f37204c0a3f056f799683415f577a3a6bfb11b id
Author: klous <klous530.outlook.com> 我們的用戶名,郵箱
Date: Thu Aug 10 19:10:13 2017 +0800
Add file README
新文件: README
刪除文件恢復
有時候, 我們不小心把文件給刪除了. 想恢復這個文件時, 需要用到下麵的命令.
我現在把倉庫里的README這個文件給刪除了. 然後再使用ls命令查看文件, 看看這個文件是否還存在.
$ rm README
$ ls
$ ls -al
文件已經被刪除了, 這是我們使用linux基本命令去查看文件是不是還存在這個目錄中.現在我們使用git去查看一下現在倉庫是什麼狀態
$ git status
位於分支 master
尚未暫存以備提交的變更:
(使用 "git add/rm <文件>..." 更新要提交的內容)
(使用 "git checkout -- <文件>..." 丟棄工作區的改動)
刪除: README
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
發現這個文件是誤刪了, 我們想把它恢復回來, 現在我們有辦法嗎? 如果沒有將這個文件提交到倉庫里, 我們是沒有辦法將它恢復的.
$ git checkout README
然後我們再用ls查看一下文件是否存在.
$ ls -al ==> ll
總用量 16
drwxrwxr-x 3 linux linux 4096 8月 10 19:20 ./
drwxr-xr-x 44 linux linux 4096 8月 10 19:10 ../
-rw-rw-r-- 1 linux linux 9 8月 10 19:20 README
drwxrwxr-x 8 linux linux 4096 8月 10 19:20 .git/
再查看git倉庫狀態
$ git status
位於分支 master
無文件要提交,乾凈的工作區
版本回退
什麼叫版本, 一次提交就相當於一個版本. 如果更準確的說是提交的回退. 每一次提交都會將修改的狀態提交到倉庫中保存著, 這些信息都保存那裡呢?都保存在.git的目錄下.
如果想回退到上次提交的版本, 那麼需要使用git reset命令.
$ git reset --hard commit ID
註意: 使用這個命令後,再使用git log命令不會查看到所有log的相關信息, 那麼我們沒有辦法獲取到後一個提交的CommitID.
在這裡我們需要使用git reflog命令查看後一次提交的CommitID, 如果已經有了後一次提交的CommitID, 那麼我們需要使用git reset命令恢復到前面提交版本.
$ git reflog
版本之間對比
$ git diff commitID1 commitID2