1、版本控制
什麼是版本控制 版本迭代,新的版本!
版本控制(Revision control)是一種在開發的過程中用於管理我們對檔案、目錄或工程等內容的修改歷史,方便檢視更改歷史記錄,備份以便恢復以前的版本的軟體工程技術。
- 實現跨區域多人協同開發
- 追蹤和記載一個或者多個檔案的歷史記錄
- 組織和保護你的原始碼和文件
- 統計工作量
- 並行開發、提高開發效率
- 追蹤記錄整個軟體的開發過程
- 減輕開發人員的負擔,節省時間,同時降低人為錯誤
簡單說就是用於管理多人協同開發專案的技術。
沒有進行版本控制或者版本控制本身缺乏正確的流程管理,在軟體開發過程中將會引入很多問題,如軟體程式碼的一致性、軟體內容的冗餘、軟體過程的事務性、軟體開發過程中的併發性、軟體原始碼的安全性,以及軟體的整合等問題。
Git是目前世界上最先進的分散式版本控制系統。
2、Git環境配置
先解除安裝
- 清除環境變數,環境變數只是為了全域性使用而已!
- 解除安裝
下載對應的版本安裝即可!
啟動Git
安裝成功後在開始選單中會有Git項,選單下有3個程式:任意資料夾下右鍵也可以看到對應的程式!
Git Bash: Unix與Linux風格的命令列,使用最多,推薦最多
Git CMD: Windows風格的命令列
Git GUI: 圖形介面的Git,不建議初學者使用,儘量先熟悉常用命令
基本的Linux命令學習
平時一定要多使用這些基礎的命令
- cd :改變目錄
- cd.. :回退到上一個目錄,直接cd進入預設目錄
- pwd :顯示當前所在的目錄路徑
- ls(II) :都是列出當前目錄中的所有檔案,只不過II列出的內容更為詳細
- touch :新建一個檔案 如 touch index.js 就會在當前目錄下新建一個 index.js 檔案
- rm :刪除一個檔案,rm index.js 就會把 index.js 檔案刪除
- mkdir :新建一個目錄,就是新建一個資料夾
- rm -r :刪除一個資料夾,rm -r src 刪除src目錄
- mv 移動檔案,mv index.html src index.html 是我們要移動的檔案,src是目標資料夾
- reset 重新初始化終端/清屏
- clear 清屏
- history 檢視命令歷史
- help 幫助
- exit 退出
-
表示註釋
Git 配置
所有的配置檔案,其實都儲存在本地
檢視配置git config -l
檢視系統配置git config --system --list
檢視全域性配置git config --global --list
Git相關的配置檔案:
- D:\environment\Git\etc\gitconfig : Git安裝目錄下的 gitconfig --system 系統級
- C:\Users\wangyudong.gitconfig : 只適用於當前登入使用者的配置 --global 全域性
這裡可以直接編輯配置檔案,通過命令設定後會響應到這裡。
設定使用者名稱與郵箱(使用者標識,必要)
當你安裝Git後首先要做的事情是設定你的使用者名稱和email地址。這是非常重要的,因為每次Git提交都會使用該資訊。它被永遠的嵌入到了你的提交中:
git config --global user.name "wydilearn" #名稱
git config --global user.email "406623380@qq.com" #郵箱
3、Git基本理論(核心)
工作區域
Git本地有三個工作區域:工作目錄(Working Directory)、暫存區(Stage/Index)、資源庫(Repository或Git Directory)。如果再加上遠端的git倉庫(Remote Directory)就可以分為四個工作區域。檔案在這四個區域之間的轉換關係如下:
- Workspace:工作區,就是你平時存放專案程式碼的地方
- Index/Stage:暫存區,用於臨時存放你的改動,事實上它只是一個檔案,儲存即將提交到檔案列表資訊
- Repository:倉庫區(或本地倉庫),就是安全存放資料的位置,這裡面有你提交到所有版本的資料。其中HEAD指向最新放入倉庫的版本
- Remote:遠端倉庫,託管程式碼的伺服器,可以簡單地認為是你專案組中的一臺電腦用於遠端資料交換
本地的三個區域確切的說應該是git倉庫中HEAD指向的版本:
- Directory:使用Git管理的一個目錄,也就是倉庫,包含我們的工作空間和Git的管理空間。
- WorkSpace:需要通過Git進行版本控制的目錄和檔案,這些目錄和檔案組成了工作空間。
- .git:存放Git管理資訊的目錄,初始化倉庫的時候自動建立。
- Index/Stage:暫存區,或者叫待提交更新區,再提交進入repo之前,我們可以把所有的更新放在暫存區。
- Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會指示當前的開發分支(branch)。
- Stash:隱藏,是一個工作狀態儲存棧,用於儲存/恢復WorkSpace中的臨時狀態。
工作流程
git的工作流程一般是這樣的:
- 在工作目錄中新增、修改檔案;
- 將需要進行版本管理的檔案放入暫存區域;
- 將暫存區域的檔案提交到git倉庫。
因此,git管理的檔案有三種狀態:已修改(modified),已暫存(staged),已提交(committed)
4、Git專案搭建
建立工作目錄與常用指令
工作目錄(WorkSpace)一般就是你希望Git幫助你管理的資料夾,可以是你專案的目錄,也可以是一個空目錄,建議不要有中文。
日常使用只要記住下圖6個命令:
跟對人,做對事!
本地倉庫搭建
建立本地倉庫的方法有兩種:一種是建立全新的倉庫,另一種是克隆遠端倉庫。
-
建立全新的倉庫,需要用GIT管理的專案的根目錄執行:
# 在當前目錄新建一個Git程式碼庫 $ git init
-
執行後可以看到,僅僅在專案目錄多出了一個.git目錄,關於版本等的所有資訊都在這個目錄裡面。
克隆遠端倉庫
-
另一種方式是克隆遠端目錄,由於是將遠端伺服器上的倉庫完全映象一份至本地!
# 克隆一個專案和它的整個程式碼歷史(版本資訊) $ git clone [url]
-
去gitee或者github上克隆一個測試!
5、GIT檔案操作
檔案4種狀態
版本控制就是對檔案的版本控制,要對檔案進行修改、提交等操作,首先要知道檔案當前在什麼狀態,不然可能會提交了現在還不想提交的檔案,或者要提交的檔案沒提交上。
- Untracked:為跟蹤,此檔案在資料夾中,但並沒有加入到git庫,不參與版本控制,通過
git add
狀態變為Staged
。 - Unmodify:檔案已經入庫,未修改,即版本庫中的檔案快照內容與資料夾中完全一致。這種型別的檔案有兩種去處,如果它被修改,而變為
Modified
。如果使用git rm
移出版本庫,則成為Untracked
檔案。 - Modified:檔案已修改,僅僅是修改,並沒有進行其他的操作。這個檔案也有兩個去處,通過
git add
可進入暫存staged
狀態,使用給git checkout
則丟棄修改過,返回到unmodify
狀態,這個git checkout
即從庫中取出檔案,覆蓋當前修改! - Staged:暫存狀態。執行
git commit
則將修改同步到庫中,這時庫中的檔案和本地檔案又變為一致,檔案為Unmodify
狀態。執行git reset HEAD filename
取消暫存,檔案狀態為Modified
。
檢視檔案狀態
上面說檔案有4種狀態,通過如下命令可以檢視到檔案的狀態:
#檢視指定檔案狀態
git status [filename]
#檢視所有檔案狀態
git status
# git add . 新增所有檔案到暫存區
# git commit -m "訊息內容" 提交暫存區中的內容到本地倉庫 -m 提交資訊
忽略檔案
有些時候我們不想把某些檔案納入版本控制中,比如資料庫檔案,臨時檔案,設計檔案等
在主目錄下簡歷".gitignore"檔案,此檔案有如下規則:
- 忽略檔案中的空行或以#開始的行將會被忽略
- 可以使用Linux萬用字元。例如:星號(*)代表任意多個字元,問好(?)代表一個字元,方括號([abc])代表可選字元範圍,大括號({string1,string2,......})代表可選的字串等
- 如果名稱的最前面有一個感嘆號(!),表示例外規則,將不被忽略
- 如果名稱最前面是一個路徑分隔符(/),表示要忽略的檔案在此目錄下,而子目錄中的檔案不忽略
- 如果名稱的最後面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非檔案(預設檔案或目錄都忽略)
#為註釋
*.txt #忽略所有 .txt結尾的檔案,這樣的話上傳就不會被選中!
!lib.txt #但lib.txt除外
/temp #僅忽略專案根目錄下的TODO檔案,不包括其它目錄temp
build/ #忽略build/目錄下的所有檔案
doc/*.txt #會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
.gitignore
*.class
*.log
*.lock
# Package Files #
*.jar
*.war
*.ear
target/
# idea
.idea/
*.iml
*velocity.log*
### STS ###
.apt_generated
.factorypath
.springBeans
### IntelliJ IDEA ###
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/
bin/
*.log
tmp/
#rebel
*rebel.xml*
6、使用碼雲
詳見SpringCloud文件最後一部分
7、IDEA中整合Git
-
新建專案,繫結git
-
將我們遠端的git檔案目錄拷貝到專案中即可
-
注意觀察idea中的變化
-
-
修改檔案,使用IDEA操作git
- 新增到暫存區
- commit 提交
- push 到遠端倉庫
-
提交測試
這些都是單個人的操作!
8、說明:GIT分支
分支在GIT中相對較難,分支就是科幻電影裡面的平行宇宙,如果兩個平行宇宙互不干擾,那對現在的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合併了,我們就需要處理一些問題了!
git分支中常用指令:
# 列出所有本地分支
git branch
# 列出所有遠端分支
git branch -r
# 新建一個分支,但依然停留在當前分支
git branch [branch-name]
# 新建一個分支,並切換到該分支
git checkout -b [branch]
# 合併指定分支到當前分支
$ git merge [branch]
# 刪除分支
$ git branch -d [branch-name]
# 刪除遠端分支
$ git push orgin --delete [branch-name]
$ git branch -dr [remote/branch]
多個分支如果並行執行,就會導致我們程式碼衝突,也就是同時存在多個版本!
如果同一個檔案在合併分支時都被修改了則會引起衝突:解決的辦法是我們可以修改衝突檔案後重新提交!選擇要保留他的程式碼還是你的程式碼!
master主分支應該非常穩定,用來發布新版本,一般情況下不允許在上面工作,工作一般情況下在新建的dev分支上工作,工作完後,比如要釋出,或者說dev分支程式碼穩定後可以合併到主分支master上來git merge [branch]
。