1. 程式人生 > >Git視覺化工具SourceTree的使用

Git視覺化工具SourceTree的使用

    我在前面幾篇文章中詳細介紹了Git命令列的使用《Git學習札記》《Git學習札記——進階》,以及使用Xcode中自帶的Git視覺化工具的使用《Xcode中git的使用方法介紹與"Please tell me who you are"問題的解決方案》。對於Git的初學者,個人建議先學習Git命令列,然後再去使用圖形化工具,這樣才會對整個Git的工作流有一個完整的瞭解。今天我們要來學習的工具是SourceTree,一款非常好用的Git視覺化工具。我今天的操作都將在Mac上進行,並且以iOS專案作為演示。因為對於使用Git的公司,SourceTree還是非常流行的。對於Git還不瞭解的開發者,建議先看看我上面的幾篇部落格。

(2)開啟SourceTree,點選New Repository-->Clone from URL,  然後複製倉庫地址  https://github.com/chenyufeng1991/UseSourceTree.git  到SourceTree中的Source URL中,本地倉庫的位置和名稱可以隨意修改。如圖:點選clone即可。這樣就能把遠端倉庫中的專案clone到本地了。


(3)clone專案完成後,SourceTree中看到如下:

上面的工作列分別有commit(提交)、Pull(更新程式碼)、Push(推送程式碼)、Fetch(抓取程式碼),Branch(新建分支)、Merge(合併程式碼)、Stash(暫存程式碼狀態)。

左側中的WORKSPACE表示本地的工作區,file status中可以看到本地檔案的改變狀態,History中是commit歷史。下面的BRANCHES顯示的是本地的分支。REMOTES顯示的是遠端的分支。

下方的狀態列顯示本次提交的修改檔案。以及修改檔案中修改的程式碼。


(4)如果上述是別人的一個專案,那麼此時你就可以在本地進行開發了。但是如果是你自己要在遠端建立自己的專案,那麼下面你要在本地先建立一個專案。我以Xcode建立一個iOS專案為例,我建立的專案名稱為UseSourceTree_iOS. 然後把該專案拖入到clone下來的本地倉庫中。拖入完成後,SourceTree就顯示如下:


可以在SourceTree中可以看到工作區中的改變,比如哪些檔案被修改,以及修改的內容。

(5)本地做了修改後,可以看到檔案都還是在Unstaged files中,勾選你要提交的檔案,然後檔案就會到Staged file中,這個操作對應的命令就是git add ,即把檔案從工作區放到暫存區。操作完成後,如下所示:


(6)此時就可以進行commit操作了。點選左上角的commit。在commit的時候強烈推薦寫上註釋。


完成comm之後,提交歷史就會變成如下所示。1 ahead表示本地提交比遠端提交領先一次commit。


來到不同的分支,比如master分支,點選不同的commit History,可以檢視到檔案的修改,非常的方便。視覺化工具對於code review非常有利。


(7)本地完成commit之後,就需要向遠端倉庫提交程式碼了。個人建議,在Push之前,先進行Pull。

但是要注意,pull = fetch + merge,你拉取程式碼的時候選擇的是pull還是fetch,還是使用rebase,這個要根據你的個人習慣,最主要的是要根據你團隊的Git工作流來操作。個人的建議是用git pull --rebase命令,相當於使用git fetch + git rebase命令,而不是使用merge,這主要是為了保持樹結構和歷史的乾淨(推薦去了解一下git merge 和git rebase的區別)。

點選上方的Pull拉取程式碼。


在進行PUll的時候,可以選擇遠端的分支,同時如果勾選了最後一個“Rebase instead of merge”,表示使用rebase命令,而不是merge。

(8)完成更新程式碼後 ,就可以向遠端提交程式碼了。點選上方的Push,彈出如下對話方塊。


在提交的時候,選擇要提交的分支即可。此時可能需要你輸入Github或者其他的遠端的使用者名稱和密碼,輸入即可。(注意:此時輸入的使用者名稱和密碼與.git配置裡面的name和email不是同一個概念。此時要你輸入的使用者名稱和密碼只和你的遠端伺服器有關,和git無關,因為你要向伺服器推送程式碼,必然要有許可權,這個使用者名稱和密碼相當於許可權。但是.git裡面的name和email只是作為你git這個工具標記而已,和遠端伺服器沒有關係。)


(9)Push完程式碼後,可以在提交歷史中看到自己和別人的提交。如圖:


此時,本地和遠端已經保持了同步,所以原來的1 aHead就消失了。來到Github中,發現程式碼已經成功提交了。


(10)此時,如果其他開發者向遠端倉庫提交了程式碼,那麼在你的SourceTree中就會顯示如下,


在你本地的master分支下,可以看到1 behind,表示你本地的分支已經落後於遠端分支1 commit了。可以選擇Pull來更新程式碼。

(11)如果遠端倉庫有其他的分支,那麼我需要checkout(檢出)遠端分支到本地,如圖,遠端有dev分支,雙擊左側遠端的dev分支,即可檢出。檢出的時候還可以重新命名本地該分支的名字:


checkout完成後,本地也就有dev分支了:


(12)在SourceTree中經常會出現track這個詞,表示“跟蹤”,表示本地某個分支跟蹤遠端某個對應的分支。所以,判斷是ahead還是behind commit的時候,都是去和track的那個分支進行比較的。雙擊本地的某個分支即可完成分支切換。

(13)當你在本地新建某個分支的時候,也可以推送到遠端,然後遠端就會有該分支了。如下所示,我在SourceTree中新建了release分支,但是遠端沒有release分支。我把該分支進行Push:


然後就發現遠端也有release分支了:你要確定是否有某個分支,你也可以去Github或者其他遠端伺服器檢視。


(14)當然你也可以在SourceTree中刪除本地或者遠端的一個分支,刪除分支是個很謹慎的操作,需要慎重。


      總結下,Git是一個分散式的版本控制工具,功能非常強大,推薦大家先好好掌握命令列,再去使用GUI,就會發現特別簡單。圖形操作和命令列也是能夠一一對應的。我今天講到的SourceTree功能,也只是其中一部分,但是這一部分也是最為常用的。熟練使用還是需要在團隊協作中去掌握。下面的貼出的Git供大家查詢和比對。