Android 程式碼版本控制Git
引言:對於Git的使用已經有一段時間了。不會太多的命令列操作,主要使用基於Android Studio和Eclipse對git進行使用。倉庫的建立,程式碼的提交、更新、衝突解決等等。
時間:2016年7月23日12:12:27
作者:JustDo23
版本:[ Git ][ Windows ][ 2.6.4 ][ 2015-12-14 ]
官網:https://www.git-scm.com/
01. 下載安裝
開啟Git的官方網站選擇自己需要的平臺下載最新版的Git並進行安裝。
- Android Studio中配置
如果需要在Android Studio或Eclipse等開發工具中進行使用,都需要進行相關的配置。在Android Studio中指定git.exe的安裝路徑。
配置之後點選介面的Test按鈕進行測試。執行成功之後會提示當前安裝的Git版本資訊。
- 新建專案
在Android Studio中新建一個Android專案。
在Git伺服器GitBlit中同樣新建一個專案。
在以上截圖中,如果選擇了加入RedMe或加入.gitignore後期操作會變得複雜。
建立成功之後會跳轉一個提示介面。提示學習Git以及提示程式碼推送操作步驟。
- 倉庫連線
伺服器倉庫建立完成之後,需要在本地建立倉庫,同時將本地倉庫和伺服器的倉庫建立連線。
切換到剛才在AS上新建專案的根目錄下。
右鍵 選擇 Git Bash Here 。
執行init指令初始化倉庫。
git init
執行add指令,將本地倉庫與伺服器倉庫連線。
git remote add origin ssh://admi[email protected]:29418/JustGit.git
- 配置AS可以使用Git
在配置完成git.exe的路徑之後,還需要進行一步操作,配置之後在AS中才會有Git相關的選項。配置如下:
這一步操作其實在其他地方也有可能會遇到,例如,你從別的地方copy了一份含有git的程式碼。當你利用AS從本地開啟該專案之後就會發現沒有git相關操行的入口了。此時,進行上述的操作,就可以了。
操作之後,會在AS左下角的工具欄中發現多出一個Version Control的標籤。同時,許多檔案都使用紅色的。這一點是和SVN類似,檔案的顏色表明了檔案在Git倉庫中的不同狀態。
- 忽略檔案
Git下面有有個.gitignore的檔案。這個檔案主要是來配置Git將哪些檔案進行過濾,進行忽略的。Git是程式碼版本控制管理的工具,版本控制就是對一個檔案進行追蹤,進行監控,記錄各個版本資訊。需要忽略的檔案就不需要再進行監控了。
那麼,哪些檔案需要進行忽略呢?根據個人經驗,編譯生成的檔案,集合環境IDE自動生成的檔案等等都可以進行忽略。因為這些檔案每更換一個環境就會發生改變。關注這些檔案的版本變化,不僅沒有任何作用,反而會加重開發者的負擔,甚至影響工程的編譯和開發。所以忽略這些檔案以及忽略檔案的配置就顯得十分重要。
在AS中切換到Project檢視。下圖框選的部分都是需要進行忽略的。部分不忽略沒有關係,比如gradle檔案是可以不進行忽略。
- 配置忽略檔案
開啟根目錄下的.gitignore檔案,配置如下
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.idea
# 以下是可以選擇的 用#進行註釋
/gradle
gradle.properties
gradlew
gradlew.bat
開啟app目錄下的.gitignore檔案,配置如下
*.iml
/build
配置成功之後,被忽略的檔案顏色從紅色變成了黑色。說明配置成功。
- 新增程式碼到Git索引
忽略檔案配置完成之後,就可以放心大膽的將程式碼提交到本地倉庫了。提交之前需要進行新增追蹤,新增索引的操作。因為程式碼檔案顏色還是紅色,紅色代表沒有新增至索引,需要執行add操作。
繼續之前的操作,同樣在AS的Project檢視下,選擇專案的根目錄,然後在選單欄中選擇 VCS 選擇 Git 選擇 Add
這裡需要注意的是,選中專案根目錄之後,後續操作的操作範圍就是整個專案目錄結構。如果是選擇app目錄,那操作範圍縮小了。也就是說,先用滑鼠選擇操作範圍,然後再執行相應的操作。這一點還是比較重要的。
- 將程式碼提交本地倉庫
將檔案新增索引之後,檔案的顏色就從紅色變成了綠色。繼續之前操作,同樣選擇專案的根目錄,然後在選單欄中選擇 VCS 選擇 Git 選擇 Commit Directory
點選之後,會提示選擇需要Commit的檔案,以及填寫這一次Commit的描述
重要提示,這一步操作的時候,需要認真檢視自己提交的程式碼,確認需要提交的就勾選,否則就不要勾選提交。另外,這裡 Git 強與 SVN 的地方,就是提交描述是必須填寫的,不填寫就無提交。
點選Commit,進行提交,同時會提示一些警告,初學Git的人不用害怕。繼續點選Commit
提交成功之後,會在左下角的選單欄進行提示,介面提示的資訊是一定要注意看的。
走到這裡不要想著大功告成,程式碼提交完畢了。在Git中Commit操作只是將程式碼提交到本地倉庫了。將程式碼提交至伺服器倉庫,需要通過Push操作才可以。
- 更新伺服器程式碼
走到這一步,我們需要將伺服器倉庫中的程式碼進行更新。其實按照上邊操作伺服器現在仍然是個空倉庫,沒有任何程式碼可以進行更新。如果之前勾選了加入RedMe或加入.gitignore,那麼更新操作就十分必要了。這一步操作進行更新程式碼,一方面是為了確保萬無一失,另一方面是為了強調更新的重要性,強調在以後的使用過程中不要忘記了程式碼更新。
在Git中通過Pull操作來進行程式碼更新。在選單欄中選擇 VCS 選擇 Git 選擇 Pull
點選Pull之後,進入如下介面
點選ssh連線後邊的重新整理按鈕,提示進行連線,進行ssh安全連線
點選Yes進行連線,同時提示輸入密碼
很顯然,沒有任何可以進行更新的檔案。同時,我們看到本地倉庫和伺服器倉庫已經切實的建立了連線。
- 將本地倉庫程式碼提交到伺服器倉庫
上邊已經提到,程式碼還沒有提交到伺服器倉庫中。在Git中通過Push操作來進行程式碼更新。在選單欄中選擇 VCS 選擇 Git 選擇 Push
點選 Push之後,會提示之前Commit的記錄,將這些Commit的記錄push到伺服器,同時還會顯示每一次的Commit註釋。
點選 Push之後,需要輸入密碼。
點選 OK之後就開始將程式碼Push到伺服器,成功之後,會在右下角有提示。
接下來,開啟瀏覽器,檢視剛才提交的記錄。
- 小結
走到這一步,完成了git的配置,倉庫的建立,忽略檔案,程式碼更新,程式碼提交等等操作。最重要的就是從無到有,完成了第一次的程式碼提交。
以上所有操作都是使用管理員賬號admin進行操作的。接下來使用另一個賬號也就是搭建伺服器時候建立的賬號just,進行倉庫的克隆,程式碼的提交,更新,衝突的解決等等。
所以明確一下,兩個賬號相當與兩個開發者,通過git倉庫URL可以判斷使用的是哪個賬號。
賬號:admin
賬號:just
13. 倉庫的克隆
克隆伺服器倉庫到本地需要使用伺服器倉庫URL進行克隆,開啟瀏覽器,使用賬號just進行登入,登入之後可以獲取到該賬戶的倉庫URL。
開啟Android Studio點選File選擇New選擇Project from Version Control點選Git
彈出對話方塊,輸入倉庫的地址,點選Clone進行倉庫的克隆
輸入密碼,克隆之後,選擇使用一個新的介面進行開啟
開啟剛才克隆的專案之後,會提示Gradle目前沒有配置,點選OK進行自動配置
配置結束之後,克隆完畢。可以到磁碟目錄檢視剛才克隆的專案。
- 克隆方法
除了上邊的克隆方法外,還有其他一些路徑,總體而言都是大同小異。建議使用上邊提到的第一種方法。不推薦使用以下的方法。
第二種方法:
第三種方法:
其實這兩種是相同的,只不過路徑不同。點選Git之後,同樣是彈框提示輸入倉庫地址,不同的是,Clone之後會提示是否開啟,
開啟之後會提示進行gradle的配置
配置之後依舊是打不開的,因為沒有提交本地SDK路徑配置的檔案local.properties
所以,以這兩種方式clone之後,應該使用open an existing Android Studio Project的方法進行專案的開啟。
所以,這兩種開啟路徑並不進行推薦。
- 一個流程
將倉庫克隆之後,就可以進行開發。這裡簡單整理一個操作的流程:
更新伺服器程式碼
進行原生代碼開發
開發結束,更新伺服器程式碼
這一步更新之後,可能更新成功,也可能更新失敗。
更新失敗,可能是本地某個檔案有改動,伺服器這個檔案同樣有改動
更新成功或失敗,都可以繼續往下操作
原生代碼Commit
更新伺服器程式碼
本地帶Push到伺服器
結束
這個流程是筆者自己總結的,也是比較推薦,其中有多次程式碼更新,也是Pull操作。在多人協作開發的過程中,伺服器的程式碼是隨時有可能變更的,可以在瀏覽器中進行檢視,多次更新程式碼好處多多。
- 實踐
使用just賬號進行一個流程的實踐。
更新伺服器程式碼
在專案中新建一個類JustActivity,當這個類建好之後,會提示將其新增到Git索引
勾選Remember,以後新建的檔案會自動新增到索引。新增索引參考以上第八點講到的知識。
JustActivity的程式碼如下
/**
* 賬號:just
*/
public class JustActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("just", "This is just .");
}
}
更新伺服器程式碼,伺服器沒有任何變動,這裡更新不下東西。更新之後,會在介面左下角工具欄中顯示資訊,Version Control的標籤內顯示更新的檔案。
Commit操作,參考第九點講解
更新程式碼
Push操作,參考第十一點講解
結束
提交之前需要明確當前使用者對伺服器倉庫是否有許可權,沒有許可權需要進行許可權的新增
提交之後,開啟瀏覽器,檢視提交的記錄。
開啟賬戶admin的專案,進行程式碼更新。
- 衝突解決
衝突的出現:
修改了同一個檔案的不同地方
這種衝突解決比較方便,更新之後會自動進行合併。
修改了同一個檔案的同一地方
這種衝突需要手動進行合併。
為了演示衝突的解決,兩個賬號修改進行同一檔案同一行程式碼,賬號admin先提交程式碼,賬號just更新遇到衝突,並進行解決。按照如下操作:
兩個賬號中MainActivity的程式碼如下
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
賬號admin在MainActivity中新增一行程式碼,結果如下
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("conflict", "This is admin");
}
}
賬號just在MainActivity中新增一行程式碼,結果如下
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("conflict", "This is just");
}
}
賬號admin進行程式碼的更新與提交。沒有衝突,賬號admin很輕鬆的將程式碼提交至伺服器,開啟瀏覽器可以看到提交記錄。
賬號just進行程式碼的更新。因為本地檔案和伺服器檔案都有改動。所以提示更新失敗了。
賬號just進行程式碼的Commit
賬號just進行程式碼的更新。會彈框提示程式碼衝突。
同時,可以看到檔案中也有進行標識衝突的地方
進行程式碼合併可以手動在程式碼檔案中進行修改,也可以點Merge進行對比合並。
通過介面的 雙向箭頭 和 叉號進行程式碼的合併
點選介面的Apply完成合並
賬號just合併結束,沒有任何錯誤的時候,需要進行程式碼的Commit
賬號just進行Push操作,提交程式碼
開啟瀏覽器檢視提交記錄
賬號admin進行程式碼更新
衝突解決完畢。合併結果如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("conflict", "This is admin");
Log.e("conflict", "This is just");
}
}
18. 檢視歷史
如有需要檢視某個檔案的歷史記錄,選中檔案,右鍵選擇Git選擇Show History
- 檔案還原
檔案還原的功能其實就是用來幫我們後悔,或者是回退的操作。這裡舉出兩個使用的地方:
如有對某個檔案進行修改之後,不想將其Commit,希望還原回舊版本,選中檔案,右鍵選擇Git選擇Revert
對於已經新增add的檔案,如果你不想繼續對其新增索引,可以進行撤銷add,方法就是還原
後記
Git的使用基本完成
對於Git命名行操作,並沒有接觸太多
Git中的分支操作沒有涉及