使用 repo sync
命令來同步遠端服務器的 Android 代碼,若是本地修改了代碼但尚未 commit,會提示沒法 sync:android
error: android/frameworks/base/: contains uncommitted changes
此時,能夠使用 git reset
命令丟棄本地修改,而後再執行 repo sync
來同步代碼。git
若是想要不丟失本地修改,強制同步遠端服務器代碼,能夠加上 -d
選項,repo sync -d
命令會將 HEAD 強制指向 repo manifest 版本,而忽略本地的改動。bash
查看 repo help sync 的幫助信息,對 -d 選項的說明以下:服務器
-d, --detach
detach projects back to manifest revision
注意:加上 -d
選項只表示忽略本地改動,能夠強制同步遠端服務器的代碼,可是本地修改的文件仍是保持改動不變,不會強制覆蓋掉本地修改。並且同步以後,本地的分支指向會發生變化,再也不指向原來的分支。具體舉例以下。ide
1.下面是執行 repo sync -d
以前的分支信息:測試
$ git branch * curent_branch_xxx
2.下面是執行 repo sync -d
以後的分支信息:this
$ git branch * (detached from 715faf5) curent_branch_xxx
即,從遠端服務器同步的代碼,是同步到跟蹤遠端服務器的分支,尚未從 git 倉庫把代碼 checkout 到本地,而當前本地修改的代碼處在未命名分支下,是不一樣的分支,互不干擾,才能在不丟棄本地修改的狀況下,強制同步遠端服務器代碼。code
3.執行 git status
命令,能夠看到本地仍是有修改過且尚未 commit 的文件,同步遠端服務器代碼後,並不會強制覆蓋本地文件的修改:xml
$ git status HEAD detached at 715faf5 Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: vendor/chioverride/default/g_pipelines.h modified: vendor/topology/g_usecase.xml
即,若是想要丟棄本地修改、讓本地代碼跟同步後的 git 倉庫代碼一致,repo sync -d
命令達不到這個效果。ip
另外,repo sync 有一個 --force-sync
選項,具體說明以下:
--force-sync
overwrite an existing git directory if it needs to point to a different object directory. WARNING: this may cause loss of data
從說明來看,像是能夠強制同步,且可能丟失本地改動。可是實際測試發現,這個選項並不能強制覆蓋本地的改動。若是本地文件發生改動,加上這個選項也是會 sync 報錯:
$ repo sync --force-sync . Fetching project tools/ error: tools/: contains uncommitted changes
同時提供 -d
和 --force-sync
兩個選項,仍是不能強制覆蓋本地修改。
目前沒有找到 repo sync
命令能夠強制覆蓋本地修改的選項。