1. 程式人生 > 其它 >Git:一篇學會Git

Git:一篇學會Git

集中式版本控制系統和分散式版本控制系統的區別

集中式版本控制系統

集中式版本控制系統簡單理解是:在遠端伺服器由版本控制系統統一管理程式碼,開發人員可通過客戶端連線工具連線遠端伺服器,拉取程式碼到本地;只有當開發人員提交到遠端伺服器時,由遠端伺服器作版本控制。典型代表有SVN。缺點:當遠端伺服器掛了,開發人員就提交不了程式碼,也就程式碼暫時不受版本控制

分散式版本控制系統

分散式版本控制系統簡單理解是:可像集中式版本控制系統,在遠端伺服器統一來管理程式碼,但版本的控制不再是遠端伺服器,由本地控制。可把本地已提交的程式碼,以推送的方式再推送到遠端伺服器
典型代表有Git。優點:當遠端伺服器掛了,開發人員可以繼續提交程式碼,只不過暫時推送不到遠端伺服器罷了

分散式版本控制系統代表:Git

Git允許我們在本地進行版本控制,他為我們劃分了3個區域:

  1. 工作區: 有.git所在的資料夾即是工作區,也是我們寫程式碼的地方,也是我們本地能直接看到的
  2. 暫存區:臨時儲存的區域,不受版本控制,在資料夾上未體現。
  3. 本地庫: 程式碼已提交的區域,受版本控制,在資料夾上未體現。

大家可簡單理解成這樣:git為我們的倉庫複製了3份,3個區域各一份;而工作區的程式碼是我們能直接看到並操作的,而暫存區和本地庫是資料夾上看不到的。

本地庫和遠端庫

  1. 本地庫是我們本地已提交的程式碼的地方,且能受版本控制
  2. 遠端庫通常是公司統一管理程式碼的地方,最新最正式的程式碼都要以這裡為準

git常用命令

命令 作用 備註
git config --global user.name 使用者名稱 設定使用者簽名 安裝git後首次使用即可,這裡和以後本地庫推送和拉取遠端庫的那個賬號密碼沒有關係
git config --global user.email 郵箱 設定使用者簽名 安裝git後首次使用即可,這裡和以後本地庫推送和拉取遠端庫的那個賬號密碼沒有關係
git init 初始化本地庫 切換到A資料夾下,使用該命令,則A資料夾作為git倉庫
git status 檢視當前可追加和可提交的檔案 紅色標記的檔案為可追加檔案,綠色標記檔案為可提交檔案
git add 檔名 將未追蹤狀態的檔案進行追加到暫存區 【git add .】
git commit -m "日誌資訊" 檔名 將已追蹤檔案提交到本地庫
git reflog 檢視歷史提交記錄
git reset --hard 版本號 切換到指定版本
git rm --cached 檔名 將暫存區的檔案進行刪除

命令詳解

git reflog

git reflog:可檢視歷史提交版本;如下:

HEAD表示指標,正指向master分支(有master的那個分支正是當前分支)0;當有(HEAD -> master)的那個版本就是我們當前本地庫當前的分支!

git reset

git reset是切換歷史版本,最常用用的是:git reset --hard 版本號;當切換了版本,也是被日誌記錄起來的,如下:

分支

通常在實際開發中,都會建立多個分支,有生產分支,測試分支,開發分支等等,確保分支間的程式碼不受影響;即使開發程式碼有問題了,也不會影響到其他分支程式碼的正常使用

分支常用命令

命令 作用 備註
git branch -v 檢視分支情況 結果前面帶*的為目前所在分支
git branch 分支名 建立分支 建立分支,可以理解為將當前的倉庫重新複製了一份,和其他分支區分開(實際底層不是複製,而是指標);
git checkout 分支名 切換分支 切換分支後,倉庫下的檔案會變成該分支下的狀態
git merge 分支名 合併分支 是當前分支使用該命令去合併其他分支,比如說master分支要合併dev分支的程式碼,需要切換到master分支,然後執行git merge dev

注意:不同的分支,他們的3個區域是不同的,是獨立存在的。並且A分支要合併B分支時,B分支修改的程式碼先要提交到B分支的本地庫,A分支才能合併有效

合併分支衝突解決

在實際開發,衝突是避免不了。衝突發生的主要原因是:不同分支同一個檔案的同一個位置都進行了修改,在進行合併時,就會發生合併失敗的情況;
在實際開發的解決步驟如下:

  1. 假設master分支去合併dev分支發生衝突了,這時候會出現下面的提示:
  2. 當合並失敗時,git會把衝突的檔案自動合併一份到工作區,但是在暫存區和本地庫是不會有的;這時候我們需要手動的去處理工作區自動合併的檔案,如下:
  3. 假設衝突的檔案處理好了。還是正常的 git add 操作,但在commit時就不能像以前一樣。只能git commit 或 git commit -m "message",不能帶檔名。
  4. 根據上述的過程,衝突就會解決,之前的(master | merging) 變成 (master) 就表示合併成功了,如下:

Git團隊協作場景

本團隊內協作

流程如下,已有文字說明:

注:能直接對遠端庫進行推送和克隆的人,是需要先加入到團隊裡面,並且管理員進行授權的

跨團隊協作

開發中有可能會存在:需要其他公司來參與專案的開發,但可能由於某種原則,其他公司人員不能加入到團隊中,這時候就要如下圖的操作流程:

Git結合Github使用

建立遠端庫並推送程式碼

  1. 先建立遠端庫:
  2. 檢視目前有哪些連結有別名
    命令:git remote -v,可檢視當前連結別名情況
  3. 為指定連結建立別名
    命令:git remote add 別名 連結地址
  4. 推送指定分支的本地庫程式碼到遠端庫
    命令:git push 連結名/別名 遠端分支名

當遠端庫程式碼被修改時,要更新本地庫

如果要拉取遠端庫的程式碼,需要指定地址和分支,命令: git pull 連結名/別名 遠端庫分支名

克隆遠端庫程式碼到本地

命令:git clone 連結名;這裡可暫時不用別名,因為當進行克隆操作時,實際上git把我們做了3件事

  1. 拉取遠端倉庫總資料夾A到當前的B資料夾下
  2. 將A資料夾進行初始化成git倉庫
  3. 為遠端庫連結建立別名;可使用 git remote -v檢視

團隊內協助

如果A剛進去公司,公司專案是放在github的某個遠端庫上,A需要先克隆專案下來,克隆完後完成相應的功能開發,要推送到遠端庫,這時是推送不上去,需要下面的操作:

  1. 倉庫管理員需要邀請A加入團隊

  2. 將邀請函連結發給A

  3. A訪問邀請函連結,A要同意管理員傳送的邀請請求

  4. 當同意後,可推送程式碼到遠端庫。命令:git push 連結名/別名 遠端分支名

  5. 其他成員可拉取A提交的程式碼。命令:git pull 連結名/別名 遠端分支名

SSH免密登入

每次在拉取和推送時都要輸入使用者名稱和密碼顯然是很麻煩的事,其實可以通過https和ssh兩種方式來進行免密登入,但由於在公司裡ssh用得更多,下面就講下ssh免密登入配置,步驟如下:

  1. 開啟git bash客戶端,輸入ssh-keygen -t rsa -C 自己的郵箱;然後連續點選空格3次即可
  2. 複製 .ssh資料夾(在使用者家目錄下)下的id_rsa.pub檔案內容,去github上面進行配置,如下:



    到這裡就已經完成了。後面如果要訪問倉庫地址,就可直接用ssh的地址,如下:

Git結合IDEA使用

環境準備

有一些檔案如.class .imi等檔案是不需要提交到本地庫和遠端庫的,因此我們只需要先配置好忽略提交的檔案資訊,操作如下:
1.在使用者家目錄下,即.gitconfig所在目錄下,建立git.ignore檔案,將下面的內容貼上進去:

# Compiled class file
*.class

# Eclipse
.project
.classpath
.settings/

# Intellij
*.ipr
*.iml
*.iws
.idea/

# Maven
target/

# Gradle
build
.gradle

# Log file
*.log
log/

# out
**/out/

# Mac
.DS_Store

# others
*.jar
*.war
*.zip
*.tar
*.tar.gz
*.pid
*.orig
temp/
  1. 開啟 .gitconfig檔案,配置第一步檔案的路徑資訊,如下:
[core]
    excludesfile = C:/Users/xiaoming/git.ignore
  1. 在idea配置git的路徑資訊,如下:
  2. 這樣環境就準備好了

idea常見Git操作

idea初始化倉庫

idea新增檔案到暫存區


如果是資料夾級別新增到暫存區,取消下面的提示,請選擇“cancel”,如下:

idea提交檔案到本地庫

idea檢視提交日誌

idea切換版本

idea建立分支

idea切換分支

idea合併分支

合併分支出現衝突

當合並出現衝突時,會出現下面的彈框:

Accept Yours:只接受當前分支所作出的修改
Accept Theirs:只接受其他分支所作出的修改
Merge:手動合併
通常是選擇第3個來手動合併,如下:

最後手動合併的最終結果以中間的為準,如果確定中間的合併結果沒問題,點選【Apply】即可

idea克隆遠端庫專案


idea推送和拉取

idea結合github

idea配置github賬號