1、SourceTree
-
簡介
- SourceTree 是擁有可視化界面的項目版本控制軟件,適用於 git 項目管理,window、mac 均可用。
-
官網下載地址
-
其它下載地址
- Sourcetree v2.7 for Mac,密碼:41km。
- Sourcetree v2.6.3a for Mac,密碼:5qmx。
- SourceTree v2.4.1a for Mac,密碼:55nx。
2、使用方法
2.1 Clone 項目到本地
-
打開 SourceTree,點擊 New Repository => Clone from URL, 然后復制倉庫地址到 SourceTree 中的 Source URL 中,本地倉庫的位置和名稱可以隨意修改。點擊 clone 即可。這樣就能把遠程倉庫中的項目 clone 到本地了。

2.2 SourceTree 主界面
-
clone 項目完成后,SourceTree 中看到如下:
-
上面的任務欄分別有 commit(提交)、Pull(更新代碼)、Push(推送代碼)、Fetch(抓取代碼),Branch(新建分支)、Merge(合並代碼)、Stash(暫存代碼狀態)。
-
左側中的 WORKSPACE 表示本地的工作區,File status 中可以看到本地文件的改變狀態,History 中是 commit 歷史。下面的 BRANCHES 顯示的是本地的分支。REMOTES 顯示的是遠程的分支。
-
下方的狀態欄顯示本次提交的修改文件。以及修改文件中修改的代碼。

-
2.3 創建新項目
-
如果上述是別人的一個項目,那么此時你就可以在本地進行開發了。但是如果是你自己要在遠程創建自己的項目,那么下面你要在本地先創建一個項目。以 Xcode 創建一個 iOS 項目為例,創建的項目名稱為UseSourceTree_iOS. 然后把該項目拖入到 clone 下來的本地倉庫中。拖入完成后,SourceTree 就顯示如下。

-
可以在 SourceTree 中可以看到工作區中的改變,比如哪些文件被修改,以及修改的內容。
2.4 暫存文件
-
本地做了修改后,可以看到文件都還是在 Unstaged files 中,勾選你要提交的文件,然后文件就會到 Staged file 中,這個操作對應的命令就是 git add ,即把文件從工作區放到暫存區。操作完成后,如下所示。

2.5 Commit 提交代碼
-
此時就可以進行 commit 操作了。點擊左上角的 commit。在 commit 的時候強烈推薦寫上注釋。

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

-
來到不同的分支,比如 master 分支,點擊不同的 commit History,可以查看到文件的修改,非常的方便。可視化工具對於 code review 非常有利。

2.6 Pull 更新代碼
-
本地完成 commit 之后,就需要向遠程倉庫提交代碼了,個人建議,在 Push 之前,先進行 Pull。
-
但是要注意,pull = fetch + merge,你拉取代碼的時候選擇的是 pull 還是 fetch,還是使用 rebase,這個要根據你的個人習慣,最主要的是要根據你團隊的 Git 工作流來操作。個人的建議是用 git pull --rebase 命令,相當於使用 git fetch + git rebase 命令,而不是使用 merge,這主要是為了保持樹結構和歷史的干凈(推薦去了解一下 git merge 和 git rebase 的區別)。
-
如果其他開發者向遠程倉庫提交了代碼,那么在你的 SourceTree 中就會顯示如下。

-
在你本地的 master 分支下,可以看到 1 behind,表示你本地的分支已經落后於遠程分支 1 commit 了,可以選擇 Pull 來更新代碼。
-
點擊上方的 Pull 拉取代碼。

-
在進行 PUll 的時候,可以選擇遠程的分支,同時如果勾選了最后一個 Rebase instead of merge,表示使用 rebase 命令,而不是 merge。
2.7 Push 推送代碼
-
完成更新代碼后,就可以向遠程提交代碼了。點擊上方的 Push,彈出如下對話框。

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

-
Push 完代碼后,可以在提交歷史中看到自己和別人的提交。

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

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

-
checkout 完成后,本地也就有 dev 分支了。

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

-
然后就發現遠程也有 release 分支了。你要確定是否有某個分支,你也可以去 Github 或者其他遠程服務器查看。

2.10 切換分支
- 在 SourceTree 中經常會出現 track 這個詞,表示“跟蹤”,表示本地某個分支跟蹤遠程某個對應的分支。所以,判斷是 ahead 還是 behind commit 的時候,都是去和 track 的那個分支進行比較的。雙擊本地的某個分支即可完成分支切換。
2.11 刪除分支
-
當然你也可以在 SourceTree 中刪除本地或者遠程的一個分支,刪除分支是個很謹慎的操作,需要慎重。

