作者簡(jiǎn)介? 原創(chuàng)微信公眾號(hào)郭霖 WeChat ID: guolin_blog
本篇來(lái)自溫斯渤的投稿,分享了如何在Android Studio使用Git米罚,十分詳細(xì),希望對(duì)大家有所幫助。
溫斯渤的博客地址:
http://wensibo.top
前言
本文較長(zhǎng)休傍,圖片很多很多毫蚓,流量黨慎入(建議電腦端查看)
使用 Git 已經(jīng)有一段時(shí)間了占键,但是之前都是使用?Git Bash,在 Android Studio上使用 Git 一開始不是很習(xí)慣元潘,就像用慣了 SVN 來(lái)使用 Git 一樣畔乙,琢磨了一段時(shí)間的 Android Studio,也看了我覺得為數(shù)不多但是很有質(zhì)量的介紹AS的書籍?《Android Studio實(shí)戰(zhàn) 快速翩概、高效地構(gòu)建Android應(yīng)用》牲距,強(qiáng)烈安利大家哦袖订!所以就寫了這篇文章跟大家一起學(xué)習(xí)如何在 Android Studio 高效地使用 Git。
另外一點(diǎn)需要說(shuō)明的就是本文中大量使用 Android Studio 的快捷鍵嗅虏,如果你不熟悉洛姑,可以看看我的另外一篇文章:
http://wensibo.top/2017/03/09/Android%20Studio%E5%BF%AB%E6%8D%B7%E9%94%AE%E6%80%BB%E7%BB%93/
安裝Git
我使用的是Windows,所以我這里只能介紹Windows下安裝Git的過(guò)程了皮服。
https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit
訪問(wèn)上面地址選擇符合你的版本楞艾,直接安裝就行了。
安裝完成之后龄广,在開始菜單中找到?Git-->Git Bash硫眯,如果出現(xiàn)類似下面的對(duì)話框的話就證明安裝成功了。
Git界面
安裝成功之后择同,需要配置一下你的信息两入,直接在上面的命令行中輸入以下命令:
注意:
1.將上方的?Your Name?換成你自己的名字,隨意起都行敲才。
2.將上方的?email@example.com?換成你自己的郵箱裹纳。
3.講一下?git config?命令的?--global參數(shù),用了這個(gè)參數(shù)紧武,表示你這臺(tái)機(jī)器上所有的 Git倉(cāng)庫(kù)都會(huì)使用這個(gè)配置剃氧,當(dāng)然也可以對(duì)某個(gè)倉(cāng)庫(kù)指定不同的用戶名和Email地址。
Android Studio配置Git
使用快捷鍵?Ctrl+Alt+S?打開 Settings阻星,接著點(diǎn)擊?Version Control --> Git?在?Path To Git Executable?上輸入 Git 的存放位置朋鞍,如下圖:
之后點(diǎn)擊旁邊的Test按鈕,如果出現(xiàn)如下的成功提示妥箕,說(shuō)明Git配置成功滥酥。
接著按照下圖配置你的 Github賬號(hào)密碼,輸入完成之后點(diǎn)擊 Test按鈕畦幢,如果賬號(hào)密碼都正確的話就會(huì)提示成功坎吻,那么就可以繼續(xù)往下走了:
創(chuàng)建本地倉(cāng)庫(kù)
不管你是剛剛新建的項(xiàng)目,亦或是已經(jīng)寫好的項(xiàng)目呛讲,進(jìn)行的操作都是一樣的禾怠。這里我以新建一個(gè)名為MyGit的項(xiàng)目為例子。
對(duì)于一個(gè)已經(jīng)新建好的項(xiàng)目贝搁,找到菜單欄上的 VCS吗氏,按照下圖進(jìn)行操作:
選擇項(xiàng)目的根目錄為git初始化的目錄:
初始化之后你會(huì)發(fā)現(xiàn)原本文件的文件名都是白色的,現(xiàn)在變成了棕色雷逆,這表示文件已經(jīng)被git跟蹤了弦讽,但是并沒有添加到倉(cāng)庫(kù)中:
忽略文件
我們知道,在 git 初始化一個(gè)倉(cāng)庫(kù)的時(shí)候會(huì)自動(dòng)生成一個(gè).gitignore文件,這個(gè)文件用來(lái)忽略那些不用加入到倉(cāng)庫(kù)的文件往产,在我們這個(gè)工程中總共生成了兩個(gè) .gitignore 文件被碗,分別是在項(xiàng)目根目錄下,以及在app文件夾下仿村。我們可以對(duì)這些文件進(jìn)行編輯锐朴,表示我們需要忽略哪些文件,但是一般情況下蔼囊,我們選擇默認(rèn)就好焚志,除非你有需要就進(jìn)行適當(dāng)?shù)男薷模?/p>
添加文件
添加文件就如 git 命令中的git add,在 Android Studio 中 add 的方式有四種畏鼓,但是都是大同小異酱酬,讓我來(lái)一一舉例:
1.選中項(xiàng)目的根目錄,右鍵選中Git云矫,再選中Add膳沽,如下圖:
2. 選中項(xiàng)目根目錄,點(diǎn)擊菜單欄中的VCS菜單让禀,選中Git–>Add挑社,如下圖:
3. 使用快捷鍵Alt+9,或者點(diǎn)擊屏幕下方的Version Control工具按鈕
打開版本控制的窗口堆缘,可以看到應(yīng)該是如下圖的樣子滔灶,該窗口有兩個(gè)下拉欄,一個(gè)是Default吼肥,用來(lái)記錄已經(jīng)添加的文件,另一個(gè)是 Unversioned files麻车,用來(lái)記錄已經(jīng)被跟蹤但是未添加的文件缀皱。
右鍵?Unversioned files,選中Git–>Add动猬,如下圖:
4. 使用快捷鍵Ctrl+Alt+A
add之后文件名變成了綠色啤斗,這是代表已經(jīng)添加進(jìn)倉(cāng)庫(kù)為文件,接下來(lái)就可以 commit 文件了赁咙,使用快捷鍵?Ctrl+K?或者 選中工程根目錄右鍵?Git-->Commit Directory?可以調(diào)出 commit 窗口钮莲,如下所示,在其中選擇你想要提交的文件彼水,填寫提交的信息崔拥,在Author文本框中可以填寫提交此次提交的操作者名字,如果不填寫的話凤覆,就會(huì)默認(rèn)是之前配置Github賬號(hào)的用戶名链瓦。可以看到,提交之后文件名重新變回了熟悉的白色慈俯。
首次提交
提交成功之后渤刃,你可以使用快捷鍵?Alt+9,或者點(diǎn)擊屏幕下方的 Version Control 工具按鈕贴膘,切換到Log菜單查看Log日志卖子,如下圖所示:
首次提交Log日志
如何clone項(xiàng)目
使用Git clone項(xiàng)目到本地中是很簡(jiǎn)單的,在Android Studio中也是如此刑峡,首先找到你喜歡的項(xiàng)目洋闽,fork到你自己的倉(cāng)庫(kù)之后,點(diǎn)擊Clone or Download按鈕氛琢,復(fù)制地址呐籽,如下圖所示:
接下來(lái)回到 Android Studio,按照下圖的操作可以打開clone的對(duì)話框捻勉,在地址欄中粘貼剛才復(fù)制的地址隘膘,點(diǎn)擊 Test按鈕,測(cè)試是否可以通過(guò)撮奏,如果成功俏讹,那么久可以點(diǎn)擊Clone導(dǎo)入項(xiàng)目了。
回到我們最開始講的MyGit項(xiàng)目畜吊,首先我們需要模仿一下在日常開發(fā)中使用Git的情形泽疆,例如我們經(jīng)常會(huì)在分支上進(jìn)行工作,所以熟練地掌握分支工作的流程以及技巧是十分重要的玲献,接下來(lái)我會(huì)使用具體的例子跟大家一起了解如何在 Android Studio 上使用分支進(jìn)行開發(fā)殉疼。
以下舉得例子將會(huì)圍繞Git的一種工作模式,即:Git Flow捌年,如果你對(duì)此不是很了解瓢娜,那么推薦阮一峰老師的文章:
http://www.ruanyifeng.com/blog/2015/12/git-workflow.html
Git flow
Git flow是廣泛采用的一種工作流程
他的主要特點(diǎn)有兩個(gè):
1.首先,項(xiàng)目存在兩個(gè)長(zhǎng)期分支:
主分支master
開發(fā)分支dev
前者用于存放對(duì)外發(fā)布的版本礼预,任何時(shí)候在這個(gè)分支拿到的眠砾,都是穩(wěn)定的分布版;后者用于日常開發(fā)托酸,存放最新的開發(fā)版褒颈。
2. 其次,項(xiàng)目存在三種短期分支
功能分支(feature branch)
補(bǔ)丁分支(hotfix branch)
預(yù)發(fā)分支(release branch)
新增功能1:顯示HelloWorld
正如我們?cè)诮榻B Git flow 介紹的励堡,master 分支只是用于產(chǎn)品的發(fā)布谷丸,在平時(shí)的開發(fā)中是不會(huì)使用它的,而只會(huì)使用 dev分支念秧,但是如果我們有了新的功能淤井,一般是會(huì)在 dev分支 中在創(chuàng)建一條該功能的分支,所以我們應(yīng)該這樣做。
創(chuàng)建dev币狠、feature-1分支游两,并且我們需要轉(zhuǎn)到feature-1分支上
在 Android Studio 中,我們可以很方便的管理分支漩绵,在主界面的右下角贱案,點(diǎn)擊Git可以出現(xiàn)當(dāng)前的分支,默認(rèn)為 master止吐,我們選中?New Branch宝踪,如下圖所示:
add_branch_feature-1
在彈出的對(duì)話框中我們輸入?feature-1,點(diǎn)擊OK碍扔,這樣我們不僅新建了 feature-1 分支瘩燥,并且正處于該分支中,接下來(lái)按照同樣的方法創(chuàng)建dev分支不同,如果不出意外的話厉膀,我們現(xiàn)在應(yīng)該是處于dev分支上,但是因?yàn)槲覀儸F(xiàn)在要開發(fā)功能1二拐,所以必須轉(zhuǎn)換到feature-1分支上服鹅,按照下圖的操作,我們能夠回到feature-1分支上百新。
接下來(lái)打開Log企软,我們應(yīng)該能夠看到如下的情景:
可以看到我們現(xiàn)在有三個(gè)分支:master、dev饭望、feature-1仗哨,但是AS提示我們應(yīng)該有四條分支,其實(shí)HEAD就是當(dāng)前活躍分支的游標(biāo)铅辞。形象的記憶就是:你現(xiàn)在在哪兒藻治,HEAD 就指向哪兒,所以 Git 才知道你在那兒巷挥!不過(guò) HEAD 并非只能指向分支的最頂端,實(shí)際上它可以指向任何一個(gè)節(jié)點(diǎn)验靡,它就是 Git 內(nèi)部用來(lái)追蹤當(dāng)前位置的標(biāo)記倍宾。我們可以使用下面的圖來(lái)演示當(dāng)前分支的情況:
完成功能1
好了,功能1 編寫完成胜嗓,那么就提交吧高职!老方法:Ctrl+K 進(jìn)行提交,按照下圖填寫提交信息辞州,每一次的提交信息最好能夠詳細(xì)并且格式規(guī)范怔锌,這樣以后再查看Log的時(shí)候就會(huì)比較方便。
點(diǎn)擊Commit按鈕提交完畢之后,可以看到現(xiàn)在的log圖變成了下圖:
我們可以打開Log圖的右側(cè)埃元,他列出了目前正在被Git跟蹤的所有文件涝涤,我們選中MainActivity.java,點(diǎn)擊上邊的第二個(gè)按鈕Show Diff(顯示差異):
在彈出的界面中可以顯示該文件的 當(dāng)前版本 和 master分支 中的該文件的差異阔拳,我們可以使用Esc快捷鍵退出該界面,如下圖所示:
將feature-1分支合并到dev分支上
如下圖所示类嗤,選中dev分支并選擇checkout:
你會(huì)發(fā)現(xiàn)現(xiàn)在代碼回到了最開始的狀態(tài)糊肠,現(xiàn)在選中 feature-1 分支并選中 merge,準(zhǔn)備將 feature-1 分支合并到 dev 分支上:
再來(lái)重新看一下Log圖遗锣,他長(zhǎng)下面這樣货裹,可以看到現(xiàn)在feature-1分支已經(jīng)與dev分支合并,并且現(xiàn)在他們是處于同一狀態(tài)的:
最后的最后精偿,我們需要?jiǎng)h除已經(jīng)完成任務(wù)的feature-1分支弧圆,以免分支過(guò)多管理混亂。
重點(diǎn)來(lái)了
首先我們繼續(xù)增加?feature-2 與?feature-3(跟?feature-1 一樣还最,這里就不贅述)墓阀。但是老板說(shuō)了,新開發(fā)的功能3不喜歡拓轻,需要?jiǎng)h除了功能3斯撮,咋辦呢?
這里就需要講到Git的回退了扶叉,在 Android Studi o中提供了兩種回退的方式:Git revert 以及 Git reset勿锅。
Git revert
Git revert 可以將版本回退到上一步,但是會(huì)新增一個(gè)提交枣氧,他的流程就像下面這幅圖一樣:
1. 首先打開Log溢十,找到功能3的提交,右鍵選擇復(fù)制哈希碼(Copy Revision Number)达吞,如下圖所示:
2.打開Android Studio的終端Terminal张弛,他就在Version Control的旁邊,之后輸入以下命令按回車鍵:
//很復(fù)雜的數(shù)字字母就是我們剛才復(fù)制的哈希碼
git revert 9c834d8c66598fb132a0cc8e4c1f8c341d058f3e
如下圖所示:
3.之后終端會(huì)列出此次提交的具體信息酪劫,如果確認(rèn)要回退吞鸭,請(qǐng)輸入:q保存此次操作并且退出會(huì)話
現(xiàn)在你可以看到,他確實(shí)增加了一次提交覆糟,并且回到了上一版的內(nèi)容刻剥,Log應(yīng)該是這樣的:
Git reset
相比之下,Git reset?就要干脆的多滩字,與 Git revert 的功能一樣造虏,它也可以將代碼恢復(fù)到上一個(gè)版本御吞,但是不會(huì)新增一次提交,他的流程如下:
因?yàn)槲覀冃枰獎(jiǎng)h除 功能3漓藕,并且讓Log看起來(lái)并沒有 revert 的這一次提交陶珠,所以我們應(yīng)該在dev分支上后退兩步,確實(shí)是這樣的對(duì)吧撵术!
1.點(diǎn)擊菜單欄上的?VCS-->Git-->Reset HEAD背率,打開對(duì)話框,在 To Commit 文本框中輸入?HEAD~2嫩与,就像下圖這樣:
2.點(diǎn)擊Reset按鈕之后寝姿,你可以發(fā)現(xiàn)Log變了,變回原來(lái)那個(gè)熟悉的畫面了:
master分支被修改
突然你發(fā)現(xiàn)你的同事在 master 分支上提交了兩次划滋,分別是增加了 功能1 和 功能4饵筑,但是其中的 功能1 很顯然?HelloWorld?被寫成了?WorldHello,例如這樣的:
提交更改处坪,之后Log應(yīng)該是這樣的:
我們依舊用演示圖表示當(dāng)前分支的發(fā)展情況:
Rebase
老板說(shuō)了根资,master 分支只要 功能4 不需要 功能1,而 dev 分支上的 功能1同窘、2 全部都要合并到 master 分支上玄帕。那么這個(gè)時(shí)候我們就可以使用 rebase 了。
git rebase 用于把一個(gè)分支的修改合并到當(dāng)前分支∠氚睿現(xiàn)在我們切換到 master 分支裤纹,將 dev 上的做修改加入到 master 中,所以我們選擇 rebase丧没,在Android Studio中提供了功能十分強(qiáng)大的rebase鹰椒。
1.點(diǎn)擊菜單欄上的VCS–>Git–>Rebase,如下圖所示:
2.在彈出的對(duì)話框中呕童,我們?cè)贠nto的下拉欄中選中dev分支漆际,表示我們需要將master分支rebase到該分支下
3.點(diǎn)擊Rebase之后,你會(huì)發(fā)現(xiàn)Android Studio彈出對(duì)話框夺饲,顯示master分支的兩次提交奸汇,需要我們做出選擇,如下圖所示:
4.因?yàn)槲覀儾恍枰猰aster分支上的 功能1 但是需要 功能4往声,所以在 功能1 的提交上我們選擇 skip(跳過(guò)這個(gè)提交)茫蛹,在 提交4 上選擇 pick(挑選此次這個(gè)提交),點(diǎn)擊?Start Rebasing烁挟,我們可以看到又有對(duì)話框彈出,此次是讓我們對(duì)每個(gè)文件進(jìn)行挑選骨坑,如下圖所示:
5.對(duì)于每一個(gè)文件撼嗓,你可以選擇接受你的那一部分柬采,或者接受另一只分支上的內(nèi)容,又或者你可以點(diǎn)擊Merge對(duì)文件進(jìn)行篩選且警。我們點(diǎn)擊Merge按鈕粉捻,可以看到有三個(gè)文件呈現(xiàn)在屏幕上。其中中間的文件是最后的結(jié)果斑芜,左邊的為當(dāng)前分支master分支肩刃,右邊的為dev分支,你還可以發(fā)現(xiàn)在修改過(guò)的每一行中都存在一個(gè)X >>符號(hào)杏头,點(diǎn)擊X表示不需要這一行的修改盈包,點(diǎn)擊>>表示接受這一行的修改,我們甚至還可以像在編輯器中那樣復(fù)制醇王、粘貼呢燥、編輯內(nèi)容,我們最終作出的選擇如下圖所示寓娩,之后可以點(diǎn)擊Apply進(jìn)行保存叛氨,如果你不想保存,那就點(diǎn)擊Abort終止此次修改:
6.對(duì)于剩下的兩個(gè)文件也做相同的處理棘伴,之后我們可以看到master分支已經(jīng)有了dev分支的功能1和功能2和自身的功能4寞埠,并且去掉了自己之前的功能1,可以看一下Log焊夸,如下所示:
我們依舊使用演示圖來(lái)表示最后的分支情況:
推送到遠(yuǎn)程倉(cāng)庫(kù)
推送很簡(jiǎn)單仁连,你可以導(dǎo)航到菜單欄?VCS-->Import Into Version Control -->Share Project on Github,如下圖所示:
在彈出的對(duì)話框中填寫遠(yuǎn)程倉(cāng)庫(kù)的名稱淳地,點(diǎn)擊Share:
之后你就可以在你的Github上面看到這一次的推送了怖糊。
本地修改同步到遠(yuǎn)程倉(cāng)庫(kù)
現(xiàn)在我需要在工程中加入一些文件,例如說(shuō)我新建了一個(gè)?screenshots?文件夾颇象,并在其中添加了這篇文章需要用到的截圖伍伤,那么如何將這些文件一起同步到遠(yuǎn)程倉(cāng)庫(kù)呢?其實(shí)很簡(jiǎn)單遣钳。
1.使用快捷鍵Alt+9或者點(diǎn)擊工具按鈕打開?Version Control扰魂,右鍵Unversioned Files,選擇Git-->Add蕴茴,將所有文件加入Git中劝评,如下圖:
2.右鍵Default,選擇Commit所有的文件之后填寫提交信息倦淀,如下圖:
3.使用快捷鍵 Ctrl+Shift+K 或者右鍵工程根目錄蒋畜,選擇push項(xiàng)目,如下圖所示:
4.在彈出的對(duì)話框中點(diǎn)擊Push按鈕撞叽,就可以將所做的修改同步到遠(yuǎn)程倉(cāng)庫(kù)了姻成,如下圖:
5.對(duì)于修改過(guò)的文件想要同步到遠(yuǎn)程倉(cāng)庫(kù)插龄,按照同樣的步驟就行了,這里不再贅述了科展。
后記
這篇文章有點(diǎn)長(zhǎng)均牢,圖也很多,我也寫了很久才睹,有的時(shí)候思路不清晰也混了(尷尬臉)徘跪,所以難免會(huì)有錯(cuò)誤,還請(qǐng)大家批評(píng)指正琅攘,大家互相學(xué)習(xí)垮庐,希望你能夠?qū)W到更多Android Studio的知識(shí)。
項(xiàng)目地址:
https://github.com/Wensibob/MyGit
文章原創(chuàng)作者GuoLin 書籍推薦
郭林大神原創(chuàng)android 書籍:《第一行代碼 android》