使用 repo sync 命令来同步远端服务器的 Android 代码,如果本地修改了代码但还没有 commit,会提示无法 sync:

error: android/frameworks/base/: contains uncommitted changes

此时,可以使用 git reset 命令丢弃本地修改,然后再执行 repo sync 来同步代码。

如果想要不丢失本地修改,强制同步远端服务器代码,可以加上 -d 选项,repo sync -d 命令会将 HEAD 强制指向 repo manifest 版本,而忽略本地的改动。

查看 repo help sync 的帮助信息,对 -d 选项的说明如下:

-d, --detach
detach projects back to manifest revision

注意 :加上 -d 选项只表示忽略本地改动,可以强制同步远端服务器的代码,但是本地修改的文件还是保持改动不变,不会强制覆盖掉本地修改。而且同步之后,本地的分支指向会发生变化,不再指向原来的分支。具体举例如下。

  1. 下面是执行 repo sync -d 之前的分支信息:
$ git branch* curent_branch_xxx
  1. 下面是执行 repo sync -d 之后的分支信息:
$ git branch* (detached from 715faf5) curent_branch_xxx

即,从远端服务器同步的代码,是同步到跟踪远端服务器的分支,还没有从 git 仓库把代码 checkout 到本地,而当前本地修改的代码处在未命名分支下,是不同的分支,互不干扰,才能在不丢弃本地修改的情况下,强制同步远端服务器代码。

  1. 执行 git status 命令,可以看到本地还是有修改过且还没有 commit 的文件,同步远端服务器代码后,并不会强制覆盖本地文件的修改:
$ git statusHEAD detached at 715faf5Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: vendor/chioverride/default/g_pipelines.h modified: vendor/topology/g_usecase.xml

即,如果想要丢弃本地修改、让本地代码跟同步后的 git 仓库代码一致,repo sync -d 命令达不到这个效果。

另外,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 命令可以强制覆盖本地修改的选项。

//强制恢复 代码 修改 前状态 re po sync -d # 将HEAD强制指向manifest的库,而忽略本地的改动。 re po forall -c ‘git reset –hard’ # Remove all working directory (and staged) changes. re po forall -c ‘git clean -f -d’ # Clean untracked files //拉 代码 re po sync -c... python sync _images -n | --name < re po > 从配置文件 同步 图像,默认为“images.txt” python sync _images [-f | --file < config> ] 其他可选参数 -d | --docker_host < tcp> | < ' unix:///var/run/docker.sock ' > -r | --registry < host> -i | --insecure_registry 使用 re po sync 命令来 同步 远端服务器的 Android 代码 ,如果本地 修改 代码 但还没有 commit, 提示无法 sync :error: android /frameworks/base/: contains uncommitted changes此时,可以 使用 git reset 命令 丢弃 本地 修改 ,然后再执行 re po sync 同步 代码 。如果想要不丢失本地 修改 ,强制 同步 远端服务器代... 系统: android 6.0 调试一个新5寸屏,项目是在原有分支上 修改 的,做一个备份,方便以后再查看或者 修改 。我的方法是新建一个分支,复制所有 修改 到新分支上,原分支还可以自由 修改 ;在 同步 时出现了not in问题。 解决办法:re po sync --force- sync 再次 同步 :re po sync 以下是我的步骤,以及错误解决 1、提交现有分支所有 修改 提交所有 修改 git add * git commit -m “备注” 目前所知, 使用 re po sync 同步 远端服务器 代码 ,不能强制 覆盖 本地 修改 。如果想要强制 覆盖 本地 修改 ,可以用 re po forall -c 来执行git 丢弃 本地 修改 的命令,git checkout 和 git reset 命令都可以 丢弃 本地 修改 。一般来说,可以 使用 git checkout . 命令来 丢弃 当前目录下的改动,但是实际执行 re po forall -c git checkout . ... git commit -m " new message changeid(保持上次一致)" --amend(第二次提交 修改 提交信息)git reset --hard commitId(清除commit 修改 ,工作区暂存区 代码 清除)git branch 分支名(re po start 分支名 -all)git chekout --文件名 (单个 修改 文件及文件夹)git branch -d或D 分支名 (删除本地分支)git checkout . (所有 修改 文件及文件夹) 史上最详细的git re po 工具 使用 教程 re po 是什么? re po 是Google开发的用于管理 Android 版本库的一个工具,re po 使用 Python对git进行了一定的封装,并不是用于取代git,它简化了对多个Git版本库的管理。用re po 管理的版本库都需要 使用 git命令来进行操作。 为什么要用re po ? 项目模块化/组件化之后各模块也作为独立的 Git 仓库从主项目里剥离了出去,各模块各自管理自己的版本。 Android 源码引用了很多开源项目,每一个子项目都是一个Git仓库,每个Git仓库都有很多分支 1、 re po start ##创建并切换分支 re po start newbranchname [--all | projectName] 刚克隆下来的 代码 是没有分支的,re po start是对git checkout –b 命令的封装。为指定的项目或所有项目(若 使用 —all参数),以清单文件中为设定的分支,创建特性分支。这条指令与git checkout –b 还是有很大的区别的,git ...