使用 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 选项只表示忽略本地改动,可以强制同步远端服务器的代码,但是本地修改的文件还是保持改动不变,不会强制覆盖掉本地修改。而且同步之后,本地的分支指向会发生变化,不再指向原来的分支。具体举例如下。
-
下面是执行 repo sync -d 之前的分支信息:
$ git branch* curent_branch_xxx
-
下面是执行 repo sync -d 之后的分支信息:
$ git branch* (detached from 715faf5) curent_branch_xxx
即,从远端服务器同步的代码,是同步到跟踪远端服务器的分支,还没有从 git 仓库把代码 checkout 到本地,而当前本地修改的代码处在未命名分支下,是不同的分支,互不干扰,才能在不丢弃本地修改的情况下,强制同步远端服务器代码。
-
执行 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 ...