使用 Android 代碼需要使用Git (一種開源版本控制系統)和Repo (一種在 Git 之上運行的 Google 構建的存儲庫管理工具)。有關 Repo 和 Git 之間關係的說明以及每個工具的支持文檔的鏈接,請參閱源代碼控制工具。
流動
Android 開發涉及以下基本工作流程:
- 使用
repo start
開始一個新的主題分支。 - 編輯文件。
- 使用
git add
進行階段更改。 - 使用
git commit
提交更改。 - 使用
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
命令返回同步衝突:
- 查看未合併的文件(狀態代碼 = U)。
- 根據需要編輯衝突區域。
- 切換到相關的項目目錄。添加並提交受影響的文件,然後重新設置更改:
git add .
git commit
git rebase --continue
- rebase 完成後,再次啟動整個同步:
repo sync PROJECT0 PROJECT1 ... PROJECTN
清理客戶端
合併對 Gerrit 的更改後,更新本地工作目錄,然後使用repo prune
安全地刪除過時的主題分支:
repo sync
repo prune
刪除客戶端
因為所有狀態信息都存儲在您的客戶端中,您只需從文件系統中刪除該目錄:
rm -rf WORKING_DIRECTORY
刪除客戶端會永久刪除您尚未上傳以供審核的所有更改。