1. 程式人生 > 實用技巧 >Git 入門小敘

Git 入門小敘

寫在前面:分享技術,共同進步,有不足請見諒,相關意見可評論告知 ~

程式設計路漫漫,學習無止盡!

目錄

版本控制

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

版本控制工具

主流的版本控制器有如下:

  • Git 【重要】
  • SVN(Subversion) 【重要】
  • CVS(Concurrent Versions System)
  • VSS(Micorosoft Visual SourceSafe)
  • TFS(Team Foundation Server)
  • Visual Studio Online

Git與SVN的主要區別

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

Git是分散式版本控制系統,沒有中央伺服器,每個人的電腦就是一個完整的版本庫,工作的時候不需要聯網了,因為版本都在自己電腦上。協同的方法是這樣的:比如說自己在電腦上改了檔案A,其他人也在電腦上改了檔案A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。Git可以直接看到更新了哪些程式碼和檔案!

Git是目前世界上最先進的分散式版本控制系統。

工作區和暫存區

Git和其他版本控制系統如SVN的一個不同之處就是有暫存區的概念。

工作區就是你在電腦裡能看到的目錄,比如我的reporstory資料夾就是一個工作區。
其實repository目錄是工作區,在這個目錄中的“.git”隱藏資料夾

才是版本庫
Git的版本庫裡存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動建立的第一個分支master,以及指向master的一個指標叫HEAD。
如下圖所示:

把檔案往Git版本庫裡新增的執行步驟:
第一步是用git add把檔案新增進去,實際上就是把檔案修改新增到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。

關於細節操作

檢視是否提交成功

檢視提交次數

比較版本差異

忽略資料夾


效果

Git 使用

常用的Linux命令

1)、cd : 改變目錄。

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

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

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

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

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

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

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

注意:rm -rf / 切勿在Linux中嘗試!刪除電腦中全部檔案!

9)、mv 移動檔案, mv index.html src index.html 是我們要移動的檔案, src 是目標資料夾,當然, 這樣寫,必須保證檔案和目標資料夾在同一目錄下。

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

11)、clear 清屏。

12)、history 檢視命令歷史。

13)、help 幫助。

14)、exit 退出。

15)、#表示註釋

生成金鑰

$ ssh-keygen -t rsa

預設生成位置如下:

本地倉庫與遠端倉庫建立連線

git remote add orign (ssh網址)
git push -u origin master

Git配置

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

檢視配置 git config -l

檢視不同級別的配置檔案

#檢視系統configgit config --system --list  
#檢視當前使用者(global)配置git config --global  --list

Git相關的配置檔案:

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

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

設定使用者名稱與郵箱

git config --global user.name "***** " #名稱
git config --global user.email ****** #郵箱

三個區域

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

  • Workspace:工作區,平時存放專案程式碼的地方

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

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

  • Remote:遠端倉庫,託管程式碼的伺服器,可以簡單的認為是專案組中的一臺電腦用於遠端資料交換

  • Directory:使用Git管理的一個目錄,也就是一個倉庫,包含我們的工作空間和Git的管理空間。

  • WorkSpace:需要通過Git進行版本控制的目錄和檔案,這些目錄和檔案組成了工作空間。

  • .git:存放Git管理資訊的目錄,初始化倉庫的時候自動建立。

  • Index/Stage:暫存區,或者叫待提交更新區,在提交進入repo之前,我們可以把所有的更新放在暫存區。

  • Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會只是當前的開發分支(branch)。

  • Stash:隱藏,是一個工作狀態儲存棧,用於儲存/恢復WorkSpace中的臨時狀態。

Git 運用

工作流程 (核心)

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

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

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

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

建立工作目錄與常用指令

工作目錄(WorkSpace)一般就是你希望Git幫助你管理的資料夾,可以是你專案的目錄,也可以是一個空目錄,建議不要有中文。

日常使用只要記住下圖6個命令:

建立本地倉庫的方法有兩種:一種是建立全新的倉庫,另一種是克隆遠端倉庫。

本地倉庫搭建

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

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

$ git init

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

克隆遠端倉庫

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

$ git clone [url]  # 

Git檔案操作

檔案的四種狀態

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

  • 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"檔案,此檔案有如下規則

  1. 忽略檔案中的空行或以井號(#)開始的行將會被忽略。
  2. 可以使用Linux萬用字元。例如:星號(*)代表任意多個字元,問號(?)代表一個字元,方括號([abc])代表可選字元範圍,大括號({string1,string2,...})代表可選的字串等。
  3. 如果名稱的最前面有一個感嘆號(!),表示例外規則,將不被忽略。
  4. 如果名稱的最前面是一個路徑分隔符(/),表示要忽略的檔案在此目錄下,而子目錄中的檔案不忽略。
  5. 如果名稱的最後面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非檔案(預設檔案或目錄都忽略)。

忽略檔案語法規範

空行或是以 # 開頭的行即註釋行將被忽略。
可以在前面新增正斜槓 / 來避免遞迴
可以在後面新增正斜槓 / 來忽略資料夾,例如 build/ 即忽略build資料夾。
可以使用 ! 來否定忽略,即比如在前面用了 *.apk ,然後使用 !a.apk ,則這個a.apk不會被忽略。
再者 * 用來匹配零個或多個字元,如 *.[oa] 忽略所有以".o"或".a"結尾, *~ 忽略所有以 ~ 結尾的檔案(這種檔案通常被許多編輯器標記為臨時檔案); [] 用來匹配括號內的任一字元,如 [abc] ,也可以在括號內加連線符,如 [0-9] 匹配0至9的數; ? 用來匹配單個字元。

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]

衝突操作

如果同一個檔案在合併分支時都被修改了則會引起衝突:解決的辦法是我們可以修改衝突檔案後重新提交!選擇要保留他的程式碼還是你的程式碼!

master主分支應該非常穩定,用來發布新版本,一般情況下不允許在上面工作,工作一般情況下在新建的dev分支上工作,工作完後,比如上要釋出,或者說dev分支程式碼穩定後可以合併到主分支master上來。

Idea中Git運用


提交:

基於實戰中學習,學習快樂中成長
.
時間會回答成長,成長會回答夢想