前言
作為使用Sourcetree大於3年的我,已熟知git的每一個功能,並靈活運用利用git解決開發中各式各樣的場景問題,我也曾多次在公司內部不同小組間分享Sourcetree使用經驗,接下來給大家分享下這款工具吧。
本文可能是目前網上最全的一篇視覺化使用git工具Sourcetree文章。
可能對於很多開發來說,只要搞懂git的push、pull、解決一些簡單的衝突命令就好了,事實上git的功能十分強大,而通過背命令很難熟記每個邏輯。
當然不同的ide開發環境都有各種各樣的git外掛,操作方法各不相同,不如直接學個跨平臺,不受ide限制的git管理工具Sourcetree。不管你做java,還是python、Android都可以使用。
介紹
官方介紹如下:
A free Git client for Windows and Mac
Sourcetree simplifies how you interact with your Git repositories so you can focus on coding. Visualize and manage your repositories through Sourcetree's simple Git GUI.
譯文:
一款強大的Windows和Mac的免費Git客戶端
sourcetree簡化你如何與你的Git儲存庫使您可以專注於編碼。視覺化和通過Sourcetree簡單的git GUI管理你的知識庫。
一點坑
下載www.sourcetreeapp.com/
這款軟體是免費的,但是需要註冊,登入授權;登入和授權這兩個步驟沒啥問題,但對於註冊需要科學上網才能註冊的了。
一些場景
我大概把一些git高階的應用場景和大家分享下:
- 一個專案含開發分支、整合分支、整合分支(穩定版)、生產環境分支等
- 一個專案含base分支,按功能分配到各個分支,各個開發管理(十來個分支),整合分支、生產環境分支。(那十來個分支內只有自己模組的程式碼)
- 一款產品一個主分支,對於每個公司實施均有個性化需求,且需求很難以外掛形式實施,或者外掛形式也需要各種個性化修改的外掛,則對於每個專案實施對應每個分支。
這裡,我先簡單描述這幾種使用場景,具體內容,後面會逐步介紹。
欣賞下git分支:
常見用法
本文會綜合Windows環境和mac環境一起講,但在兩個平臺下介面或名詞還是有少許差異,本文會盡可能的說明。
新增倉庫
mac下從url克隆
git remote add orgin http://10.10.100.6:3000/sl/shaolei.git複製程式碼
windows下從url克隆
抓取、獲取分支資訊
抓取(mac下的名字)獲取(Windows下的名字)指獲取服務端git庫的變更資訊,比如落後幾個版本,超前幾個版本,我們平常多人協作的專案,提交程式碼前需要先獲取一下,如果服務端有新的提交,再拉取下別人的更改,可以減少程式碼衝突。(選單欄)
拉取程式碼
$ git fetch
$ git merge orgin/master複製程式碼
我先將介面分為 選單欄、左側欄、檔案欄、變更欄、底部欄以方便下文介紹。
直接點選選單欄的拉取按鈕即可將遠端程式碼變更拉取到本地。
提交程式碼:
1.正常提交
- 首先將未暫存的檔案選中,點選後面的暫存所選;或者直接點選暫存所有。(檔案欄)
- 在下方文字框輸入本次程式碼變動的說明。(底部欄)
- sourcetree預設不會推送到遠端倉庫,打勾立即推送變更到origin。(底部欄)
- 點提交即可(如果沒有打勾立即推送變更到遠端,還需手動點選選單欄的推送)
這裡我模擬一些變更,隨便改點程式碼,然後儲存,再次回到提交介面。
變更欄會包含本次所有變更,其中+代表本次增加行;-代表本次刪除行;前面2個行號依次程式碼變更前行號,變更後的行號。
為了保證程式碼變更儘可能的少,我們需要丟棄一些無意義的變更,如153行的刪了一行
<dt></dt>
,隨後又增加了一行<dt></dt>
,造成這種現象一般是程式碼格式化或者不小心增加了某些空格等不可見字元導致,我們可以直接選中那2行,然後點選上方的丟棄行。需要注意的是,丟棄不等於刪除,丟棄所丟的東西是那一行的變更,比如是+號,那麼丟掉代表不增加這一行,減號-同理丟的是不刪除這一行,也就是恢復這一行。
sourcetree會把所有的變更以區塊來分組,所以如果是整個區塊的變更都沒有意義,可直接丟棄整個塊,如圖:
隨後暫存所選提交(檔案欄)
暫存程式碼
暫存和丟棄類似,是將程式碼片段暫存到本地暫存區 以備提交,提交時所提交的程式碼就是暫存區的程式碼。
當我們某個功能已經實現了,但是又想優化一下程式碼,可又擔心等會沒優化成功,此時的程式碼丟失,如果沒有git之前,我們可能會備份一份程式碼,這裡只需要暫存程式碼即可。暫存後,正常修改,後續的變更會出現在未暫存檔案中的變更欄中。
此時無論是丟棄,還是繼續暫存都是基於上次已暫存的檔案。
當然,你也可以提交程式碼,來實現類似功能。
1.解決衝突
當我和別人改了相同檔案的相同行時,(大部分我們多人改變了一個檔案,git都會幫我們處理掉,自動合併,但是當改變同一檔案的相同行時,在拉取時就會有衝突)如圖
我們可以先將我們程式碼貯藏起來(選單欄),然後再拉取程式碼,接著應用貯藏,應用後衝突的檔案會顯示出來
$ git stash複製程式碼
這個時候,我們需要指定一個版本,比如是別人的版本為準,還是我的版本,隨後右鍵檔案選擇 解決衝突使用我的版本(左側欄選擇檔案狀態-》工作副本)
變更欄可以看到updated upstream 是別人改的版本,+====下面我改的版本。
如果遠端和本地都有問題,建議開啟ide工具編輯後提交。
新開分支
在專案中,我們可能分為開發分支、整合分支、生成環境分支等,這時我們只需要在某個節點上右鍵選擇分支即可
推送分支
新開的分支不會在遠端顯示,所以需要將分支推送到遠端。
$ git push orgin 測試分支複製程式碼
切換分支
$ git checkout 3e1e7fc複製程式碼
需要切換到不通分支時,直接雙擊分支。
拉取遠端分支
和切換分支類似,雙擊遠端分支即可。
回滾提交
有些時候,我們提交的程式碼有問題,需要回滾回去。
git revert *複製程式碼
回滾某次提交
將某次變更(在sourcetree裡是某個節點)右鍵選擇回滾提交。
回滾檔案
回滾行
忽略檔案
專案中,有一些資料夾是需要忽略,而不需要提交到倉庫裡,比如bin目錄下、target目錄下的檔案。
這裡支援忽略單個檔案、忽略所有副檔名、或略資料夾下的一切等。之後,我們不會看到這些檔案變動。
需要說明的是忽略檔案,只能忽略未跟蹤檔案,如果已跟蹤檔案(之前被提交過),需要先將這些檔案刪除後,提交程式碼庫,再次忽略檔案。
合併分支
由圖中可以看出,我們的測試分支程式碼落後master分支2個節點,我們可以在master分支上右鍵選擇合併到當前分支
當有衝突時,需要和上文中介紹的那樣解決衝突,然後提交;如果沒有衝突,需要手動點選推送按鈕將合併後的變更提交到遠端
貯藏(暫存)程式碼
$ git stash複製程式碼
上文已有介紹,主要指暫存所有變更,以便於應用暫存(windows下叫貯藏)
審查檔案
假設一個檔案被不同的開發修改過,有段程式碼需要找到修改人,我們可以右鍵審查檔案檢視每一行的作者。
$ git blame複製程式碼
效果如下:
右鍵某一行選擇檢視詳細日誌 可以看到該次提交的說明。
檢視檔案變動歷史
我們時常需要檢視某個檔案變動的歷史,這裡我們可以右鍵檢視檔案的 變更歷史
$ git log複製程式碼
點選後效果如圖:
按檔案開啟歷史版本
有些時候,我們也需要檢視檔案的歷史版本,這裡可以選中節點後,選擇那個變更檔案,右鍵 開啟歷史版本
sourcetree會生成一個臨時檔案(歷史版本),以供我們分析。
標籤的使用
我們有些時候需要給一個變更增加一個標籤,比如穩定版1.0的標籤
git tag v1
$ git tag -d v1 //移除標籤複製程式碼
效果如下:
存檔
存檔指將當前版本打包成一個zip包。
檢出分支
檢出分支意思是將當前專案回到選中的版本,這樣我們可以很輕鬆回到任意一個版本,來編譯專案,或者檢查當時專案的問題。
其他
- 合併 一般是用於不通分支間,將某次提交的所有變更合併到當前分支。
- rebase、互動式變都是變基,主要是將遠端的這個分支名裡的標識改變,大部分場景用不到
- 重置到當前節點:這個功能蠻好用的,可以將目前的分支回滾到那一次的分支,然後將所有的檔案變更顯示出來,相當於回到當時準備提交的時候(包含之後的所有變動)。
- 遴選 從不同的分支中檢出一個單獨的commit , 並把它和你當前的分支合併,類似於打補丁,例如,修復一個所有分支都有的bug這樣的場合可以適用。
$ git revert
$ git cherry-pick 4a1fd5複製程式碼
- 分支的拉取推:從遠端拉取
- 跟蹤分支:當未跟蹤時表示本地沒有和遠端建立分支的聯絡
- 重新命名分支
- 刪除分支等
如何檢視介面上的操作對應命令
設定後可以看到每部操作的git命令
一些良好的習慣
- 儘可能丟棄一些無意義的變更
- 儘可能按模組分配開發人員任務
- 合併分支後需立刻解決掉衝突
- 減少單個檔案內程式碼變動的區塊
- 如果使用我的版本解決問題,需告知對方
場景 應用
篇幅有限,下次再續!
總結
通過本文介紹,可以解決平時90%以上的各個程式碼提交問題,至於用什麼ide環境,那都不是事,使用ide開發工具開啟sourcetree裡的專案即可。