1. 程式人生 > >Android 程式碼版本控制Git

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並進行安裝。

  1. Android Studio中配置

如果需要在Android Studio或Eclipse等開發工具中進行使用,都需要進行相關的配置。在Android Studio中指定git.exe的安裝路徑。

配置之後點選介面的Test按鈕進行測試。執行成功之後會提示當前安裝的Git版本資訊。

  1. 新建專案

在Android Studio中新建一個Android專案。
在Git伺服器GitBlit中同樣新建一個專案。

在以上截圖中,如果選擇了加入RedMe或加入.gitignore後期操作會變得複雜。

建立成功之後會跳轉一個提示介面。提示學習Git以及提示程式碼推送操作步驟。

  1. 倉庫連線

伺服器倉庫建立完成之後,需要在本地建立倉庫,同時將本地倉庫和伺服器的倉庫建立連線。

切換到剛才在AS上新建專案的根目錄下。
右鍵 選擇 Git Bash Here 。

執行init指令初始化倉庫。

git init
執行add指令,將本地倉庫與伺服器倉庫連線。

git remote add origin ssh://admi[email protected]:29418/JustGit.git

  1. 配置AS可以使用Git

在配置完成git.exe的路徑之後,還需要進行一步操作,配置之後在AS中才會有Git相關的選項。配置如下:

這一步操作其實在其他地方也有可能會遇到,例如,你從別的地方copy了一份含有git的程式碼。當你利用AS從本地開啟該專案之後就會發現沒有git相關操行的入口了。此時,進行上述的操作,就可以了。

操作之後,會在AS左下角的工具欄中發現多出一個Version Control的標籤。同時,許多檔案都使用紅色的。這一點是和SVN類似,檔案的顏色表明了檔案在Git倉庫中的不同狀態。

  1. 忽略檔案

Git下面有有個.gitignore的檔案。這個檔案主要是來配置Git將哪些檔案進行過濾,進行忽略的。Git是程式碼版本控制管理的工具,版本控制就是對一個檔案進行追蹤,進行監控,記錄各個版本資訊。需要忽略的檔案就不需要再進行監控了。

那麼,哪些檔案需要進行忽略呢?根據個人經驗,編譯生成的檔案,集合環境IDE自動生成的檔案等等都可以進行忽略。因為這些檔案每更換一個環境就會發生改變。關注這些檔案的版本變化,不僅沒有任何作用,反而會加重開發者的負擔,甚至影響工程的編譯和開發。所以忽略這些檔案以及忽略檔案的配置就顯得十分重要。

在AS中切換到Project檢視。下圖框選的部分都是需要進行忽略的。部分不忽略沒有關係,比如gradle檔案是可以不進行忽略。

  1. 配置忽略檔案

開啟根目錄下的.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
配置成功之後,被忽略的檔案顏色從紅色變成了黑色。說明配置成功。

  1. 新增程式碼到Git索引

忽略檔案配置完成之後,就可以放心大膽的將程式碼提交到本地倉庫了。提交之前需要進行新增追蹤,新增索引的操作。因為程式碼檔案顏色還是紅色,紅色代表沒有新增至索引,需要執行add操作。

繼續之前的操作,同樣在AS的Project檢視下,選擇專案的根目錄,然後在選單欄中選擇 VCS 選擇 Git 選擇 Add

這裡需要注意的是,選中專案根目錄之後,後續操作的操作範圍就是整個專案目錄結構。如果是選擇app目錄,那操作範圍縮小了。也就是說,先用滑鼠選擇操作範圍,然後再執行相應的操作。這一點還是比較重要的。

  1. 將程式碼提交本地倉庫

將檔案新增索引之後,檔案的顏色就從紅色變成了綠色。繼續之前操作,同樣選擇專案的根目錄,然後在選單欄中選擇 VCS 選擇 Git 選擇 Commit Directory

點選之後,會提示選擇需要Commit的檔案,以及填寫這一次Commit的描述

重要提示,這一步操作的時候,需要認真檢視自己提交的程式碼,確認需要提交的就勾選,否則就不要勾選提交。另外,這裡 Git 強與 SVN 的地方,就是提交描述是必須填寫的,不填寫就無提交。

點選Commit,進行提交,同時會提示一些警告,初學Git的人不用害怕。繼續點選Commit

提交成功之後,會在左下角的選單欄進行提示,介面提示的資訊是一定要注意看的。

走到這裡不要想著大功告成,程式碼提交完畢了。在Git中Commit操作只是將程式碼提交到本地倉庫了。將程式碼提交至伺服器倉庫,需要通過Push操作才可以。

  1. 更新伺服器程式碼

走到這一步,我們需要將伺服器倉庫中的程式碼進行更新。其實按照上邊操作伺服器現在仍然是個空倉庫,沒有任何程式碼可以進行更新。如果之前勾選了加入RedMe或加入.gitignore,那麼更新操作就十分必要了。這一步操作進行更新程式碼,一方面是為了確保萬無一失,另一方面是為了強調更新的重要性,強調在以後的使用過程中不要忘記了程式碼更新。

在Git中通過Pull操作來進行程式碼更新。在選單欄中選擇 VCS 選擇 Git 選擇 Pull

點選Pull之後,進入如下介面

點選ssh連線後邊的重新整理按鈕,提示進行連線,進行ssh安全連線

點選Yes進行連線,同時提示輸入密碼

很顯然,沒有任何可以進行更新的檔案。同時,我們看到本地倉庫和伺服器倉庫已經切實的建立了連線。

  1. 將本地倉庫程式碼提交到伺服器倉庫

上邊已經提到,程式碼還沒有提交到伺服器倉庫中。在Git中通過Push操作來進行程式碼更新。在選單欄中選擇 VCS 選擇 Git 選擇 Push

點選 Push之後,會提示之前Commit的記錄,將這些Commit的記錄push到伺服器,同時還會顯示每一次的Commit註釋。

點選 Push之後,需要輸入密碼。

點選 OK之後就開始將程式碼Push到伺服器,成功之後,會在右下角有提示。

接下來,開啟瀏覽器,檢視剛才提交的記錄。

  1. 小結

走到這一步,完成了git的配置,倉庫的建立,忽略檔案,程式碼更新,程式碼提交等等操作。最重要的就是從無到有,完成了第一次的程式碼提交。

以上所有操作都是使用管理員賬號admin進行操作的。接下來使用另一個賬號也就是搭建伺服器時候建立的賬號just,進行倉庫的克隆,程式碼的提交,更新,衝突的解決等等。

所以明確一下,兩個賬號相當與兩個開發者,通過git倉庫URL可以判斷使用的是哪個賬號。

賬號:admin
賬號:just
13. 倉庫的克隆

克隆伺服器倉庫到本地需要使用伺服器倉庫URL進行克隆,開啟瀏覽器,使用賬號just進行登入,登入之後可以獲取到該賬戶的倉庫URL。

開啟Android Studio點選File選擇New選擇Project from Version Control點選Git

彈出對話方塊,輸入倉庫的地址,點選Clone進行倉庫的克隆

輸入密碼,克隆之後,選擇使用一個新的介面進行開啟

開啟剛才克隆的專案之後,會提示Gradle目前沒有配置,點選OK進行自動配置

配置結束之後,克隆完畢。可以到磁碟目錄檢視剛才克隆的專案。

  1. 克隆方法

除了上邊的克隆方法外,還有其他一些路徑,總體而言都是大同小異。建議使用上邊提到的第一種方法。不推薦使用以下的方法。

第二種方法:

第三種方法:

其實這兩種是相同的,只不過路徑不同。點選Git之後,同樣是彈框提示輸入倉庫地址,不同的是,Clone之後會提示是否開啟,

開啟之後會提示進行gradle的配置

配置之後依舊是打不開的,因為沒有提交本地SDK路徑配置的檔案local.properties

所以,以這兩種方式clone之後,應該使用open an existing Android Studio Project的方法進行專案的開啟。

所以,這兩種開啟路徑並不進行推薦。

  1. 一個流程

將倉庫克隆之後,就可以進行開發。這裡簡單整理一個操作的流程:

更新伺服器程式碼
進行原生代碼開發
開發結束,更新伺服器程式碼
這一步更新之後,可能更新成功,也可能更新失敗。
更新失敗,可能是本地某個檔案有改動,伺服器這個檔案同樣有改動
更新成功或失敗,都可以繼續往下操作
原生代碼Commit
更新伺服器程式碼
本地帶Push到伺服器
結束
這個流程是筆者自己總結的,也是比較推薦,其中有多次程式碼更新,也是Pull操作。在多人協作開發的過程中,伺服器的程式碼是隨時有可能變更的,可以在瀏覽器中進行檢視,多次更新程式碼好處多多。

  1. 實踐

使用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的專案,進行程式碼更新。

  1. 衝突解決

衝突的出現:

修改了同一個檔案的不同地方
這種衝突解決比較方便,更新之後會自動進行合併。
修改了同一個檔案的同一地方
這種衝突需要手動進行合併。
為了演示衝突的解決,兩個賬號修改進行同一檔案同一行程式碼,賬號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

  1. 檔案還原

檔案還原的功能其實就是用來幫我們後悔,或者是回退的操作。這裡舉出兩個使用的地方:

如有對某個檔案進行修改之後,不想將其Commit,希望還原回舊版本,選中檔案,右鍵選擇Git選擇Revert
對於已經新增add的檔案,如果你不想繼續對其新增索引,可以進行撤銷add,方法就是還原

後記

Git的使用基本完成
對於Git命名行操作,並沒有接觸太多
Git中的分支操作沒有涉及