雖說在本命年的單身汪並不是一帆風順,但從上海到杭州,跳槽找工作倒還是特別順暢,一度讓我有種錯覺今年Android行情怎麼這麼好,後來一想,可能是我變(bu)強(yao)了(lian)。這不,又來到新公司了,入職第一天,一切準備妥當,向部門的前輩要到了專案的Git地址,打算先熟悉公司程式碼。於是我極其熟練的開啟Sourcetree,準備clone。結果被前輩狠狠的鄙視了一把:“Android Studio那麼強大,你怎麼還用這種工具!”這是原話,於是當晚我便踏上了在Android Studio使用Git之路。果然很強呀,久久不能平靜,於是邊學邊記錄,在兩週的熟悉之後,決定在此做個總結。
安裝與配置
先說下我的操作環境:macOS、Android Studio是3.1.4、Git版本是2.15.1
安裝Git
因為是很久以前就安裝過了,所以這裡給個連結:安裝Git,也可以自己百度,谷歌自行安裝。 安裝成功之後,可以在命令列裡輸入下面的命令來配置自己的姓名和郵箱:
git config --global user.name "姓名"
git config --global user.email "郵箱"
Android Studio上配置Git
首先在AS上開啟Preferences(command + ,
),接著點選Version Control --> Git
在Path To Git Executable
上輸入Git的存放位置,如下圖:

Test
按鈕,如果配置成功會出現下面的成功提示:

配置GitHub賬號
按照下圖配置你的GitHub賬號,輸入完成之後再點選Test
按鈕,如果賬號密碼正確的話也會提示成功

本地倉庫相關操作
好,既然配置OK了。本地玩一下先,看看怎麼建立本地倉庫、如何提交、怎麼增刪改查本地的分支,怎麼合併本地分支,先從這些基本操作入手。
建立本地倉庫
對新建的專案或者寫好的專案,都可以通過如下操作進行。
點選選單欄上的VCS
,進行下面的操作:



忽略檔案
git在初始化一個倉庫的時候,都會自動生成一個.gitignore
檔案,這個檔案就是用來忽略那些不用加到倉庫的檔案。我們這個工程中也生成了兩個.gitignore
檔案。一般情況下,可以不做修改,如果有需求也可以修改:

新增檔案
因為是新專案還沒有將檔案加入倉庫,所以這些檔名才都是紅色,我們可以使用Android Studio的add方式進行新增,有4種,我們們這裡可以隨便使用一種,比如選中專案的根目錄,右鍵選中Git
,再選擇Add
:

Yes
便可以:

提交檔案
這個很簡單,我們可以使用commmand + k
,會出現commit的視窗。這時,便可以選擇我們們想要提交的檔案,填寫提交的資訊,在Author
那裡可以填寫提交本次提交的操作者名字,如果不填寫的話,就會預設是之前配置Git的姓名和郵箱。

Commit
之後,檔名的顏色就會再次變為白色啦,提交成功之後點選我們們AS螢幕下方LogCat
旁邊的Version Control
工具按鈕,還可以發現很多便利的操作,像Local Changes
可以檢視有哪些本地檔案發生了改變,Log
可以看到這個倉庫的提交資訊,Console
便是控制檯,很貼心有木有?對於習慣命令列的童鞋可以直接在這裡用git命令進行操作

檢視當前分支
檢視都是最簡單的,在AS上也是如此,在主介面的右下角顯示Git:master
就表明當前的分支是master分支,沒有建立新分支的情況下,預設便是master分支。

建立本地分支
我們都知道,master分支是用於產品釋出並且已經封版穩定的,在平時的開發中是不會直接使用master,我們一般會有一個dev分支進行開發,如果需要加新功能,還會在dev分支中再建立一條擁有該功能的分支,名字可以隨意。
在AS中我們可以非常方便的管理我們的分支,依然是在主介面的右下角,點選當前分支,選中+ New Branch
:

dev
,勾選Checkout branch
(預設是勾選狀態)再點選OK
,這樣就將dev分支建立好了,並且會處於該分支中,如果有新功能也可以以同樣的步驟建立其他分支,可以看到我們現在有三個分支:master、dev、dev1:

切換本地分支
選中其他分支,點選Checkout
便可以完成切換,so easy~

合併本地分支
當我們在dev分支完成某個功能,或者修復某個Bug,提交後如何合併到master分支呢?這裡做個最簡單的操作,我們在dev分支修改了activity_main的檔案裡的TextView的文案顯示,然後add
-->Commit
,再切換到master分支,選中dev分支點選Merge
,就將本地dev分支合併到本地master分支了:

刪除本地分支
好,我們新功能完成了,Bug也修復了,這時那個分支便不再需要了。為了便於分支管理,我們可以將該分支刪掉,如下圖,選中dev1分支,點選Delete
,拜拜了,您嘞,直接幹掉。

遠端倉庫相關操作
建立遠端倉庫
一般我們在工作中,如果不是新專案的話,專案的Git地址都是有的可以直接找負責人要,建立遠端倉庫其實也很簡單,無論在GitHub、GitLab或者碼雲上一般都是Create a new repository
,都是比較簡單的小白式操作,但是在工作中需要加相關許可權,就不細緻講了。之前一直在碼雲上玩,本次決定在GitHub上,直接在GitHub上建立了一個新的公開庫:

clone專案
使用Git clone專案到本地是非常簡單的,熟悉專案程式碼的第一步,首先得有專案。在剛才建立好的倉庫中,點選Clone or download
,再點選地址旁邊的那個小書頁一樣的圖示複製地址即可:

VCS
-->Git
-->Clone
,然後在位址列把剛才複製的地址貼上上去:


將程式碼推送到遠端倉庫
一般情況下,我們clone下來的倉庫裡都是以前的專案,我們便可以熟悉程式碼,或者正常開發了,如果是新倉庫,我們便可以在此倉庫下建立Android專案,建立好之後,我們可以add
-->Commint
進行提交,再使用快捷鍵command + shift + k
進行Push
操作:

拉取遠端倉庫變動程式碼
在開發中,同一個專案一般是團隊一起開發的,所以我們也要養成好的習慣,Commit
之後,在Push
之前我們要習慣性的Pull
一下程式碼:點選選單欄的VCS
-->Git
-->Pull
,點選重新整理按鈕之後再選擇所要Pull
的遠端倉庫:

Push
,一定要保證遠端倉庫,拉下來的程式碼是能完美執行的。
建立遠端分支
直接Push,我們會發現Push帶遠端master上,這裡我們可以修改:



合併遠端分支
這個有兩種方法,可以在GitHub上進行合併,也可以在AS上分別Push到不同的遠端分支,感覺比命令列簡單啊有木有。很明顯的兩條分支融匯一點:

刪除遠端分支
點選 origin/dev
,直接刪除就好了。

其他重要操作
解決衝突
衝突嘛,在所難免的,基本上每天或者定期選一個時間和同事一起進行程式碼的合併是最好的啦,可以一定程度上避免問題出現,這裡演示一下,在AS上我們怎麼解決衝突,同時修改 REDEME.md
。在Pull
的時候發現衝突:

Merge
:

X
和>>
符號,點選X
表示不需要這一行的修改,點選>>
表示接受這一行的修改。我們也可以像在編輯器中那樣複製、貼上、編輯內容,解決之後可以點選Apply
進行儲存,如果你不想儲存,那就點選Abort
終止此次修改。這裡我們們都要(小孩子才做選擇,我是成年人,我都要,哼),然後再執行專案,看是否有問題,如果確保沒有問題了就可以再次
Commit
-->Push
完成之前的操作。檢視Log也可以看到每次的合併日誌:

建立Tag
git上的標籤一般用於標記版本,例如,當釋出新版本後,我們將該版本的程式碼打上Tag,方便區分和管理。
打Tag前肯定要將程式碼提交到遠端倉庫上,正常操作之後,我們繼續VCS
-->Git
-->Tag
:


Tag Name
表示Tag名稱Commmit
裡填提交記錄id,這個id可以在Log中檢視:

點選
Validate
可以檢視指定提交記錄的變動。Message
裡是描述這個Tag資訊的。最後都填好後,點選
Create Tag
,便會建立本地Tag,此時並沒有提交到遠端噢:

Push
,這裡要注意,一定要勾選Push Tag
,分支選擇All
或者Current Branch
都行的,根據需求來。


程式碼回滾
有意思的來了,如果新開發了一個功能,上線後發現很雞肋,這個功能直接砍掉,我們該怎麼辦呢,這個時候就需要Git的回退了,AS中也為我們提供了兩種回退方式:Git revert
和Git reset
。
Git Revert
我們可以開啟Log找到那個功能的提交記錄,點選Revert


Git Reset
我們可以開啟Log找到那個功能的提交記錄,點選Rest Current Branch to Here...

Soft
、Mixed
、Hard
、Keep
。

Soft
:檔案內容不會變化,之前提交記錄的修改還是在暫存區,可以直接再提交一次。Mixed
:檔案內容不會變化,之前提交記錄的修改不在暫存區,需要新增到暫存區才能提交。Hard
:檔案會回滾到我們選定的提交記錄的程式碼狀態,之前提交記錄的修改和還沒來得及提交的修改都會丟失。Keep
:檔案會回滾到我們選定的提交記錄的程式碼狀態,之前提交記錄的修改會丟失,但還沒來得及的提交的修改可以儲藏(Stash)起來,待重置之後反儲藏(Unstash)恢復。
其實無論選擇哪個,這個提交記錄都將刪除。
後記
因為工作需要,所以也是儘可能的熟悉這些基本操作,更多高階的玩法可能還需要以後慢慢挖掘,Android Studio更多的功能也需要慢慢掌握。