Git--視覺化管理工具-SourceTree

韓家小志發表於2020-12-10

0、前言

俗話說的好工欲善其事必先利其器,Git分散式版本控制系統是我們日常開發中不可或缺的。目前市面上比較流行的Git視覺化管理工具有SourceTree、Github Desktop、TortoiseGit,綜合網上的一些文章分析和自己的日常開發實踐心得個人比較推薦開發者使用SourceTree,因為SourceTree同時支援Windows和Mac,並且介面十分的精美簡潔,大大的簡化了開發者與程式碼庫之間的Git操作方式。該篇文章主要是對日常開發中使用SourceTree視覺化管理工具的一些常用操作進行詳細講解。

1、SourceTree | Github Desktop | TortoiseGit 視覺化管理工具對比

比較項\軟體名稱Github DesktopSourcetreeTortoiseGit
軟體出品GithubAtlassianTortoiseGit
廠商Git平臺有(Github)有(Bitbucket)
安裝包大小91M24M23M
中文操作介面
使用者可設定選項較少豐富豐富
軟體穩定性非常穩定穩定穩定
分支處理等圖形介面
後臺執行Git命令不可見可見部分可見
安裝方式無需註冊平臺需提前註冊平臺無平臺註冊
推薦度⭐⭐⭐⭐?⭐⭐⭐⭐⭐⭐⭐⭐⭐?

Github Desktop

  • Github 出品軟體,評測版本: V2.3.1 (2020/02/24 時點最新版本)
  • 總體感受: 執行穩定,對Git協議支援完備,操作為英文介面。對每一次的Commit, pull, push等操作都按規範的Git流程進行輔助提示,與Github使用配合完美。開源英文專案團隊首選。
  • 推薦指數: ⭐⭐⭐⭐? (4.5星)

TortoiseGit

  • 經典的檔案管理右鍵整合方式,TortoiseGit(V2.9.0) SVN使用者熟悉的操作方式。
  • 推薦指數: ⭐⭐⭐⭐? (4.5 星)

Sourcetree

  • Atlassian 出品軟體,評測版本: V3.3.8 (2020/02/24 時點最新版本)
  • 總體感受: 有中文介面,分支構成等影像顯示方式親切友好,每一步Git操作都可以看到後臺實際執行的Git命令,對理解Git協議原理很有幫助。
  • IDEA,Pycharm等IDE工具自身已經有Git整合(Version Control),但是還有很多專案團隊成員並不是開發人員,他們同樣需要管理設計文件,操作手冊,圖片說明等共享資料。 現在就連VS Code 安裝一個Git外掛,自己隨意編寫的便籤檔案都可以得到很好的版本管理。而Sourcetree 等工具的使用者更多是 Project Manager等需要看到專案全貌,掌控專案交付與進度的人。作為PG開發人員,有了Git,有了命令列,理論上說啥都能搞定了。但即使是PG人員,大家因為經驗不同,碰到Branch Merge, Rebase 這些複雜的Git操作,未必每個人都理解得很清楚,而一旦操作失誤,補救起來專案經理也要花費不必要的時間精力。 而一般正規大型專案都有master/develop/feature/release/hotfix 這樣幾個分支,僅靠IDEA, Pycharm裡的整合Git工具難以看到專案全貌。使用了SourceTree, 專案經理髮布產品的工作效率將大大提升。比如需要對產品 A. Release V2.1766.908 新增兩個功能,打個補丁後下周釋出,Sourcetree就會更好幫到你。

2、SourceTree視覺化管理工具安裝及配置

SourceTree簡介

  • 通過一個簡單的使用者介面即可使用所有的Git命令
  • 通過一次單擊,即可管理所有的Git庫,無論是託管的還是本地的
  • 通過一次單擊,即可進行commit、push、pull、merge等操作
  • 一些先進的功能,如補丁處理、rebase、shelve、cherry picking等
  • 可以連線到你託管在Bitbucket、Stash、Microsoft TFS或GitHub中的程式碼庫

SourceTree下載地址

SourceTree Atlassian賬號註冊地址:

https://www.atlassian.com/zh/try/cloud/signup?product=jira-software.ondemand

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

選擇分散式版本控制系統(Git or Mercurial)

在這裡插入圖片描述

在SourceTree中新增SSH金鑰:

  • 1).安裝好SourceTree和Git後開啟SourceTree,點選上面的”命令列”按鈕。在這裡插入圖片描述
  • 開啟命令列:
    在這裡插入圖片描述
  • 2).輸入ssh-keygen -t rsa -C "example@example.com",這個地方輸入的是你註冊gitlab所使用的郵箱。按回車,之後還需要輸入密碼之類的東西,可以選擇不輸入直接回車。在這裡插入圖片描述
  • 最後顯示如上圖所示的資訊就表示生成SSH key成功了,可以進行下一步操作了。
  • 在這兒我們生成的祕鑰檔案在圖中也標識出來了,即: C:/Users/LC/.ssh目錄下面。如下圖:在這裡插入圖片描述
  • 3).把上圖中的id_rsa.pub檔案用記事本之類的文字編輯器開啟,然後將其中內容全部複製。
  • 4).登入GitLab的個人賬戶,找到SSH Keys,並將複製的內容貼上到Key下面的文字域中,然後點選Add Key。在這裡插入圖片描述
  • 5).在SourceTree中配置與GitLab公鑰對應的公鑰。點選工具->選項:在這裡插入圖片描述
  • 到這兒為止,SourceTree配置SSH就完成了。
  • 需要注意的是,如果這中間沒有配置好的話,從GitLab伺服器上clone Project的時候會提示沒有許可權或不是一個有效的Git倉庫。
  • 來源: https://blog.csdn.net/xyzchenxiaolin/article/details/51853319

3、 Clone對應託管平臺倉庫(以Gitee為例):

-
在這裡插入圖片描述
在這裡插入圖片描述

SourceTree設定預設工作目錄:

  • 設定SourceTree預設專案目錄:
    • 點選工具=>選項=>一般=>找到專案目錄設定Clone專案預設儲存的位置
      在這裡插入圖片描述

SourceTree程式碼提交:

1.首先切換到需要修改功能程式碼所在的分支:

在這裡插入圖片描述
在這裡插入圖片描述

2.將修改的程式碼提交到暫存區:

在這裡插入圖片描述

3.將暫存區中的程式碼提交到原生程式碼倉庫:

注意:多人同時開發專案的時候,不推薦預設選中立即推送變更到origin/develop,避免一些不必要的麻煩!
在這裡插入圖片描述

4.程式碼拉取更新原生程式碼庫,並將程式碼推送到遠端倉庫:

在這裡插入圖片描述

  • 勾選需要推送的分支,點選推送到遠端分支:
    在這裡插入圖片描述
  • 程式碼成功推送到遠端程式碼庫:
    在這裡插入圖片描述

5.在Gitee中檢視推送結果:

在這裡插入圖片描述

4、SourceTree分支切換,新建,合併:

1.分支切換:

  • 雙鍵切換
    在這裡插入圖片描述
  • 單擊滑鼠右鍵切換
    在這裡插入圖片描述

2.新建分支:

注意:在新建分支時,我們需要在哪個主分支的基礎上新建分支必須先要切換到對應的主分支才能到該主分支上建立分支,如下我們要在master分支上建立一個feature-0613分支:在這裡插入圖片描述
在這裡插入圖片描述

3.合併分支:

注意:在合併程式碼之前我們都需要將需要合併的分支拉取到最新狀態(**避免覆蓋別人的程式碼,或者丟失一些重要檔案)!!!!!

  • 在master分支上點選右鍵,選擇合併feature-0613至當前分支即可進行合併:
    在這裡插入圖片描述
  • 分支合併成功:
    在這裡插入圖片描述

5、SourceTree程式碼衝突解決:

  • 首先我們需要製造一個提交檔案遇到衝突的情景:
  • 在SoureceTree中在Clone一個新專案,命名為pingrixuexilianxi2,如下圖所示:
    在這裡插入圖片描述
  • 我們以專案中的【程式碼合併衝突測試.txt】檔案為例:
    在這裡插入圖片描述
  • 在pingrixuexilianxi中新增內容,提交程式碼(不選擇立即推送變更到origin/master),拉取程式碼即會遇到衝突:在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
  • 衝突檔案中的內容:在這裡插入圖片描述

直接開啟衝突檔案手動解決衝突:

  • 由下面的衝突檔案中的衝突內容我們瞭解到:
<<<<<<< HEAD
6月19日 pingrixuexilianxi新增了內容
=======
6月18日 pingrixuexilianxi2修改了這個檔案哦
>>>>>>> a8284fd41903c54212d1105a6feb6c57292e07b5
  • <<<<<<< HEAD到 =======裡面的【6月19日 pingrixuexilianxi新增了內容】是自己剛才的Commit提交的內容
    =======到 >>>>>>> a8284fd41903c54212d1105a6feb6c57292e07b5裡面的【6月18日 pingrixuexilianxi2修改了這個檔案哦】是遠端程式碼庫更新的內容(即為pingrixuexilianxi2原生程式碼庫推送修改內容)。
  • 根據專案需求刪除不需要的程式碼就行了,假如都需要的話我們只需要把 <<<<<<< HEAD======= >>>>>>> a8284fd41903c54212d1105a6feb6c57292e07b5都刪掉衝突就解決了(注意,在專案中最後這些符號都不能存在,否則可能會報異常)。
  • 最後將衝突檔案標記為已解決,提交到遠端倉庫:在這裡插入圖片描述

採用外部文字檔案對比工具Beyond Compare解決衝突:

SourceTree配置文字檔案對比工具Beyond Compare:

  • 工具=>選項=>比較:在這裡插入圖片描述
    在這裡插入圖片描述
  • 使用Beyond Compare解決衝突:
  • Beyond Compare使用技巧:官方全面教程:https://www.beyondcompare.cc/jiqiao/
  • SourceTree開啟外部和合並工具:在這裡插入圖片描述
  • 注意:第一次啟動Beynod Compare軟體需要一會時間,請耐心等待:在這裡插入圖片描述
  • Beynod Compare進行衝突合併:在這裡插入圖片描述
  • 點選儲存檔案後關閉Beynod Compare工具,SourceTree中的衝突就解決了,在SourceTree中我們會發現多了一個 .orig 的檔案。接著選中那個.orig檔案,單擊右鍵 => 移除,最後我們推送到遠端程式碼庫即可:在這裡插入圖片描述

6、Sourcetree中的基本名詞說明:

  • 克隆/新建(clone):從遠端倉庫URL載入建立一個與遠端倉庫一樣的本地倉庫。
  • 提交(commit):將暫存區檔案上傳到原生程式碼倉庫。
  • 推送(push):將本地倉庫同步至遠端倉庫,一般推送(push)前先拉取(pull)一次,確保一致(十分注意:這樣你才能達到和別人最新程式碼同步的狀態,同時也能夠規避很多不必要的問題)。
  • 拉取(pull):從遠端倉庫獲取資訊並同步至本地倉庫,並且自動執行合併(merge)操作(git pull=git fetch+git merge)。
  • 獲取(fetch):從遠端倉庫獲取資訊並同步至本地倉庫。
  • 分支(branch):建立/修改/刪除分枝。
  • 合併(merge):將多個同名檔案合併為一個檔案,該檔案包含多個同名檔案的所有內容,相同內容抵消。
    貯藏(git stash):儲存工作現場。
  • 丟棄(Discard):丟棄更改,恢復檔案改動/重置所有改動,即將已暫存的檔案丟回未暫存的檔案。
  • 標籤(tag):給專案增添標籤。
  • 工作流(Git Flow):團隊工作時,每個人建立屬於自己的分枝(branch),確定無誤後提交到master分支。
  • 終端(terminal):可以輸入git命令列。
  • 每次拉取和推送的時候不用每次輸入密碼的命令列:git config credential.helper osxkeychain sourcetree。
  • 檢出(checkout):切換不同分支。
  • 新增(add):新增檔案到快取區。
  • 移除(remove):移除檔案至快取區。
  • 重置(reset):回到最近新增(add)/提交(commit)狀態。

7、Git分散式版本控制器常用命令和使用:

Git檔案的四種狀態:

  • 未跟蹤(untrack):未追蹤,表示檔案為新增加的
  • 已修改(modified):表示修改了檔案,但還沒儲存到git倉庫中
  • 已暫存(staged):表示修改的檔案提交到了暫存區,但是還沒有提交到本地Git版本庫
  • 已提交(committed):表示資料安全提交到了本地Git版本庫

Git工作的四個區域:

  • Working Directory(工作目錄):即正在編輯的檔案狀態。檔案狀態為未跟蹤(untrack)和已修改(modified)在此區域內
  • Staging Area(暫存區):儲存了下次將提交的檔案列表資訊。檔案狀態為已暫存(staged)在此區域內
  • Repository(本地倉庫):提交到本地倉庫的檔案
  • Repository(遠端倉庫):已提交到遠端計算機內的檔案
  • 提交流程為:工作區》暫存區》本地版本庫》遠端版本庫

多個Git賬號的登入與切換:

  • 在Git Bash Here的控制檯裡輸入:
git config --global user.name "你的名稱"
git config --global user.email "你的郵箱"
 
切換完成後,檢視對應的賬號:
git config user.name
輸出賬號名稱:YSGStudyHards

檢視Git專案遠端倉庫地址:

git remote -v

在這裡插入圖片描述

檢視使用者名稱和郵箱地址:

//檢視使用者名稱
git config user.name
//檢視郵箱地址
git config user.email 

拷貝一個Git倉庫到本地:

git clone

8、開發環境中Git完整提交步驟:

首拉取伺服器程式碼:

注意:提交程式碼之前,需先從伺服器上面拉取程式碼,以防覆蓋別人程式碼!

git pull 

檢視當前工作目錄樹的工作修改狀態(這個命令在git中使用最頻繁了,原因會告訴你下一步該做的事情):

git status  

將工作區修改新增的檔案提交到暫存區:

git add + 檔案
 
git add -u + 路徑:將修改過的被跟蹤程式碼提交快取
 
git add -A + 路徑: 將修改過的未被跟蹤的程式碼提交至快取  

將暫存區程式碼提交到本地倉庫中:

git commit -m “功能修改,這裡是註釋”

將程式碼推送到伺服器(主分支):

git push origin master  

9、Git提交過程遇到問題:

誤將程式碼提交到暫存區中(git add):

  • 解決辦法:利用 git reset 命令將撤回快取中的程式碼。

誤將暫存區程式碼提交到本地倉庫(git commit):

  • 解決辦法:
  • 回退到某個版本,只回退了commit的資訊,不會改變已經修改過的程式碼。
git reset —soft + 版本號
  • 徹底回退到某個版本,本地的程式碼也會改變上一個版本內容
git reset —hard + 版本號

git pull和git fetch的用法及區別:

  • git pull (拉取):

    • 是拉取遠端分支更新到原生程式碼庫的操作,比如遠端倉庫的學習資料有更新,需要把新的內容下載下來,可以使用git pull 是相當於從遠端倉庫獲取最新版本,然後再與本地分支merge(合併)!
  • git fetch (提取):

    • 理解 fetch 的關鍵, 是理解 FETCH_HEAD,FETCH_HEAD指的是: 某個branch在伺服器上的最新狀態’。這個列表儲存在 .Git/FETCH_HEAD 檔案中, 其中每一行對應於遠端伺服器的一個分支。
    • 當前分支指向的FETCH_HEAD, 就是這個檔案第一行對應的那個分支,使用git fetch獲取遠端倉庫最新程式碼,但是不會自動合併(merge),git fetch更安全一些,因為在merge(合併)前,我們可以檢視更新情況,然後再決定是否合併。

10、Git撤銷,回退/還原,刪除操作:

Git取消從工作區提交到暫存區的檔案追蹤:

在使用git的時候,有些檔案是不需要上傳的,所以就可以修改
例如:
如果是對所有檔案都取消跟蹤的話,就是
git rm -r --cached .   //不刪除本地檔案
git rm -r --f .   //刪除本地檔案【不推薦使用,因為會把本地的檔案也給刪除了】
  
對某個檔案取消跟蹤
git rm --cached readme1.txt    //刪除readme1.txt的跟蹤,並保留在本地(推薦使用)
git rm --f readme1.txt    //刪除readme1.txt的跟蹤,並且刪除本地檔案。

工作區於暫存區之間的提交回退操作:

# 新增指定檔案到暫存區
git add [file1] [file2] ...
# 新增指定目錄到暫存區,包括子目錄
git add [dir]
# 新增當前目錄的所有檔案到暫存區
git add .
#當我們需要刪除暫存區或分支上的檔案, 同時工作區也不需要這個檔案了, 可以使用
git rm file_path
#當我們需要刪除暫存區或分支上的檔案, 但本地又需要使用, 這個時候直接push那邊這個檔案就沒有,如果push之前重新add那麼還是會有。
git rm --cached file_path(檔名稱,ysg.txt)
#直接加檔名   從暫存區將檔案恢復到工作區,如果工作區已經有該檔案,則會選擇覆蓋
#加了【分支名】 +檔名  則表示從分支名為所寫的分支名中拉取檔案 並覆蓋工作區裡的檔案
git checkout

版本庫回退到工作區:

  
1
2
3
4
5
【這裡操作是已經提交了在原生程式碼庫的操作】
#去掉上一次的提交(會直接變成add之前狀態,即取消追蹤)  
git reset HEAD^
#去掉上一次的提交(變成add之後,commit之前狀態)
git reset --soft  HEAD^  

檢視提交歷史:

git log                         # 檢視提交歷史
git log -p <file>               # 檢視指定檔案的提交歷史
git blame <file>                # 以列表方式檢視指定檔案的提交歷史
git log --oneline               # 檢視提交日誌,並且只顯示第一行

合併與衍合:

git merge <branch>               # 合併指定分支到當前分支
git merge --abort                # 取消當前合併,重建合併前狀態
git merge dev -Xtheirs           # 以合併dev分支到當前分支,有衝突則以dev分支為準
git rebase <branch>              # 衍合指定分支到當前分支 

Git拉取時設定拉取深度:

git clone --depth=1 git@github.com:xxx.git

Git檢視分支檢視:

git branch -vv 檢視當前開發分支
git branch  檢視本地所有分支
git branch -r  檢視遠端所有分支
git branch -a  檢視本地和遠端所有分支
 

11、SourceTree如何提交PR(Pull Request):

1、fork 專案:

在這裡插入圖片描述

2、克隆本地

在這裡插入圖片描述

  • 開啟Git Bash輸入倉庫克隆命令:
git clone https://github.com/liangtongzhuo/taro-ui.git

3、根據文件建立分支

拖進 SourceTree,基於 dev 建立分支如下圖:在這裡插入圖片描述

4、提交修改的程式碼到遠端程式碼庫

  • 文章上面已經提到了使用SourceTree提交的相關操作,可參考:
    https://www.cnblogs.com/Can-daydayup/p/13128633.html#_label5(或者Ctrl F:SourceTree程式碼提交)
  • 當然也可以使用git命令提交:
git add .  --提交所有修改的檔案到本地暫存區
git commit -m"fix(dos):修正文字 "   --提交到原生程式碼庫
git push  --提交到github中的遠端程式碼庫

5、提交 Pull Request

第四步提交成功後,進入原來fork的倉庫,點選 Compare在這裡插入圖片描述

  • 提交你的說明,選擇合併的分支即可,剩下等待合併。在這裡插入圖片描述

參考自https://www.cnblogs.com/Can-daydayup/p/13128633.html

相關文章