1. 程式人生 > 實用技巧 >Git 學習

Git 學習

1.版本控制

版本控制是一種在開發過程中用於管理我們對檔案、目錄或工程等內容的修改歷史,方便檢視更改歷史記錄,備份以便恢復以前的版本的工程技術。

  • 實現跨區域多人協同開發

  • 追蹤和記載一個或多個檔案的歷史記錄

  • 組織和保護你的原始碼和文件

  • 統計工作量

  • 追蹤記錄整個軟體的開發過程

  • 減輕開發人員的負擔、節省時間,同時降低人為錯誤

簡單說就是用於管理多人協同開發專案的技術。

常見的版本控制工具

  • Git

  • SVN

  • CVS

  • VSS

  • TFS

版本控制分類

  1. 本地版本控制

  2. 集中版本控制 --SVN

  3. 分散式版本控制 --Git

Git與SVN最主要區別:

SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而工作的時候,用的都是自己的電腦,所以首先要從中央伺服器得到最新的版本,然後工作,完成工作後,需要把自己做完的活推送到中央伺服器。集中式版本控制系統是必須聯網才能工作的,對網路頻寬要求較高。

Git是分散式版本控制系統,沒有中央伺服器,每個人的電腦都是一個完整的版本庫,工作的時候不需要聯網,因為版本都在自己的電腦上。協同的方式是:比如說自己在電腦上修改了檔案A,其他人也在電腦上修改了檔案A,這時,你們兩隻需把各自的修改推送給對方,就可以看到對方的修改了。Git是目前世界上最先進的分散式版本控制系統。

2.Git 下載與安裝

1.官網下載地址:

https://git-scm.com/downloads

2.淘寶映象地址:https://npm.taobao.org/mirrors/git-for-windows/

安裝

直接安裝

啟動Git

安裝成功後在開始選單中會有Git項,選單下有3個程式:任意資料夾下,右鍵也可以看到ui應的程式

Git Bash:Unix與Linux風格的命令列,使用最多

Git CMD:windows風格的命令列

Git GUI:圖形介面的Git

基本的Linux命令:

1)、cd:改變目錄

2)、cd.. 回退到上一個目錄,直接cd進入預設目錄

3)、pwd: 顯示當前所在的目錄路徑

4)、ls(||): 都是列出當前目錄中的所有檔案,只不過||列出的內容更為詳細

5)、touch:新建一個檔案如touch index.js 就會在當前目錄下新建一個index檔案

6)、rm:刪除一個檔案,rm index.js 就會把index檔案刪除

7)、mkdir:新建一個目錄,就是新建一個資料夾

8)、rm-r:刪除一個資料夾,rm-r src刪除src目錄

9)、mv移動檔案,mv index.html src ,index.htm是我們要移動的檔案,src是目標為資料夾,

10)、reset 重新初始化終端/清屏

11)、clear 清屏

12)、history 檢視命令歷史

13)、#表示註釋

3.GIt配置

1.檢視配置

所有的配置檔案都儲存在本地

git config -l 檢視賬戶配置

git config --system --list 檢視系統配置

git config --global --list 檢視當前使用者(global)配置

git相關的配置檔案

1)、Git\etc\gitconfig :Git安裝目錄下的gitconfig --system系統級

2)、C:\Users\Administrator.gitconfig 只適用於當前登入使用者的配置 --global全域性

使用者相關資訊儲存在此檔案中

2.配置使用者資訊(必須配置)

設定name的方式 : git config --global user.name "xx"

設定email的方式:git config --global user.email "[email protected]"

4.Git基本理論(核心)

工作區域

Git本地有三個工作區域:工作目錄(Working Directory)、暫存區(Stage/Index)、資源庫(Repository或Git Directory)。如果在加上遠端的git倉庫(Remote Directory)就可以分為四個工作區域。檔案在這四個區域之間的轉換關係如下:

  • workspace:工作區,就是存放專案的地方

  • Index/Stage:暫存區,用於臨時存放改動,事實上它只是一個檔案,儲存即將提交到檔案列表資訊

  • Repository: 倉庫區(本地倉庫),安全存放資料的位置,裡面有提交到所有版本的資料.其中HEAD指向最新放入倉庫的版本

  • Remote:遠端倉庫,託管程式碼的伺服器

本地的三個區域確切的應該說是git倉庫中HEAD指向的版本:

工作流程

1、在工作目錄中新增、修改檔案;

2、將需要進行版本管理的檔案放入暫存區域;

3、將暫存區域的檔案提交到Git倉庫。

因此,GIt管理的檔案有三種狀態:已修改(modeified),已暫存(staged),已提交(committed)

Git專案搭建

本地倉庫搭建

兩種方式:一種是建立全新的倉庫,另一種是克隆遠端倉庫

建立全新的倉庫

1、建立全新的倉庫,需要用GIt管理的專案根目錄執行

#在當前目錄下新建一個Git程式碼庫

$ git init

2、執行後可以看到,在專案目錄多出了一個.git目錄,關於版本等的所有資訊都在這個目錄裡面。

克隆遠端倉庫

1、另一種方式是克隆遠端目錄。將遠端伺服器上的倉庫完全映象一份到本地

#克隆一個專案和它的整個程式碼歷史

$ git clone [url]

2.去gitee克隆

Git檔案操作

檔案4種狀態

版本控制就是對檔案的版本控制,要對檔案進行修改、提交等操作,首先要知道檔案當前在什麼狀態,不然可能會提交了現在不想提交的檔案,或者要提交的檔案沒提交上。

  • Untracked:未跟蹤,此檔案在資料夾中,但並沒有加入到git庫,不參與版本控制.通過git add狀態變為staged

  • Unmodify”檔案已經入庫,未修改,即版本庫中檔案快照內容與資料夾中完全一致,這種型別的檔案有兩種去處,如果它被修改,而變為Modified ,如果使用git rm 移出版本庫,則成為untracked 檔案

  • Modified:檔案已修改,僅僅是修改,並沒有進行其他的操作,這個檔案也有兩個去處,通過git add 可進入暫存staged 狀態,使用 git checkout 則丟棄修改過,返回到 unmodify 狀態,這個 git cheeckout 即從庫中取出檔案,覆蓋當前修改

  • Staged:暫存狀態,執行 git commit 則將修改同步到庫中,這時庫中的檔案和本地檔案又變為一致,檔案為 unmodify 狀態,執行 git reset HEAD filename 取消暫存,檔案狀態為modifie

檢視檔案狀態

#檢視指定檔案狀態

git status [filename]

#檢視所有檔案狀態

git status

#git add . 新增所有檔案到暫存區

#git commit -m 提交暫存區中的內容到本地倉庫 -m 訊息備註

忽略檔案

有些時候我們不想把一些檔案納入版本控制中,比如資料庫檔案,臨時檔案等

在主目錄下建立“.gitignore” 檔案,此檔案有如下規則:

  1. 忽略為五年間中的空行或以井號(#)開始的行將會被忽略

  2. 可以使用linux萬用字元,例如:* 代表任意多個字元,?代表一個字元。方括號[abc]代表可選字元範圍,大括號{sss,rrr....}代表可選的字串等

  3. 如果一個名稱的最前面有一個感嘆號,表示例外規則,將不會被忽略

  4. 如果名稱的最前面是一個路徑分割符(/),表示要忽略的檔案在此目錄下,而子目錄下的檔案不忽略

  5. 如果名稱的最後面是一個路徑分隔符,表示要忽略的是此目錄下該名稱的子目錄,而非檔案(預設問價或目錄都忽略)

#Package Files#
*.jar
*.war
*.ear
target
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
.gitignore
*.yml

使用碼雲

1.註冊登入碼雲,完善個人資訊

2.設定本機繫結SSH公鑰,實現免密碼登入

#進入 C:\users\Administrator\.ssh 目錄

# 生成公鑰

ssh-keygen

ssh-keygen -r -ras 加密

3.將公鑰資訊public key 新增到碼雲賬戶中即可

4.使用碼雲建立一個自己的倉庫

5.IDEA 整合Git

1.新建專案,繫結Git

  • 將遠端的Git檔案目錄拷貝到專案中

2.提交專案到本地倉庫

3.push到遠端

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 origin --delete [branch-name]

git branch -dr [remote/branch]