源代碼控制工作流

使用 Android 代碼需要使用Git (一種開源版本控制系統)和Repo (一種運行在 Git 之上的 Google 構建的存儲庫管理工具)。有關 Repo 和 Git 之間關係的說明以及每個工具的支持文檔鏈接,請參閱源代碼控制工具。

Android 開發涉及以下基本工作流程:

  1. 使用repo start啟動一個新的主題分支。
  2. 編輯文件。
  3. 使用git add階段更改。
  4. 使用git commit提交更改。
  5. 使用repo upload更改上傳到審查服務器。

任務

在 Android 代碼存儲庫中使用 Git 和 Repo 涉及執行以下常見任務。

命令描述
repo init初始化一個新客戶端。
repo sync將客戶端同步到存儲庫。
repo start開始一個新的分支。
repo status顯示當前分支的狀態。
repo upload將更改上傳到審閱服務器。
git add暫存文件。
git commit提交暫存文件。
git branch顯示當前分支。
git branch [branch]創建一個新的主題分支。
git checkout [branch]HEAD切換到指定的分支。
git merge [branch][branch]合併到當前分支。
git diff顯示未暫存更改的差異。
git diff --cached顯示分階段更改的差異。
git log顯示當前分支的歷史。
git log m/[codeline]..顯示未推送的提交。

有關使用 Repo 下載源的信息,請參閱下載源Repo 命令參考

同步客戶端

要同步所有可用項目的文件:

repo sync

要同步選定項目的文件:

repo sync PROJECT0 PROJECT1 ... PROJECTN

創建主題分支

每當您開始更改時,例如當您開始處理錯誤或新功能時,就在本地工作環境中啟動主題分支。主題分支不是原始文件的副本;它是一個指向特定提交的指針,這使得創建本地分支並在它們之間切換成為一種輕量級操作。通過使用分支,您可以將工作的一個方面與其他方面隔離開來。有關使用主題分支的有趣文章,請參閱分離主題分支

要使用 Repo 啟動主題分支,請導航到項目並運行:

repo start BRANCH_NAME .

尾隨句點 ( . ) 表示當前工作目錄中的項目。

要驗證是否已創建新分支:

repo status .

使用主題分支

要將分支分配給特定項目:

repo start BRANCH_NAME PROJECT_NAME

有關所有項目的列表,請參閱android.googlesource.com 。如果您已經導航到項目目錄,只需使用句點表示當前項目。

要切換到本地工作環境中的另一個分支:

git checkout BRANCH_NAME

查看現有分支列表:

git branch

或者

repo branches

這兩個命令都返回現有分支的列表,其中當前分支的名稱以星號 (*) 開頭。

暫存文件

默認情況下,Git 會注意到但不會跟踪您在項目中所做的更改。要告訴 Git 保留您的更改,您必須標記或暫存這些更改以包含在提交中。

要進行更改:

git add

此命令接受項目目錄中文件或目錄的參數。儘管名稱如此,但git add並不僅僅向 Git 存儲庫添加文件;它還可用於暫存文件修改和刪除。

查看客戶端狀態

列出文件的狀態:

repo status

查看未提交的編輯(標記為提交的本地編輯):

repo diff

要查看已提交的編輯(標記為提交的定位編輯),請確保您位於項目目錄中,然後使用cached參數運行git diff

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

提交更改

提交是 Git 中修訂控制的基本單元,由整個項目的目錄結構和文件內容的快照組成。使用此命令在 Git 中創建提交:

git commit

當系統提示提交消息時,為提交到 AOSP 的更改提供簡短(但有用)的消息。如果您不添加提交消息,則提交將失敗。

將更改上傳到 Gerrit

更新到最新版本,然後上傳更改:

repo sync
repo upload

這些命令返回您已提交的更改列表,並提示您選擇要上傳到審查服務器的分支。如果只有一個分支,您會看到一個簡單的y/n提示。

解決同步衝突

如果repo sync命令返回同步衝突:

  1. 查看未合併的文件(狀態代碼 = U)。
  2. 根據需要編輯衝突區域。
  3. 切換到相關的項目目錄。添加並提交受影響的文件,然後重新設置更改:
    git add .
    git commit
    git rebase --continue
    
  4. rebase 完成後,再次啟動整個同步:
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

清理客戶

將更改合併到 Gerrit 後,更新您的本地工作目錄,然後使用repo prune安全地刪除陳舊的主題分支:

repo sync
repo prune

刪除客戶

因為所有狀態信息都存儲在您的客戶端中,所以您只需要從文件系統中刪除該目錄:

rm -rf WORKING_DIRECTORY

刪除客戶端會永久刪除您尚未上傳以供審核的任何更改。